小练手——Finish line自动打开低于一定折扣的商品

2023-11-05 10:10

本文主要是介绍小练手——Finish line自动打开低于一定折扣的商品,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Finish line是美国的一个运动品牌网站,我平时比较喜欢海淘鞋子,时不时可能想看看有没有什么好货,但是呢,每次都要自己在页面上一个个查看比较麻烦,故想弄一些自动化的筛选,自动选出性价比高的东西。废话不多说,上源码(chrome浏览器,筛选鞋子可行,其他大部分也可以的):

//指定你期望的折扣
let expectedDiscount = 0.4//分析第一个页面的信息
openShoesInNewTab(expectedDiscount)//设置定时器,遍历剩下所有页面
const timer = setInterval(()=>{// 第一步:找到“下一页”的按钮,并触发点击事件(这里我偷懒了,直接用Chrome开发者工具找到JS引用该节点的方式)document.querySelector("#mainColumn > div.row.align-middle.m-0.mt-2.mb-1.mt-medium-4.mb-medium-4 > div > div.grid-pagination-column.hide-for-small-only > div > div > div:nth-child(6) > a.button.pag-button.next.light-gray.ml-1 > span").click()// 第二步:使用setTimeout将计算商品折扣的代码放入macrotask中,等请求到数据后再执行(event loop相关)setTimeout(() => {openShoesInNewTab(expectedDiscount)}, 0)
}, 5000)//查找符合折扣要求的商品
function openShoesInNewTab(expectedDiscount) {//找到页面所有物品的信息,遍历(要将NodeList结构的类数组转为正真的数组后,才能使用数组方法)[...document.querySelectorAll('.product-card__details')].forEach( product => {//找到价格节点const node = product.querySelector('.product-price')//将字符串的价格:"$35.00 $25.00" ,转化为数字数组[35, 25],前面为原价,后面为现价const priceInfo = node.innerText.replace(/\$([0-9]*)/g, (a,b) => b).split(' ').map(price => price/1)// 计算折扣const discount = (priceInfo[1]/priceInfo[0]).toFixed(2)// 该物品对应的链接const url = product.querySelector('.hover-underline').href//若折扣小于expectedDiscount,则在新的标签页中打开该物品if(discount < expectedDiscount) {window.open(url, '_blank')}})
}//过几分钟等遍历所有的页面后,运行以下代码清除定时器:
clearInterval(timer)

使用步骤:

  1. 登入Finish line官网,然后选择一个你想要的品类,如下图选择的是男士鞋子:
    选择品类
  2. 可以在页面的左边选择栏选择好自己的偏好以后,打开浏览器的console面板(windows快捷键:Ctrl + Shift + J,Mac快捷键:Cmd + Option + J),将上述代码复制到console面板中,回车执行(注意:这里最后这行代码clearInterval(timer)不要复制进去,等一段时间后再运行,用于遍历完所有页面后清除定时器),然后你就可以干自己的事,该干嘛干嘛去咯,代码自动将你设定的低于指定折扣的商品在新的标签页中打开。过几分钟来收割就行了,你就可以美滋滋地浏览那些符合期望的商品了。如下图:
    运行代码

总结

代码中主要用到的知识点:

  • 定时器setInterval(fn, ms)setTimeout(fn, ms)。用于在指定时间ms毫秒后执行fn回调函数,setInterval是每隔ms毫秒循环不断地执行,setTimeout只执行一次,它们的回调函数都会被添加到macrotask队列中(事件循环相关可以看:这里),从而可以在获取页面数据(microtask任务优先级比macrotask高)后再执行。
  • 查找页面元素querySelector(selector)querySelectorAll(selector)。这两个函数都是用于查找符合CSS选择器selector规则的元素,querySelector()只返回查找到的第一个元素节点,querySelectorAll()返回的是NodeList节点列表,它是一个类数组(array-like),我们可以通过[...]展开运算符将其变为一个真正的数组,从而可以使用数组方法。
  • 字符串方法以及正则表达式
const priceInfo = node.innerText.replace(/\$([0-9]*)/g, (a,b) => b).split(' ').map(price => price/1)

解释一下这段代码:
①正则表达式/\$([0-9]*)/g用来全局匹配美元字符$后面跟着数字的字串,数字部分加上小括号是用于捕获数字,用来替换原来包含$符号的数字(正则表达式相关可以参考:这里)。
②通过字符串的replace()方法将类似这种形式的字符串'$35.00 $25.00'转化为这种形式'35.00 25.00'replace()方法的第二个参数是一个回调函数,这个回调函数会在每次匹配到相关的字串时执行,回调函数的第一个参数a表示匹配到的字串(这个例子就是:'$35''$25'),第二个参数b就是捕获到的内容(25'25),回调函数的返回值就是用来替换掉匹配到的内容。
③再通过字符串的split(' ')方法将'35 25'字符串按空格切分为字符串数组['35', '25']
④最后通过数组的map()方法将字符串数组转化为数字数组。

  • 在浏览器新窗口中打开指定url的方法:window.open(url, '_blank')

PS:以上纯属娱乐,其实主要想将学习过的东西拿来练练手,有时,程序员的快乐就是这么枯燥且乏味(哈哈哈,朱一旦非洲警告)

这篇关于小练手——Finish line自动打开低于一定折扣的商品的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/349129

相关文章

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.

Shell脚本实现自动登录服务器

1.登录脚本 login_server.sh #!/bin/bash# ReferenceLink:https://yq.aliyun.com/articles/516347#show all host infos of serverList.txtif [[ -f ./serverList.txt ]]thenhostNum=`cat ./serverList.txt | wc -l`e

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

以后写代码都是AI自动写了,Cursor+Claude-3.5-Sonnet,Karpathy 点赞的 AI 代码神器。如何使用详细教程

Cursor 情况简介 AI 大神 Andrej Karpathy 都被震惊了!他最近在试用 VS Code Cursor +Claude Sonnet 3.5,结果发现这玩意儿比 GitHub Copilot 还好用! Cursor 在短短时间内迅速成为程序员群体的顶流神器,其背后的原因在于其默认使用 OpenAI 投资的 Claude-3.5-Sonnet 模型,这一举动不仅改变了代码生成

在 Qt Creator 中,输入 /** 并按下Enter可以自动生成 Doxygen 风格的注释

在 Qt Creator 中,当你输入 /** 时,确实会自动补全标准的 Doxygen 风格注释。这是因为 Qt Creator 支持 Doxygen 以及类似的文档注释风格,并且提供了代码自动补全功能。 以下是如何在 Qt Creator 中使用和显示这些注释标记的步骤: 1. 自动补全 Doxygen 风格注释 在 Qt Creator 中,你可以这样操作: 在你的代码中,将光标放在

Jenkins自动构建部署项目

1. 楔子 在实际开发中,经常需要编译、静态代码检查、自动化测试、打包、部署、启动等一连串重复机械的动作,浪费时间、而且容易出错,而Jenkins就是专门Continuous integration(CI)/ Continuous Deploy(CD)开源工具,本文简单介绍Jenkins的使用。 在线无安装免费试用Jenkins:http://www.jenkins.org.cn/test

搜狗浏览器打开CSDN博客排版错乱问题解决

之前发生过几次,不知道什么原因。 今天一直用着好好的,打开一个csdn连接,显示404,博文被删除了,于是就用百度快照打开试试,百度快照打开显示的排版很乱也没找到有用信息。 后面再浏览CSDN博客就排版错乱,显示一个大大二维码图片。 尝试删除IE缓存无效,使用谷歌浏览是好的。 基本锁定就是搜狗缓存导致的,于是找如何删除搜狗缓存   清除后恢复正常