【JavaScript语言】ZFB双十二自动赚翻倍豆脚本(基于AutoJs)
本帖最后由 yzw1130 于 2019-12-16 09:47 编辑碰巧在论坛看到 MagicYang 大佬发的脚本:
【JavaScript语言】基于AutoJs的ZFB双十二到店付款瓜分亿元自动做任务赚翻倍豆脚本
https://www.52pojie.cn/thread-1066071-1-1.html
一时手痒, 参考大佬的脚本写了一个新的:
[*]支持点击红包来赚取翻倍豆(需要填写次数【防止你手机烧了,哈哈】,想要无限循环自己改下代码吧);
[*]应该是考虑了各种情况,较完美的自动执行做任务赚翻倍豆
注意:请打开支付宝,进入活动页面(即有一个欠点的红包的页面),再执行本脚本!
不支持息屏,如果页面有弹出其他消息可能会受影响!
目前已知问题:
[*]安卓7的可以简单尝试下,不保证支持
====================
2019-12-16 更新
[*]跟随ZFB更新(活动降了,只有+1000了)
====================
2019-12-12 更新
[*]跟随ZFB更新(这次采用多个方式,按钮名称变了也没关系了)
====================
2019-12-11 又又更新
[*]跟随ZFB更新,更改按钮文案
====================
2019-12-05 更新
[*]跟随ZFB更新,更改按钮文案
[*]修改获取红包的位置,能适配更多机型
======================
2019-12-03 更新
[*]尝试修复点击已完成状态的bug;
[*]能自主选择是否做任务;
======================
2019-12-02 更新
[*]修复点击红包只能2次的bug;
[*]修复关闭窗口失效bug;
[*]修复跳转后出现授权窗口,无法跳过的bug;
======================
如有不清楚使用的,可以参考上面大佬的帖子内容。
后续有更新的话,第一时间是传到GitHub:https://github.com/ennnnny/autojs
代码如下:
auto.waitFor();
var height = device.height;
var width = device.width;
toast("\n设备宽" + width + "\n" + "设备高" + height + "\n" + "手机型号" + device.model + "\n安卓版本" + device.release);
setScreenMetrics(width, height);
var is_task = confirm("是否要做任务赚豆豆?");
var click_num = dialogs.rawInput("请输入点击红包的次数(留空为取消)", "");
if (isNaN(click_num)) {
toast("输入有误,不执行点击红包!");
click_num = "";
}
click(300, 600);
var button = is_index();
if (button != null) {
var red_package_temp = className("android.widget.Image").depth(14).findOne();
var red_package = red_package_temp.parent().child(3).bounds();
if (is_task) {
button.click();
var task_num = 0;
textContains("做任务赚翻倍豆").waitFor();
var b = textContains("做任务赚翻倍豆").findOne().bounds();
var wait_num = 1;
var find_num = 0;
while (true) {
let item = textEndsWith("+1000").findOnce(find_num);
if (item != null) {
if (item.parent().child(2).text() != "已完成") {
task_click("+1000", find_num);
task_num++;
toast("第" + task_num + "个");
find_num = 0;
} else {
find_num++;
}
continue;
}
wait_num++;
if (wait_num > 5) {
break;
} else {
swipe(width / 2, height / 2 + 300, width / 2, height / 2, 500);
}
}
var wait_num = 1;
var find_num = 0;
while (true) {
let item = textEndsWith("+2000").findOnce(find_num);
if (item != null) {
if (item.parent().child(2).text() != "已完成") {
task_click("+2000", find_num);
task_num++;
toast("第" + task_num + "个");
find_num = 0;
} else {
find_num++;
}
continue;
}
wait_num++;
if (wait_num > 5) {
break;
} else {
swipe(width / 2, height / 2 + 300, width / 2, height / 2, 500);
}
}
back_try();
toast("做任务赚翻倍豆结束");
toast("此次共赚" + task_num * 2000 + "个翻倍豆");
click(width - 70, b.centerY());
}
if (click_num != null && click_num != "" && click_num != 0) {
var button_2 = is_index();
if (button_2 != null) {
red_packet(red_package, click_num);
} else {
toast("位置异常,未能点击红包!");
}
}
} else {
toast("请回到活动首页再折行脚本!");
}
toast("脚本结束");
function is_index() {
if (textContains("翻倍豆限时加量").exists()) {
return textContains("翻倍豆限时加量");
} else {
if (textContains("我的翻倍豆").exists()) {
let one = textContains("我的翻倍豆").findOne().parent().child(3);
return one;
} else {
if (textContains("获得瓜分资格后").exists()) {
let two = textContains("获得瓜分资格后").findOne().parent().child(3);
return two;
} else {
return null;
}
}
}
}
function task_click(quota, find_num) {
if (text("再玩玩").exists()) {
text("再玩玩").findOne().click();
}
let item = textEndsWith(quota).findOnce(find_num);
item.parent().child(2).click();
let time = random(3000, 5000);
sleep(time);
back_try();
}
function red_packet(red_package, click_num) {
toast('开始点击红包');
var i = 0;
while (true) {
if (i >= click_num) {
break;
}
press(red_package.centerX(), red_package.centerY(), random(3000, 5000));
sleep(1000);
textContains("继续玩").waitFor();
sleep(1000);
textContains("继续玩").click();
i++;
toast("第" + i + "次");
click(300, 300);
}
toast('结束点击红包');
}
function back_try() {
var wait_num = 0;
while (!textContains("做任务赚翻倍豆").exists() && !textContains("赚翻倍豆").exists()) {
if (wait_num > 10) {
break;
}
if (text("再玩玩").exists()) {
text("再玩玩").findOne().click();
}
if (text("拒绝").exists()) {
text("拒绝").findOne().click();
}
if (text("取消").exists()) {
text("取消").findOne().click();
}
if (text("取消").exists()) {
text("取消").findOne().click();
}
if (textContains("授权").exists()) {
textContains("授权").findOne().click();
}
back();
sleep(1000);
wait_num++;
}
}
本帖最后由 jymjymjymjym 于 2019-12-2 05:40 编辑
支持一下
本帖最后由 MagicYang 于 2019-12-2 09:53 编辑
潇未然 发表于 2019-12-2 09:43
任务总会卡在授权步骤,这个能优化自动点击授权吗,不然中间还得人工点击一下。
if (text("你那边显示的内容,如授权").exists()) {
text("你那边显示的内容,如授权").findOne().click();
}
你那显示什么就把引号里改成什么加到下面那段代码后面后面
if (text("取消").exists()) {
text("取消").findOne().click();
} 膜拜大佬,大佬有推荐autojs的教程吗?想考完试系统学一下。我是开始是参考各路大佬的代码学的,零零散散 刚才跑了一下代码还是有点问题,但是我没测出哪里问题。大佬你再看下。这个界面无限循环
MagicYang 发表于 2019-12-2 01:39
刚才跑了一下代码还是有点问题,但是我没测出哪里问题。大佬你再看下。这个界面无限循环
已改,再试试看 似乎有两个问题
1、无限循环:在华为手机上没问题,但是在小米手机上有这个灰色的1000按钮,然后无限循环转账生活号。
2、点击红包,不管设置多少都只能点两次,华为手机和小米手机都一样。 可以看看
yzw1130 发表于 2019-12-2 02:06
已改,再试试看
现在做完任务是没问题了。问题就在于结束不了任务。要么就是什么都不访问一直循环task_num一直在加。加了几十也不停。要么就是乱点,和我之前写的时候一样。我在想,+1000和已完成是不是属于一个大的控件,能不能通过这种双重判断来确定是否已经点过这个。但技术有限,真的不知道怎么实现了。。 MagicYang 发表于 2019-12-2 01:11
膜拜大佬,大佬有推荐autojs的教程吗?想考完试系统学一下。我是开始是参考各路大佬的代码学的,零零散散
暑假的时候看了一些,我是跟着官网文档还有B站上一个UP主学的https://www.bilibili.com/video/av35582484?from=search&seid=4940408454761394267 H_Kali 发表于 2019-12-2 08:19
暑假的时候看了一些,我是跟着官网文档还有B站上一个UP主学的https://www.bilibili.com/video/av35582484 ...
谢谢大佬,考完研学一下!