前言
Auto.js是安卓上基于JavaScript的面向自动化、工作流、小工具、小应用的代码开发平台,可以将日程繁琐重复的工作用代码实现,让机器代替人工操作,比如蚂蚁森林自动收能量,某宝和某东自动做任务。日常我们需要买一些需要实时监控货源的鞋子,衣服什么的也可以基于此平台脚本实现一个自动化脚本
疫情放开初期,药品和抗原什么都极其珍贵,一盒原价几块钱的布洛芬翻了几十倍甚至还还买不到,小孩子的药就更难买,一小瓶平时十几块的美林在医院门口有黄牛将价格抬到3000一瓶。家里人原本都以为杭州不会出现缺药的情况,基本上没准备什么药,一时措手不及,大人还好,主要小孩子才几个月大,虽然健康,但没个准备,始终处于焦虑的状态。事实证明,焦虑也是会传染的,那时候除了工作的时间,我也竭尽全力在帮忙寻找各种渠道购买小孩子的退烧药,主要是在某东和某宝上,但上面的店铺说是不定时放货,用python脚本监控发现一直处于无货状态,通过小红书等平台了解到全国的货基本都在北京,在ddky上可以修改定位到北京的地址然后让跑腿代买,但ddky上也是不定时放货的,ddky只有app端,尝试抓包发现如库存类的接口做了加密,一时难以解决,后面想到使用autojs看能不能实现自动监测库存然后提醒购买
过程
要实现上货自动提醒,思路如下
自动刷新当前商品详情页(有想过循环多个门店进行监控,但实际大多数都是无货,也可能导致刚好错过上货的店,还不如专一一家希望更大)
获取到当前是否有库存,能否购买
添加加购物车下单
提醒付款
开发步骤
保持手机和电脑端在同一局域网下
安卓手机端安装auto.js应用,并开启无障碍服务,老版本的autojs已经不维护,最新的autojs pro需要付费,此处选择开源开源版autox.js
电脑端安装vscode开发工具,在vscode中安装autojs插件,此处使用的插件为Auto.js-Pro-Ext
F1打开ext插件,首先开启服务,然后连接到新设备,也可在手机端点击连接电脑
新建项目
接下来就开始写功能了,首先我们看下ddky的商品列表搜索页
观察到搜索按钮位于最右上角。只要商品是有货的,购物车按钮即可点击。点击左侧悬浮窗,点击布局分析
可以点击任意模块查看控件信息或者生成查找代码,有些层次太深无法自动生成,得根据里面具体的信息自己写,一些控件查找的api可参考官方文档,比如此处找到搜索按钮的语句为
var sendButton = text("搜索").findOne();
要寻找指定的商品,可以循环当页商品列表,根据商品名称或者分类来匹配,再根据购物车按钮的点击属性来判断是否有货
className("android.widget.RelativeLayout").depth(10).find().forEach(function (one_product) {
desc = one_product.findOne(className("android.widget.TextView").textContains("小儿"));
以上实现了单次监控,要实现全天监控,只要使用setInterval函数开启循环即可,为了防止刷新过于频繁被限制,可以设置1-10s随机延迟。
接下来就该实现通知外部功能,短信或者微信什么的不一定能及时看到,此处采用响铃提醒方式,在项目目录下添加音乐文件,使用 media.playMusic api读取
media.playMusic("./music/1.wav", 1, true);
这样就实现了整个监控功能,寻找指定控件需要花点时间以外,其他都很简单
接下来把项目保存到设备
在手机端即可看到写好的项目,可选择调试运行,没问题以后使用内置打包功能打包成apk文件给其他手机安装使用,有些手机安装可能会提示病毒应用,重新打包多试几次,安装过后需要开启应用保活,允许完全后台行为,这样监控过程中才不会被系统鲨掉
完整代码已经上传到github,可到
上浏览
总结
在靠孩儿他爸妈和我人工刷了四五天都买不到已经绝望准备躺平的情况下,使用脚本在监控持续第5个小时就抢到了,听到响铃过后光速冲到手机旁2s内完成付款,心里还是相当欣慰,焦虑的日子终于可以结束了,不希望能用上,但有个储备就很踏实,幸运的是到后面这轮疫情结束都没用上
希望疫情不再出现,不用再陷入抢购潮的恐慌中。不过基于以上思路,我们平时想买一些比较稀缺的鞋子,衣服什么的可以参考实现,解放双手
评论区