yzw1130 发表于 2019-12-2 01:05

【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:37

本帖最后由 jymjymjymjym 于 2019-12-2 05:40 编辑

支持一下

MagicYang 发表于 2019-12-2 09:51

本帖最后由 MagicYang 于 2019-12-2 09:53 编辑

潇未然 发表于 2019-12-2 09:43
任务总会卡在授权步骤,这个能优化自动点击授权吗,不然中间还得人工点击一下。
if (text("你那边显示的内容,如授权").exists()) {
            text("你那边显示的内容,如授权").findOne().click();
      }

你那显示什么就把引号里改成什么加到下面那段代码后面后面
if (text("取消").exists()) {
            text("取消").findOne().click();
      }

MagicYang 发表于 2019-12-2 01:11

膜拜大佬,大佬有推荐autojs的教程吗?想考完试系统学一下。我是开始是参考各路大佬的代码学的,零零散散

MagicYang 发表于 2019-12-2 01:39

刚才跑了一下代码还是有点问题,但是我没测出哪里问题。大佬你再看下。这个界面无限循环


yzw1130 发表于 2019-12-2 02:06

MagicYang 发表于 2019-12-2 01:39
刚才跑了一下代码还是有点问题,但是我没测出哪里问题。大佬你再看下。这个界面无限循环

已改,再试试看

浮山一尘 发表于 2019-12-2 05:56

似乎有两个问题
1、无限循环:在华为手机上没问题,但是在小米手机上有这个灰色的1000按钮,然后无限循环转账生活号。


2、点击红包,不管设置多少都只能点两次,华为手机和小米手机都一样。

buluo987 发表于 2019-12-2 07:58

可以看看

MagicYang 发表于 2019-12-2 08:05

yzw1130 发表于 2019-12-2 02:06
已改,再试试看

现在做完任务是没问题了。问题就在于结束不了任务。要么就是什么都不访问一直循环task_num一直在加。加了几十也不停。要么就是乱点,和我之前写的时候一样。我在想,+1000和已完成是不是属于一个大的控件,能不能通过这种双重判断来确定是否已经点过这个。但技术有限,真的不知道怎么实现了。。

H_Kali 发表于 2019-12-2 08:19

MagicYang 发表于 2019-12-2 01:11
膜拜大佬,大佬有推荐autojs的教程吗?想考完试系统学一下。我是开始是参考各路大佬的代码学的,零零散散

暑假的时候看了一些,我是跟着官网文档还有B站上一个UP主学的https://www.bilibili.com/video/av35582484?from=search&seid=4940408454761394267

MagicYang 发表于 2019-12-2 08:41

H_Kali 发表于 2019-12-2 08:19
暑假的时候看了一些,我是跟着官网文档还有B站上一个UP主学的https://www.bilibili.com/video/av35582484 ...

谢谢大佬,考完研学一下!
页: [1] 2 3 4 5 6 7 8
查看完整版本: 【JavaScript语言】ZFB双十二自动赚翻倍豆脚本(基于AutoJs)