查看: 555|回复: 1

[其他发布] 某炸年兽的超级autojs代码!更新至2022-01-14

[复制链接]
发表于 2022-1-14 10:24 | 显示全部楼层 |阅读模式
非法程序、 2022-1-14 10:24 555 1 显示全部楼层
作者:czj2369
链接:自己找
重要说明
请不要使用python等一切已做好exe的脚本做炸年兽活动。
AutoJS最多让你没有收益,你只要关闭AutoJS,还能继续活动,还能获得积分。
用脚本的话,大概率会提示“活动火爆”,直接导致你本次活动再也无法获得积分。
这也是我为何一直坚持(尽管Github有更方便好用的脚本)分享AutoJS的原因。

更新

20220113-没有特别要说明的。作者与双十一时候的作者一致。好像双十一的代码能够直接跑炸年兽。另外,需要手动进入活动页面。

神秘代码
  1. /**
  2. * JD双11赚汪汪币
  3. *
  4. * Author: czj
  5. * Date: 2021/10/20
  6. * Time: 23:02:50
  7. * Versions: 1.9.0
  8. * Github: ***
  9. */

  10. // 需要完成的任务列表
  11. var TASK_LIST = ["浏览并关注", "浏览8s", "累计浏览","浏览并关注可得2000", "浏览可得", "去首页浮层进入", "浏览5个品牌墙店铺", "小程序", "品牌墙店铺","逛晚会页"];
  12. // 过渡操作
  13. var PASS_LIST = ['请选择要使用的应用', '我知道了', '取消', "京口令已复制"];
  14. // 判断停留时间
  15. var JUDGE_TIME = 0;
  16. // 定时器
  17. var interval;
  18. // 已完成序号
  19. var finished_task_num = new Array();
  20. // 当前序号
  21. var current_task_num = 0;
  22. // 浏览就返回标记
  23. var isBackFlag = false;
  24. // 小程序标记
  25. var isXcx = false;
  26. var appName = "com.jingdong.app.mall";
  27. var huodong_indexInParent_num = 9;
  28. // 记录活动页面头部坐标
  29. var headerXY;
  30. init();

  31. /**
  32. * 初始化
  33. */
  34. function init() {

  35.     // 子线程监听脚本
  36.     threads.start(function () {
  37.         events.setKeyInterceptionEnabled("volume_up", true);
  38.         //启用按键监听
  39.         events.observeKey();
  40.         //监听音量上键按下
  41.         events.onKeyDown("volume_up", function (event) {
  42.             console.log("脚本退出!")
  43.             exit();
  44.         });
  45.     });

  46.     start();

  47.     // 子线程开启计时
  48.     threads.start(function () {
  49.         if (interval == null) {
  50.             // 开启计时器,进行卡顿计时
  51.             // 启动定时器前,将计数器归为0
  52.             JUDGE_TIME = 0;
  53.             log("开启定时器");
  54.             interval = setInterval(function () {
  55.                 JUDGE_TIME = JUDGE_TIME + 1;
  56.             }, 1000);
  57.         }
  58.     });

  59.     while (true) {

  60.         transitioPperation();

  61.         enterActivity();

  62.         recoverApp();

  63.         var flag = getNeedSelector();

  64.         viewTask(flag);

  65.         viewProduct();
  66.          
  67.         addMarketCar();

  68.     }


  69. }

  70. /**
  71. * 启动京东
  72. */
  73. function start() {
  74.     auto.waitFor()
  75.     if (launch(appName)) {
  76.         console.info("启动京东APP");
  77.         console.info("author:czj");
  78.         console.info("地址:https://github.com/czj2369/jd_tb_auto");
  79.     }
  80.     console.show();
  81. }

  82. /**
  83. * 进入做任务界面
  84. */
  85. function enterActivity() {
  86.     if (!text("累计任务奖励").exists()) {
  87.         sleep(4000);
  88.         if (text("累计任务奖励").exists()) {
  89.             console.info("已经在任务界面");
  90.             sleep(1000);
  91.             headerXY = id("a96").findOne().bounds();
  92.         } else {
  93.             if (desc("浮层活动").exists()) {
  94.                 console.info("点击浮层活动");
  95.                 var huodong = desc("浮层活动").findOne().bounds();
  96.                 randomClick(huodong.centerX(), huodong.centerY());
  97.                 sleep(1000);

  98.             }

  99.             // 获取进入做任务界面的控件
  100.             var button = className('android.view.View')
  101.                 .depth(14)
  102.                 .indexInParent(huodong_indexInParent_num)
  103.                 .drawingOrder(0)
  104.                 .clickable();
  105.             if (button.exists()) {
  106.                 console.info("点击进入做任务界面")
  107.                 var rect = button.findOne().bounds();
  108.                 randomClick(rect.centerX(), rect.centerY());
  109.                 sleep(1000);
  110.                 headerXY = id("a96").findOne().bounds();

  111.             } else {
  112.                 huodong_indexInParent_num = huodong_indexInParent_num + 1;
  113.                 if (huodong_indexInParent_num == 10) {
  114.                     console.info("无法自动进入做任务界面,请手动进入!");
  115.                     huodong_indexInParent_num = 9;

  116.                 }
  117.             }
  118.         }
  119.         sleep(1000);
  120.     }
  121. }

  122. /**
  123. * 去完成任务
  124. * [url=home.php?mod=space&uid=952169]@Param[/url] {是否点击任务标识} flag
  125. */
  126. function viewTask(flag) {
  127.     // 根据坐标点击任务,判断哪些需要进行
  128.     sleep(2000);
  129.     while (true && flag) {
  130.         if ((textStartsWith("获得").exists() && textEndsWith("汪汪币").exists()) || text("已浏览").exists()
  131.             || (textStartsWith("获得").exists() && textEndsWith("爆竹").exists())) {
  132.             console.info("任务完成,返回");
  133.             viewAndFollow();
  134.             // 重置计时
  135.             JUDGE_TIME = 0;
  136.             break;
  137.         } else if (text("任务已达上限").exists() || text("已达上限").exists()) {
  138.             console.info("任务已达上限,切换已完成按钮");
  139.             // 将当前任务序号添加到列表中,防止后续点到
  140.             finished_task_num[finished_task_num.length] = current_task_num;
  141.             viewAndFollow();
  142.             // 重置计时
  143.             JUDGE_TIME = 0;
  144.             break;
  145.         } else if (textContains('会员授权协议').exists()) {
  146.             console.info("不授权加入会员,切换已完成按钮");
  147.             // 将当前任务序号添加到列表中,防止后续点到
  148.             finished_task_num[finished_task_num.length] = current_task_num;
  149.             viewAndFollow();
  150.             // 重置计时
  151.             JUDGE_TIME = 0;
  152.             break;
  153.         } else if (textContains('当前页点击浏览5个').exists() || textContains('当前页浏览加购').exists()
  154.             || textContains('当前页点击浏览4个商品领爆竹').exists() || textContains('当前页浏览加购4个商品领爆竹').exists()) {
  155.             console.info("当前为加入购物车任务或浏览商品任务");
  156.             // 重置计时
  157.             JUDGE_TIME = 0;
  158.             break;
  159.         } else if (text("互动种草城").exists()) {
  160.             console.info("当前为互动种草城任务");
  161.             // 重置计时
  162.             JUDGE_TIME = 0;
  163.             if (interactionGrassPlanting()) {
  164.                 back();
  165.                 break;
  166.             }
  167.             break;
  168.         } else if (text("到底了,没有更多了~").exists() && !text("消息").exists() && !text("扫啊扫").exists()
  169.             && !(textStartsWith("当前进度").exists() && textEndsWith("10").exists())) {
  170.             console.info("到底了,没有更多了~");
  171.             sleep(1000);
  172.             // 重置计时
  173.             JUDGE_TIME = 0;
  174.             var count = 0;
  175.             while (count <= 5) {
  176.                 if (undefined === headerXY) {
  177.                     headerXY = id("a96").findOne().bounds();
  178.                 }
  179.                 var rightx = headerXY.right;
  180.                 var righty = headerXY.bottom + 300;
  181.                 while (click(rightx, righty)) {
  182.                     console.info("尝试点击坐标:", rightx, righty);
  183.                     count = count + 1;
  184.                     sleep(6000);
  185.                     if (!text("到底了,没有更多了~").exists()) {
  186.                         if (id("aqw").click()) {
  187.                             sleep(2000);
  188.                             console.info("尝试返回", count);
  189.                             back();
  190.                             break;
  191.                         }
  192.                     } else {
  193.                         righty = righty + 50;
  194.                     }
  195.                     if(righty >= 800) {
  196.                         break;
  197.                     }
  198.                 }
  199.             }
  200.             swipe(807, 314, 807, 414, 1);
  201.             sleep(2000);
  202.             break;
  203.         } else if (text("消息").exists() && text("扫啊扫").exists()) {
  204.             console.warn("因为某些原因回到首页,重新进入活动界面");
  205.             enterActivity();
  206.         } else if (text("天天都能领").exists()) {
  207.             sleep(2000);
  208.             console.info("天天都能领");
  209.             // 重置计时
  210.             JUDGE_TIME = 0;
  211.             var button = className('android.view.View')
  212.                 .depth(16)
  213.                 .indexInParent(3)
  214.                 .drawingOrder(0)
  215.                 .clickable().findOne().bounds();
  216.             if (randomClick(button.centerX(), button.centerY())) {
  217.                 sleep(1000);
  218.                 console.log("点我收下");
  219.                 if (back()) {
  220.                     break;
  221.                 }
  222.             }
  223.         } else if (text("邀请新朋友 更快赚现金").exists()) {
  224.             sleep(2000);
  225.             console.info("邀请新朋友");
  226.             // 重置计时
  227.             JUDGE_TIME = 0;
  228.             var button = className('android.view.View')
  229.                 .depth(20)
  230.                 .indexInParent(0)
  231.                 .drawingOrder(0)
  232.                 .clickable().find()[0].bounds();
  233.             var y = button.bottom;
  234.             while (click(button.right, y)) {
  235.                 if (!text("累计任务奖励").exists()) {
  236.                     back();
  237.                     sleep(3000);
  238.                     break;
  239.                 } else{
  240.                     y = y + 100;
  241.                 }
  242.             }
  243.             break;
  244.         } else if (text('京东11.11热爱环...').exists()) {
  245.             console.info("下单任务,跳过");
  246.             back();
  247.         } else if (isBackFlag) {
  248.             console.info("进入浏览就返回任务");
  249.             sleep(2000);
  250.             viewAndFollow();
  251.             isBackFlag = false;
  252.             break;
  253.         } else if (isXcx) {
  254.             console.info("进入小程序任务");
  255.             // 重置计时
  256.             JUDGE_TIME = 0;
  257.             sleep(2000);
  258.             launch(appName);
  259.             isXcx = false;
  260.             break;
  261.         } else {
  262.             if (recoverApp()) {
  263.                 break;
  264.             }
  265.         }
  266.     }

  267. }

  268. /**
  269. * 加入购物车
  270. */
  271. function addMarketCar() {
  272.     if (textContains('当前页点击浏览5个').exists() || textContains('当前页浏览加购').exists()) {
  273.         const productList = className('android.view.View').indexInParent(5).clickable().find();
  274.         //const productList = className('android.widget.Button').depth(19).clickable().find()
  275.         var count = 0;
  276.         for (index = 0; index < productList.length; index++) {
  277.             if (count == 5) {
  278.                 if (back()) {
  279.                     sleep(3000)
  280.                     count = 0;
  281.                     break;
  282.                 }
  283.             }
  284.             if (productList[index].click()) {
  285.                 // 重置计时
  286.                 JUDGE_TIME = 0;
  287.                 log("加入购物车任务:正在添加第" + (index + 1) + "个商品");
  288.                 sleep(2000);
  289.                 while (true) {
  290.                     if (text("购物车").exists() && back()) {
  291.                         count = count + 1;
  292.                         sleep(2000);
  293.                         if (!text("购物车").exists()) {
  294.                             break;
  295.                         }
  296.                     }
  297.                 }
  298.             }
  299.         }
  300.     }

  301. }

  302. /**
  303. * 浏览商品
  304. */
  305. function viewProduct() {
  306.     if (textContains('当前页点击浏览4个商品领爆竹').exists() || textContains('当前页浏览加购4个商品领爆竹').exists()) {
  307.         log("当前页点击浏览或加购4个商品领爆竹");
  308.         const productList = className('android.view.View').depth(15).indexInParent(4).clickable(true).find();
  309.         var count = 0;
  310.         for (index = 0; index < productList.length; index++) {
  311.             if (count == 4) {
  312.                 if (back()) {
  313.                     sleep(3000)
  314.                     break;
  315.                 }
  316.             }
  317.             if (productList[index].click()) {
  318.                 // 重置计时
  319.                 JUDGE_TIME = 0;
  320.                 log("浏览商品任务:正在浏览第" + (index + 1) + "个商品");
  321.                 sleep(2000);
  322.                 while (true) {
  323.                     if (text("购物车").exists() && back()) {
  324.                         count = count + 1;
  325.                         sleep(2000);
  326.                         if (!text("购物车").exists()) {
  327.                             break;
  328.                         }
  329.                     }
  330.                 }
  331.             }
  332.         }
  333.     }
  334. }

  335. /**
  336. * 互动种草城
  337. */
  338. function interactionGrassPlanting() {
  339.     var count = 0;
  340.     while (true) {
  341.         if (className('android.view.View').indexInParent(4).depth(14).findOne().click()) {
  342.             // 重置计时
  343.             JUDGE_TIME = 0;
  344.             console.info("去逛逛");
  345.             sleep(2000);
  346.             if (back()) {
  347.                 sleep(2000);
  348.                 count = count + 1;
  349.                 if (count == 5) {
  350.                     return true;
  351.                 }
  352.             }
  353.         }
  354.     }

  355. }

  356. /**
  357. * 获取需要进行的控件
  358. * @returns
  359. */
  360. function getNeedSelector() {
  361.     var allSelector = className('android.view.View')
  362.         .depth(19)
  363.         .indexInParent(3)
  364.         .drawingOrder(0)
  365.         .clickable()
  366.         .find();

  367.     for (let index = 0; index < allSelector.length; index++) {
  368.         for (var i = 0; i < TASK_LIST.length; i++) {
  369.             // 获取具有需要完成任务字符串的控件集合
  370.             var list = allSelector[index].parent().findByText(TASK_LIST[i]);
  371.             // 如果长度大于0则表示存在该控件
  372.             if (list.size() > 0) {
  373.                 // 获取不在序列中的序号
  374.                 if (finished_task_num.indexOf(index) < 0) {
  375.                     console.info("当前已完成序列:", finished_task_num)
  376.                     current_task_num = index;
  377.                 } else {
  378.                     continue;
  379.                 }

  380.                 // 如果是浏览就返回的任务,将标记设为true
  381.                 isBackFlag = (TASK_LIST[i].indexOf("浏览可得") >= 0 || TASK_LIST[i].indexOf("浏览并关注可得2000") >= 0) ? true : false;
  382.                 // 如果是小程序任务,将小程序标记设为true
  383.                 isXcx = (TASK_LIST[i].indexOf("小程序") >= 0) ? true : false;
  384.                 var rect = allSelector[current_task_num].bounds();
  385.                 if (text("累计任务奖励").exists()) {
  386.                     console.info("去完成任务,当前任务序列:", current_task_num)
  387.                     randomClick(rect.centerX(), rect.centerY());
  388.                     //console.info("开始任务:", allSelector[current_task_num].parent().findByText(TASK_LIST[i]).get(0).text());
  389.                     return true;
  390.                 }
  391.             }
  392.         }
  393.     }
  394. }

  395. /**
  396. * 返回
  397. */
  398. function viewAndFollow() {
  399.     sleep(1000);
  400.     back();
  401.     sleep(3000);
  402. }

  403. /**
  404. * 自动判断程序是否卡顿,恢复方法
  405. * 判断依据:1.不在活动界面 2.停留某个界面长达30s
  406. * @returns
  407. */
  408. function recoverApp() {
  409.     if (!text("累计任务奖励").exists() && JUDGE_TIME > 30) {
  410.         if (back()) {
  411.             // 计时器重置
  412.             JUDGE_TIME = 0;
  413.             console.warn("停留某个页面超过30s,自动返回,重置定时器。");
  414.             return true;
  415.         }
  416.     } else {
  417.         return false;
  418.     }
  419. }

  420. /**
  421. * 过渡操作
  422. */
  423. function transitioPperation() {
  424.     for (let index = 0; index < PASS_LIST.length; index++) {
  425.         if (text(PASS_LIST[index]).exists()) {
  426.             console.info("过渡操作:", PASS_LIST[index]);
  427.             if (PASS_LIST[index].indexOf("请选择要使用的应用") >= 0) {
  428.                 back();
  429.             } else if (text("查看同款").exists()) {
  430.                 text(PASS_LIST[index]).click();
  431.             } else if (PASS_LIST[index].indexOf("已复制") >= 0) {
  432.                 className('android.widget.LinearLayout')
  433.                     .depth(4)
  434.                     .indexInParent(1)
  435.                     .drawingOrder(2)
  436.                     .clickable()
  437.                     .findOne().click();
  438.             } else {
  439.                 text(PASS_LIST[index]).click();
  440.             }
  441.             sleep(1000);
  442.         }
  443.     }
  444. }

  445. /**
  446. * 点击
  447. * @param {横坐标} x
  448. * @param {纵坐标} y
  449. */
  450. function randomClick(x, y) {
  451.     var rx = random(0, 5);
  452.     var ry = random(0, 5);

  453.     click(x + rx, y + ry);
  454.     sleep(2000);
  455.     return true;
  456. }

  457. /**
  458. * Author: czj
  459. * Date: 2021/10/20
  460. * Time: 23:02:50
  461. * Github: ****
  462. */
复制代码


发表于 2022-2-22 21:40 | 显示全部楼层
Jik_ 2022-2-22 21:40 显示全部楼层
时光如飞刀,刀刀催人老
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

快速回复 返回顶部 返回列表