去年双十一第一次听说autojs,当时也尝试写过,那种模拟点击的,感觉体验很差。今天心血来潮吧,写一下。
软件介绍:当然是作者写的好了文档,git仓库,对ES6支持貌似还有不足,因此大部分使用ES5语法。
其实逻辑很简单!
这里假设已经给autojs打开了无障碍。会连vscode。
参考连接link,下面很多内容手册里都有的。
if (currentPackage() != "com.taobao.taobao") { launchApp("手机淘宝"); }这里要说明一下:com.taobao.taobao是通过autojs的悬浮窗获取的。
这时,就要开始用到控件了。打开淘宝主页面后,通过悬浮窗的第三个圈圈,通过“布局范围分析”和“布局层次分析”最终确定要选择的是哪一个控件。精挑细选,最终找到了这个可以点击的控件。
var target = className("android.widget.FrameLayout").depth(11).clickable(true).editable(false).findOne(); target.click();方法和上面说的一样
className("android.widget.Button").text("赚喵币").depth(15).findOne().click()这里遇到了点问题,需要判断左侧是不是能靠脚本完成的,比如邀请好友,这选项就需要跳过。这里逻辑是这样的,选择所以任务的list控件,然后遍历child,看是否是能完成的任务,如果不是就跳过。
if (!list) { list = className("android.widget.ListView").depth(15).findOne(); //获取list } var listitem = null; for (var i = 0; i < list.childCount(); i++) { listitem = list.child(i); var title = listitem.child(0).child(0).text(); var work = listitem.child(1).text(); if (title.indexOf("邀请好友") != -1) { //邀请好友,跳过 continue } if (work.indexOf("去完成") != -1 || work.indexOf("去浏览") != -1) { //能做的,就点,点完跳出循环 listitem.child(1).click(); break; } if (i + 1 == 7) { //此时循环完了,表示没有能做的了 toast("完成任务"); exit(); } }贴一张层次图,应该更清楚。
这里就是等文字变化了,就触发返回。要注意的是,这里的控件有多种形式。其中有任务完成 特别迷惑人,不仔细看很难发现这四个字前面有空格。
var flag = text("全部完成啦").exists() || text("任务已完成").exists() || text("任务完成").exists() || desc(" 任务完成").exists() || desc("任务完成").exists() || desc("任务已完成").exists() || desc("全部完成啦").exists(); if (flag) { back(); }整个写在了setInterval间隔函数中。隔2s进行一次判断。
toast("脚本开始运行"); if (currentPackage() != "com.taobao.taobao") { launchApp("手机淘宝"); } var list = null; setInterval(function () { if (currentPackage() != "com.taobao.taobao") { toast("请进入淘宝主页面"); } else { if (currentActivity() == "com.taobao.tao.TBMainActivity") { console.log("进入了主页面"); //目前在淘宝主页面 var target = className("android.widget.FrameLayout").depth(11).clickable(true).editable(false).findOne(); target.click(); } else if (currentActivity() == "com.taobao.browser.BrowserActivity") { console.log("进入了分页面"); //进入到了分页面,这里是指的刚开始四个连图的第三个 if (text("累计任务奖励").exists()) { //累计任务奖励是任务列表上方的那几个字 if (text("领取奖励").exists()) { //累计任务奖励后面的奖励领取 text("领取奖励").findOne().click(); } // 整个任务列表 if (!list) { list = className("android.widget.ListView").depth(15).findOne(); } var listitem = null; for (var i = 0; i < list.childCount(); i++) { //任务列表循环 listitem = list.child(i); console.log(i, listitem); var title = listitem.child(0).child(0).text(); var work = listitem.child(1).text(); if (title.indexOf("邀请好友") != -1) { continue } if (work.indexOf("去完成") != -1 || work.indexOf("去浏览") != -1) { listitem.child(1).click(); break; } if (i + 1 == 7) { toast("完成任务"); exit(); } } } else if (className("android.widget.Button").text("赚喵币").exists()) { //四个连图的第二个 className("android.widget.Button").text("赚喵币").depth(15).findOne().click() } } else { console.log("进入了店铺"); var flag = text("全部完成啦").exists() || text("任务已完成").exists() || text("任务完成").exists() || desc(" 任务完成").exists() || desc("任务完成").exists() || desc("任务已完成").exists() || desc("全部完成啦").exists(); if (flag) { //flag为true就表示喵币到手了 back(); } } } }, 2000);最后附上打包的apk 蓝奏云 . 密码:5xe2
文章来源:link