前言
去年双十一第一次听说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