当前位置: 首页 > 后端技术 > Node.js

我写了一个抢购茅台的浏览器插件

时间:2023-04-03 23:37:26 Node.js

1.场景还原淘宝的茅台购买需要提前加入购物车。8:00,结账->订单提交。运气好的话可以买一瓶。但是好像黄牛很多,不依靠任何工具是抢不到的。分享一下自己开发的chrome插件。有兴趣的可以看看实现思路。它可能对你有所启发。也可以提出好的建议。大家一起讨论学习。开始吧!!二、功能排序1、卡点;页面在晚上8点自动刷新。2、自动提交;页面刷新后,可通过插件自动点击“提交订单”按钮。三、功能实现1、卡点首先分析一下实现卡点的效果,会遇到什么问题:a.每台电脑的系统时间不一样,跟淘宝服务器时间也不一样。如何解决?b.假设第一个问题解决了,但是当你在八点刷新页面时,你会经常看到类似商品已售罄的提示,或者是“晚了一步”?1.1.问题解决同步淘宝服务器时间接口:https://api.m.taobao.com/rest...由于开发的是浏览器插件,直接请求会出现跨域。所以在实际操作中,我提前写了一个节点服务,通过中间转发得到最终的淘宝服务器时间。轮询是否到了那个点。上一步已经获取到当前淘宝服务器时间。另外目标是8点钟,可以从服务器的8点钟得到当前时间有多长[定义为:disTime]。启动一个定时器进行轮询,每一次轮询时间都会从disTime中减去定时器间隔[定义为:interval],直到disTime小于等于某个值[singlePathTime定义在后面]。[interval]插件中支持手动配置,因为要想成功抢到,时间必须准确。如果定时器间隔设置太大或太小,都可能会错过精确的时间点,因此需要多次调整。同步服务器时间后,为什么“晚了一步”?根据我的判断,每个人的网速不同,从刷新页面到返回订单页面有一个请求时间。所以,在正式刷新页面之前,最好计算一下当前电脑当前网络环境下的单向时间【定义为:singlePathTime】,最后在8点之前的singlePathTime毫秒刷新页面。例如,如果singlePathTime计算为50毫秒,则页面将在7:59:59:950毫秒刷新。[singlePathTime]也支持在插件中手动配置,方便微调自动计算的单程时间。2、自动提交自动提交可以通过js中的click方法【伪代码:btn.click()】主动触发。这里要注意一点,这个按钮只能通过类名或者id找到,所以为了防止类名和id发生变化,在插件的配置界面中也加入了这个按钮。三、完整流程4、插件使用步骤如下:8点前几分钟,为了达到更好的效果:运行bat文件【为了方便启动node服务,打包成批处理文件,双击【启动服务】启动服务同步淘宝服务器时间;在购物车页面选择商品点击结算按钮,提前进入商品提交页面等待;在产品提交页面打开插件配置页面,配置单向时间和定时器间隔,提交按钮类名或id,等待时机到来即可。本插件仅供学习交流使用,不得恶意使用,更不能用于商业用途。由于内容敏感,不便贴出真实代码。有兴趣的可以关注公众号【前端大会】,发“茅台”获取源码。可惜到现在也没抢过几次。有兴趣的同学可以一起讨论,交流,共同提高。最后,希望所有同学都能实现“茅台自由”,哈哈哈……