小练手——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自动打开低于一定折扣的商品的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/cc18868876837/article/details/101556457
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/349129

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

css中的 vertical-align与line-height作用详解

《css中的vertical-align与line-height作用详解》:本文主要介绍了CSS中的`vertical-align`和`line-height`属性,包括它们的作用、适用元素、属性值、常见使用场景、常见问题及解决方案,详细内容请阅读本文,希望能对你有所帮助... 目录vertical-ali

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Redis中如何实现商品秒杀

《Redis中如何实现商品秒杀》:本文主要介绍Redis中如何实现商品秒杀问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录技术栈功能实现步骤步骤一:准备商品库存数据步骤二:实现商品秒杀步骤三:优化Redis性能技术讲解Redis的List类型Redis的Set

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Python Excel实现自动添加编号

《PythonExcel实现自动添加编号》这篇文章主要为大家详细介绍了如何使用Python在Excel中实现自动添加编号效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍简单的说,就是在Excel中有一列h=会有重复

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (