事情是这样的,最近做闲鱼,就是在闲鱼上面卖拼多多的商品。把拼多多的商品上架到闲鱼,顾客下单后,就去拼多多用顾客的地址给下单购买。
我以前也在想一个问题,同一个商品,拼多多的价格比闲鱼低得多,为啥还是有人在闲鱼上面买东西。
首先大家都知道闲鱼是一个二手商品交易平台,上面的东西便宜,性价比又不错,自然深受很多人喜欢,比如我,也在闲鱼上面淘了一些使用的宝贝。
当用户习惯使用某个app去购物的时候,他很少会与其它平台比价,信息差就这样诞生了。这就促生了"无货源一件代发"的模式。
一、现实的需求
呃,(⊙o⊙)…,跑题了,因为我闲鱼上面出售的商品,拼多多商家很多都是发的极兔速递,而极兔速递的运单号无法录入拼多多平台,用户不能自主查看物流信息。单少还好,单多起来,查一个物流信息要把拼多多整个"待收货"列表都看一遍…眼花缭乱。
所以,现实的需求就来了,如何把拼多多"待收货"的数据拉取下来,存入数据库,在数据库中检索?
我想过用抓包的方式,想了10秒钟,我就放弃了这个方案。
我的预想是这样的,就是能模拟我手动查件的操作(因为后期会开发在闲鱼上自动回复用户物流信息的功能),然后把数据获取下来,存入数据库中。
那么,Auto.js就闪亮登场了。
Auto.js出自一位1996年的大神,在Android上支持Node.js的JavaScript自动化和编程软件。可以模拟点击、滚动屏幕的操作以及获取页面节点信息等等,强大得不要不要的。
二、实现过程
要运行auto.js的脚本,首先你需要一台Android手机,Android版本不要太低,其次需要运行auto.js的app(新版的需要付费,老版的不需要,获取见文末)。
安装好的auto.js软件这这样的:
右侧是它的悬浮窗,点击悬浮窗可以进行一些操作。比如运行手机上的脚本,录屏,查看屏幕布局元素信息等。
2.1 开发环境准备
auto.js的脚本可以使用VSCode进行编写和调试。
在VSCode插件中搜索hyb1996 进行插件的安装。安裝后,快捷键"ctrl+shift+p"可以调出脚本的基本操作:Run On Device 、Save On Device 和Start Serve 等操作。
要想调试我们的脚本,需要手机和电脑在同一局域网,先运行Start Serve 后再在手机上点击连接电脑 ,输入电脑的IP就可以连接成功,执行Run On Device 就可以把编写的脚本运行在手机上。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上
还有,因为我们需要获取手机上面某个点击点的坐标,需要把手机上的坐标尺打开哦!
打开VSCode的调试控制台"Help"——>“Toggle Develop Tools”,用于查看控制台输出。
2.2 如何编写脚本
auto.js的脚本使用JS来编写的,了解JS语法就可以了。他的接口文档有很多强大的功能(自行查阅),比如获取屏幕某个文字对应的元素,滚动屏幕,延时,点击等等。
toast("开始搬砖...");
click(500, 200);
let 联系商家 = text("联系商家").findOne();
联系商家.click();
swipe(100, 1500, 100, 1262, 500)
sleep(1000);
使用上述方法,就可以实现模拟手动点击的功能了:点击某一个订单,进入详情,点击返回按钮,滚动到下一个订单位置,再次进入详情,以此循环。
2.3 获取屏幕数据
只要能获取屏幕上面所有的文本,就可以通过截取等操作获取我们想要的数据,毕竟页面数据格式都是一样的,我们的需求差不多就实现了80%了。
通过获取屏幕上类名为TextView 和android.view.View 所有的元素节点,通过元素的属性方法text()就可以获取元素节点的文本了。核心代码如下:
function getScreenallTextArr() {
let fas = "";
let fsfan = className("TextView").find();
for (let i = 0; i < fsfan.length; i++) {
let ftxt = fsfan[i].text();
if (ftxt != "") {
if (fas == "") {
fas = ftxt;
} else {
fas = fas + "_$_" + ftxt;
}
}
}
fsfan = className("android.view.View").find();
for (i = 0; i < fsfan.length; i++) {
ftxt = fsfan[i].text();
if (ftxt != "") {
if (fas == "") {
fas = ftxt;
} else {
fas = fas + "_$_" + ftxt;
}
}
}
return fas.split("_$_");
}
2.3 需求梳理
到这里,我们的需求就已经实现了。你可以打开拼多多"待收货"列表,我们再来梳理一下流程。
- 1、进入"待收货"列表,我们向上滚动一段空白区域——"去抢购"那个区块后,第一个订单就在最上面了。
swipe(100, 1500, 100, 1262, 500); - 2、我们每次进入订单详情,都是点击页面上同一个点,这个点需要根据手机屏幕来确定,只要能进入详情就可以了。
click(368, 600); - 3、进入详情页面后,调用
getScreenallTextArr 方法获取页面上所有文本组成的集合,物流状态,收款人,电话等信息都是在特定位置显示的,可以通过切割数组获取到我们想要的数据。通过Auto.js的HTTP模块就可以把数据输送到后台。 - 4、点击左上角的返回按钮,进入订单列表页面,把下一个订单滚动到顶部,再次点击,依次循环。
swipe(100, 1500, 100, 645, 1000);
三、效果展示
我们进入订单详情,执行getScreenallTextArr 就可以获取页面的数据了。
结果就粗来啦~~~
四、后期扩展
在闲鱼app上自动推送用户的物流信息。与获取拼多多订单信息类似,通过滚动屏幕,点击按钮等操作就可以实现了。
五、申明
此篇文章仅做技术交流,切勿用于非法操作!
欢迎关注公众号【前端技术驿站】 回复12345 获取闲鱼运营视频 回复23456 获取老版auto.js
更多文章
|