├── README.md ├── jd_523.js └── jdzns.js /README.md: -------------------------------------------------------------------------------- 1 | # 京东炸年兽 2 | 测试了大部分任务都可以完成 3 | 4 | 5 | # 特别申明 6 | 7 | 本仓库仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。 8 | 9 | 本项目内所有资源文件,禁止任何公众号、自媒体进行任何形式的转载、发布。 10 | 11 | 本人对任何脚本问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害。 12 | 13 | 请勿将此项目的任何内容用于商业或非法目的,否则后果自负。 14 | 15 | --- 16 | 17 | 18 | 出现bug直接提issue,请附上机型、系统版本、截图、错误日志等 19 | -------------------------------------------------------------------------------- /jd_523.js: -------------------------------------------------------------------------------- 1 | // 判断停留时间 2 | var JUDGE_TIME = 0; 3 | var appName = "com.jingdong.app.mall"; 4 | init(); 5 | /** 6 | * 初始化 7 | */ 8 | function init() { 9 | // 子线程监听脚本 10 | threads.start(function () { 11 | events.setKeyInterceptionEnabled("volume_up", true); 12 | //启用按键监听 13 | events.observeKey(); 14 | //监听音量上键按下 15 | events.onKeyDown("volume_up", function (event) { 16 | console.log("脚本退出!") 17 | exit(); 18 | }); 19 | }); 20 | 21 | console.show(); 22 | while (true) { 23 | 24 | enterActivity(); 25 | recoverApp(); 26 | 27 | getNeedSelector(); 28 | 29 | 30 | } 31 | } 32 | /** 33 | * 进入做任务界面 34 | */ 35 | function enterActivity() { 36 | if (!launch(appName)) { 37 | console.log('可能未安装京东App') 38 | } 39 | // console.info("准备进入任务界面"); 40 | if (!textContains("累计任务奖励").exists()) { 41 | sleep(1000); 42 | if (textContains("累计任务奖励").exists()) { 43 | console.info("已经在任务界面"); 44 | sleep(1000); 45 | headerXY = id("a96").findOne().bounds(); 46 | } else { 47 | if (desc("浮层活动").exists()) { 48 | console.info("点击浮层活动"); 49 | var huodong = desc("浮层活动").findOne().bounds(); 50 | randomClick(huodong.centerX(), huodong.centerY()); 51 | sleep(1000); 52 | 53 | } 54 | // 获取进入做任务界面的控件 55 | var button = className('android.view.View') 56 | .depth(15) 57 | .indexInParent(5) 58 | .drawingOrder(0) 59 | .clickable(); 60 | 61 | if (button.exists()) { 62 | console.info("点击进入做任务界面") 63 | var rect = button.findOne().click(); 64 | sleep(1000); 65 | } else { 66 | console.info("无法进入做任务界面,请手动点入") 67 | } 68 | 69 | } 70 | } 71 | } 72 | 73 | /** 74 | * 加入购物车 75 | */ 76 | function addMarketCar() { 77 | if (textContains('当前页点击浏览4个').exists() || textContains('当前页浏览加购').exists()) { 78 | console.info("在加购页面"); 79 | const productList = textContains('¥').find()//desc("¥").find(); 80 | console.info(productList.length); 81 | // } 82 | //const productList = className('android.widget.Button').depth(19).clickable().find() 83 | var count = 0; 84 | for (index = 0; index < productList.length; index++) { 85 | if (count == 4) { 86 | if (back()) { 87 | sleep(3000) 88 | count = 0; 89 | break; 90 | } 91 | } 92 | if (productList[index].parent().parent().children()[4].click()) { 93 | // 重置计时 94 | JUDGE_TIME = 0; 95 | log("加购浏览任务:正在添加第" + (index + 1) + "个商品"); 96 | sleep(2000); 97 | while (true) { 98 | if (back()) { 99 | count = count + 1; 100 | sleep(2000); 101 | if (textContains("当前页").exists()) { 102 | break; 103 | } 104 | } 105 | } 106 | } 107 | } 108 | } 109 | 110 | } 111 | /** 112 | * 获取需要进行的控件 113 | * @returns 114 | */ 115 | function getNeedSelector() { 116 | sleep(2000) 117 | var allSelector,parent=null 118 | allSelector = className('android.view.View') 119 | .depth(19) 120 | .indexInParent(3) 121 | .drawingOrder(0) 122 | .clickable() 123 | .find(); 124 | var flag = false 125 | for (let index = 0; index < allSelector.length; index++) { 126 | var parent = allSelector[index].parent() 127 | if (parent != null && parent.parent() != null && parent.parent().childCount() >= 3) { 128 | var r = parent.child(1).text().match(/(\d)\/(\d*)/) 129 | if(r[2]-r[1] > 0){ 130 | if (parent.child(2).text().match(/每邀1个好友/)) continue 131 | if (parent.child(2).text().match(/入会/)) continue 132 | if (parent.child(2).text().match(/下单/)) continue 133 | flag = goTask(parent.child(2).text(),parent,r[2]-r[1]); 134 | 135 | } 136 | } 137 | } 138 | if(!flag){ 139 | console.error("没有可以做的任务了") 140 | // exit() 141 | } 142 | } 143 | function goTask(text,parent,count) { 144 | console.log('需要进行' + count + '次“' + text + '”类任务') 145 | // 获取去完成按钮 146 | var button = parent.child(3); 147 | for(index =0;index -1){ 151 | //需要浏览8s的任务 152 | timeTask() 153 | }else if(text.indexOf("累计浏览")> -1){ 154 | while(true){ 155 | if (textContains("当前页点击浏览").exists() && textStartsWith("¥").find().length > 0) { 156 | var product = textStartsWith("¥").find()[0].parent().parent().parent().childCount(); 157 | if (product >= 4) { 158 | log("进入浏览任务") 159 | for (var i = 0; i <= 3; i++) { 160 | if (textStartsWith("¥").find()[i].parent().parent().children()[4].click()) { 161 | sleep(1000); 162 | log("加购并返回"); 163 | while (!textContains("当前页点击浏览").exists() && back()) { 164 | sleep(1000 * 2); 165 | } 166 | } 167 | } 168 | if (back()) { 169 | sleep(1000); 170 | break; 171 | } 172 | } 173 | }else if (textContains("当前页浏览加购").exists() && textStartsWith("¥").find().length > 0) { 174 | addMarketCar(); 175 | break; 176 | } 177 | } 178 | 179 | viewAndFollow(); 180 | }else if(parent.child(1).text().indexOf("种草") > -1){ 181 | if (textContains("品牌种草城").exists()) { 182 | for (var j = 0; j < 4; j++) { 183 | if (textContains("喜欢").exists() && textContains("喜欢").click()) { 184 | while(!textContains("喜欢").click() && back()) { 185 | sleep(1000); 186 | } 187 | 188 | } 189 | } 190 | 191 | } 192 | }else{ 193 | console.log('看下就完成') 194 | sleep(1000); 195 | viewAndFollow(); 196 | } 197 | 198 | 199 | } 200 | console.info("进行下一个任务") 201 | return true; 202 | 203 | } 204 | 205 | 206 | // 浏览n秒的任务 207 | function timeTask() { 208 | console.log('等待浏览任务完成...') 209 | JUDGE_TIME = 0 210 | while (true) { 211 | let finish_reg = /获得.*?金币|已达上限/ 212 | if ((textMatches(finish_reg).exists() || descMatches(finish_reg).exists())){ 213 | // 等待已完成出现,有可能失败 214 | viewAndFollow(); 215 | break 216 | } 217 | sleep(1000) 218 | JUDGE_TIME++; 219 | recoverApp() 220 | } 221 | 222 | } 223 | /** 224 | * 返回 225 | */ 226 | function viewAndFollow() { 227 | console.info("回到任务首页") 228 | trytime = 0; 229 | while (!textContains("累计任务奖励").exists() && trytime < 10) { 230 | back(); 231 | sleep(1000); 232 | trytime++; 233 | } 234 | } 235 | /** 236 | * 自动判断程序是否卡顿,恢复方法 237 | * 判断依据:1.不在活动界面 2.停留某个界面长达30s 238 | * @returns 239 | */ 240 | function recoverApp() { 241 | if (!text("累计任务奖励").exists() && JUDGE_TIME > 30) { 242 | if (back()) { 243 | // 计时器重置 244 | JUDGE_TIME = 0; 245 | console.warn("停留某个页面超过30s,自动返回,重置定时器。"); 246 | 247 | } 248 | } 249 | } 250 | /** 251 | * 点击 252 | * @param {横坐标} x 253 | * @param {纵坐标} y 254 | */ 255 | function randomClick(x, y) { 256 | var rx = random(0, 5); 257 | var ry = random(0, 5); 258 | 259 | click(x + rx, y + ry); 260 | sleep(2000); 261 | return true; 262 | } 263 | -------------------------------------------------------------------------------- /jdzns.js: -------------------------------------------------------------------------------- 1 | // 需要完成的任务列表 2 | var TASK_LIST = ["浏览领", "浏览并关注8s", "浏览8秒", "浏览8s", "累计浏览", "浏览并关注可得2000", "浏览可得", "浏览并关注可得", "去首页浮层进入", "浏览5个品牌墙店铺", "小程序", "浏览5个品牌墙店铺","去组队可得"]; 3 | // 过渡操作 4 | var PASS_LIST = ['请选择要使用的应用', '我知道了', '取消', "京口令已复制"]; 5 | // 判断停留时间 6 | var JUDGE_TIME = 0; 7 | // 定时器 8 | var interval; 9 | // 已完成序号 10 | var finished_task_num = new Array(); 11 | // 当前序号 12 | var current_task_num = 0; 13 | // 浏览就返回标记 14 | var isBackFlag = false; 15 | // 小程序标记 16 | var isXcx = false; 17 | var appName = "com.jingdong.app.mall"; 18 | var huodong_indexInParent_num = 9; 19 | // 记录活动页面头部坐标 20 | var headerXY; 21 | var ruhui_errtime = 0 22 | var isruhui = false 23 | init(); 24 | 25 | 26 | /** 27 | * 入会操作 28 | * @returns 返回 0:成功 1:失败 29 | */ 30 | function ruhui(){ 31 | if(isruhui){ 32 | headerXY = textContains('确认授权').findOne().parent().children()[5].bounds() 33 | var rightx = headerXY.centerX(); 34 | var righty = headerXY.bottom - 5; 35 | console.info("x="+ rightx + " y=" + righty) 36 | textContains('确认授权').findOne().parent().children()[5].click() 37 | click(rightx, righty) 38 | sleep(500) 39 | click(rightx + 100, righty + 100) 40 | sleep(1000) 41 | 42 | if(textContains('确认授权').exists()) 43 | { 44 | console.info("入会失败"); 45 | if(ruhui_errtime > 4) 46 | { 47 | ruhui_errtime = 0; 48 | console.info("超过4次,不再入会"); 49 | } 50 | 51 | return 1; 52 | }else{ 53 | back(); 54 | sleep(1000) 55 | if (textContains('累计任务').exists()) 56 | { 57 | console.info("入会成功"); 58 | return 0; 59 | }else{ 60 | console.info("入会失败"); 61 | if(ruhui_errtime > 4) 62 | { 63 | ruhui_errtime = 0; 64 | console.info("超过4次,不再入会"); 65 | } 66 | return 1; 67 | } 68 | } 69 | } 70 | return 1; 71 | } 72 | 73 | 74 | /** 75 | * 初始化 76 | */ 77 | function init() { 78 | 79 | // 子线程监听脚本 80 | threads.start(function () { 81 | events.setKeyInterceptionEnabled("volume_up", true); 82 | //启用按键监听 83 | events.observeKey(); 84 | //监听音量上键按下 85 | events.onKeyDown("volume_up", function (event) { 86 | console.log("脚本退出!") 87 | exit(); 88 | }); 89 | }); 90 | alert("脚本执行过程请勿手动点击屏幕,否则脚本执行可能会错乱,导致任务失败\n执行过程中可按音量+键终止\n"); 91 | alert("需要手动点击进入京东炸年兽页面,然后点击做任务集爆竹,弹出任务界面即可\n"); 92 | alert("中间卡住需自己点击\n城城任务\n\n去AR玩游戏任务\n然后继续运行即可"); 93 | taskChoose(); 94 | auto.waitFor() 95 | console.show(); 96 | while (true) { 97 | 98 | enterActivity(); 99 | recoverApp(); 100 | 101 | var flag = getNeedSelector(); 102 | if(viewTask(flag) == 0) 103 | addMarketCar(); 104 | 105 | } 106 | } 107 | /** 108 | * 是否入会 109 | */ 110 | function taskChoose() { 111 | var d = dialogs.build({ 112 | title: "是否需要入会", 113 | positive: "确定", 114 | negative: "取消" 115 | }).on("positive", (dialog)=>{ 116 | isruhui = true; 117 | }).on("dismiss",(dialog)=>{ 118 | isruhui = false; 119 | }).show(); 120 | } 121 | /** 122 | * 进入做任务界面 123 | */ 124 | function enterActivity() { 125 | console.info("准备进入任务界面"); 126 | if (!textContains("累计任务奖励").exists()) { 127 | sleep(1000); 128 | if (textContains("累计任务奖励").exists()) { 129 | console.info("已经在任务界面"); 130 | sleep(1000); 131 | headerXY = id("a96").findOne().bounds(); 132 | } else { 133 | if (desc("浮层活动").exists()) { 134 | console.info("点击浮层活动"); 135 | var huodong = desc("浮层活动").findOne().bounds(); 136 | randomClick(huodong.centerX(), huodong.centerY()); 137 | sleep(1000); 138 | 139 | } 140 | 141 | // 获取进入做任务界面的控件 142 | var button = className('android.view.View') 143 | .depth(14) 144 | .indexInParent(huodong_indexInParent_num) 145 | .drawingOrder(0) 146 | .clickable(); 147 | if (button.exists()) { 148 | console.info("点击进入做任务界面") 149 | var rect = button.findOne().bounds(); 150 | randomClick(rect.centerX(), rect.centerY()); 151 | sleep(1000); 152 | headerXY = id("a96").findOne().bounds(); 153 | 154 | } else { 155 | huodong_indexInParent_num = huodong_indexInParent_num + 1; 156 | if (huodong_indexInParent_num == 10) { 157 | console.info("无法自动进入做任务界面,请手动进入!"); 158 | huodong_indexInParent_num = 9; 159 | 160 | } 161 | } 162 | } 163 | //sleep(1000); 164 | } 165 | } 166 | 167 | /** 168 | * 去完成任务 169 | * @param {是否点击任务标识} flag 170 | */ 171 | function viewTask(flag) { 172 | var res = 0; 173 | // 根据坐标点击任务,判断哪些需要进行 174 | sleep(2000); 175 | var timeout = 15 176 | var timestart = new Date().getTime(); 177 | console.info("开始时间:" + timestart) 178 | var timenow = new Date().getTime(); 179 | while (true && flag) { 180 | timenow = new Date().getTime(); 181 | if((timenow - timestart) / 1000 > timeout) 182 | { 183 | console.info("结束时间:" + timenow) 184 | break; 185 | } 186 | if ((textStartsWith("获得").exists() && textEndsWith("爆竹").exists()) || text("已浏览").exists()) { 187 | console.info("任务完成,返回"); 188 | viewAndFollow(); 189 | sleep(500); 190 | // 重置计时 191 | JUDGE_TIME = 0; 192 | break; 193 | } else if (text("已达上限").exists()) { 194 | console.info("任务已达上限,切换已完成按钮"); 195 | // 将当前任务序号添加到列表中,防止后续点到 196 | finished_task_num[finished_task_num.length] = current_task_num; 197 | viewAndFollow(); 198 | sleep(500); 199 | // 重置计时 200 | JUDGE_TIME = 0; 201 | res = 1; 202 | break; 203 | } else if (textContains('会员授权协议').exists() || textContains('立即开卡').exists()) { 204 | if(ruhui()) 205 | { //如果入会失败,则不再入会 206 | // 将当前任务序号添加到列表中,防止后续点到 207 | finished_task_num[finished_task_num.length] = current_task_num; 208 | } 209 | viewAndFollow(); 210 | // 重置计时 211 | JUDGE_TIME = 0; 212 | break; 213 | } else if (textContains('当前页点击浏览4个').exists() || textContains('当前页浏览加购').exists()) { 214 | console.info("当前为加入购物车任务"); 215 | // 重置计时 216 | JUDGE_TIME = 0; 217 | break; 218 | } else if (text("互动种草城").exists()) { 219 | console.info("当前为互动种草城任务"); 220 | // 重置计时 221 | JUDGE_TIME = 0; 222 | if (interactionGrassPlanting()) { 223 | back(); 224 | break; 225 | } 226 | break; 227 | } else if (text("到底了,没有更多了~").exists() && !text("消息").exists() && !text("扫啊扫").exists() 228 | && !(textStartsWith("当前进度").exists() && textEndsWith("10").exists())) { 229 | console.info("到底了,没有更多了~"); 230 | sleep(1000); 231 | // 重置计时 232 | JUDGE_TIME = 0; 233 | var count = 0; 234 | while (count <= 5) { 235 | if (undefined === headerXY) { 236 | headerXY = id("a96").findOne().bounds(); 237 | } 238 | var rightx = headerXY.right; 239 | var righty = headerXY.bottom + 300; 240 | while (click(rightx, righty)) { 241 | console.info("尝试点击坐标:", rightx, righty); 242 | count = count + 1; 243 | sleep(6000); 244 | if (!text("到底了,没有更多了~").exists()) { 245 | if (id("aqw").click()) { 246 | sleep(2000); 247 | console.info("尝试返回", count); 248 | back(); 249 | break; 250 | } 251 | } else { 252 | righty = righty + 50; 253 | } 254 | if(righty >= 1600) { 255 | break; 256 | } 257 | } 258 | } 259 | swipe(807, 314, 807, 414, 1); 260 | sleep(2000); 261 | break; 262 | } else if (text("消息").exists() && text("扫啊扫").exists()) { 263 | console.warn("因为某些原因回到首页,重新进入活动界面"); 264 | enterActivity(); 265 | } else if (text("天天都能领").exists()) { 266 | sleep(2000); 267 | console.info("天天都能领"); 268 | // 重置计时 269 | JUDGE_TIME = 0; 270 | var button = className('android.view.View') 271 | .depth(16) 272 | .indexInParent(3) 273 | .drawingOrder(0) 274 | .clickable().findOne().bounds(); 275 | if (randomClick(button.centerX(), button.centerY())) { 276 | sleep(1000); 277 | console.log("点我收下"); 278 | if (back()) { 279 | break; 280 | } 281 | } 282 | } else if (text("邀请新朋友 更快赚现金").exists()) { 283 | sleep(2000); 284 | console.info("邀请新朋友"); 285 | // 重置计时 286 | JUDGE_TIME = 0; 287 | var button = className('android.view.View') 288 | .depth(20) 289 | .indexInParent(0) 290 | .drawingOrder(0) 291 | .clickable().find()[0].bounds(); 292 | var y = button.bottom; 293 | while (click(button.right, y)) { 294 | if (!text("当前进度").exists()) { 295 | back(); 296 | sleep(3000); 297 | break; 298 | } else{ 299 | y = y + 100; 300 | } 301 | } 302 | break; 303 | } else if (text('京东11.11热爱环...').exists()) { 304 | console.info("下单任务,跳过"); 305 | back(); 306 | } else if (isBackFlag) { 307 | console.info("进入浏览就返回任务"); 308 | //sleep(1000); 309 | viewAndFollow(); 310 | isBackFlag = false; 311 | break; 312 | } else if (isXcx) { 313 | console.info("进入小程序任务"); 314 | // 重置计时 315 | JUDGE_TIME = 0; 316 | sleep(2000); 317 | back(); 318 | sleep(2000); 319 | let trytime = 0; 320 | if(textContains("确定").exists()) 321 | { 322 | print("小程序签名未通过") 323 | textContains("确定").click() 324 | sleep(1000); 325 | } 326 | while (!textContains("当前进度").exists() && trytime < 5) { 327 | back(); 328 | sleep(1000); 329 | trytime++; 330 | } 331 | 332 | isXcx = false; 333 | break; 334 | } else { 335 | if (recoverApp()) { 336 | break; 337 | } 338 | } 339 | } 340 | 341 | if ((timenow - timestart) > (timeout * 1000)) { 342 | console.info("界面超时了") 343 | viewAndFollow(); 344 | } 345 | return res; 346 | } 347 | 348 | /** 349 | * 加入购物车 350 | */ 351 | function addMarketCar() { 352 | if (textContains('当前页点击浏览4个').exists() || textContains('当前页浏览加购').exists()) { 353 | console.info("在加购页面"); 354 | // for(idx = 0; idx < 10; idx++) 355 | // { 356 | // console.info("i:" + idx); 357 | const productList = textContains('¥').find()//desc("¥").find(); 358 | console.info(productList.length); 359 | // } 360 | //const productList = className('android.widget.Button').depth(19).clickable().find() 361 | var count = 0; 362 | for (index = 0; index < productList.length; index++) { 363 | if (count == 4) { 364 | if (back()) { 365 | sleep(3000) 366 | count = 0; 367 | break; 368 | } 369 | } 370 | if (productList[index].parent().parent().children()[4].click()) { 371 | // 重置计时 372 | JUDGE_TIME = 0; 373 | log("加购浏览任务:正在添加第" + (index + 1) + "个商品"); 374 | sleep(2000); 375 | while (true) { 376 | if (back()) { 377 | count = count + 1; 378 | sleep(2000); 379 | if (textContains("当前页").exists()) { 380 | break; 381 | } 382 | } 383 | } 384 | } 385 | } 386 | } 387 | 388 | } 389 | 390 | /** 391 | * 互动种草城 392 | * @returns 393 | */ 394 | function interactionGrassPlanting() { 395 | var count = 0; 396 | while (true) { 397 | if (className('android.view.View').indexInParent(4).depth(14).findOne().click()) { 398 | // 重置计时 399 | JUDGE_TIME = 0; 400 | console.info("去逛逛"); 401 | sleep(2000); 402 | if (back()) { 403 | sleep(2000); 404 | count = count + 1; 405 | if (count == 3) { 406 | return true; 407 | } 408 | } 409 | } 410 | } 411 | 412 | } 413 | 414 | /** 415 | * 获取需要进行的控件 416 | * @returns 417 | */ 418 | function getNeedSelector() { 419 | sleep(2000) 420 | 421 | var allSelector = className('android.view.View') 422 | .depth(19) 423 | .indexInParent(3) 424 | .drawingOrder(0) 425 | .clickable() 426 | .find(); 427 | for (let index = 0; index < allSelector.length; index++) { 428 | for (var i = 0; i < TASK_LIST.length; i++) { 429 | // 获取具有需要完成任务字符串的控件集合 430 | var list = allSelector[index].parent().findByText(TASK_LIST[i]); 431 | // 如果长度大于0则表示存在该控件 432 | if (list.size() > 0) { 433 | // 获取不在序列中的序号 434 | if (finished_task_num.indexOf(index) < 0) { 435 | console.info("当前已完成序列:", finished_task_num) 436 | current_task_num = index; 437 | } else { 438 | continue; 439 | } 440 | 441 | // 如果是浏览就返回的任务,将标记设为true 442 | isBackFlag = (TASK_LIST[i].indexOf("浏览可得") >= 0 || TASK_LIST[i].indexOf("浏览并关注可得") >= 0) ? true : false; 443 | // 如果是小程序任务,将小程序标记设为true 444 | isXcx = (TASK_LIST[i].indexOf("小程序") >= 0) ? true : false; 445 | var rect = allSelector[current_task_num].bounds(); 446 | if (textContains("当前进度").exists()) { 447 | console.info("去完成任务,当前任务序列:", current_task_num,TASK_LIST[i]) 448 | if(TASK_LIST[i] == "浏览可得" || TASK_LIST[i] == "去组队可得" ) 449 | { 450 | console.info("看下就回来") 451 | isBackFlag = true; 452 | } 453 | randomClick(rect.centerX(), rect.centerY()); 454 | //console.info("开始任务:", allSelector[current_task_num].parent().findByText(TASK_LIST[i]).get(0).text()); 455 | return true; 456 | } 457 | } 458 | } 459 | } 460 | } 461 | 462 | /** 463 | * 返回 464 | */ 465 | function viewAndFollow() { 466 | trytime = 0; 467 | while (!textContains("当前进度").exists() && trytime < 10) { 468 | back(); 469 | sleep(1000); 470 | trytime++; 471 | } 472 | } 473 | 474 | /** 475 | * 自动判断程序是否卡顿,恢复方法 476 | * 判断依据:1.不在活动界面 2.停留某个界面长达30s 477 | * @returns 478 | */ 479 | function recoverApp() { 480 | if (!text("当前进度").exists() && JUDGE_TIME > 30) { 481 | if (back()) { 482 | // 计时器重置 483 | JUDGE_TIME = 0; 484 | console.warn("停留某个页面超过30s,自动返回,重置定时器。"); 485 | return true; 486 | } 487 | } else { 488 | return false; 489 | } 490 | } 491 | /** 492 | * 点击 493 | * @param {横坐标} x 494 | * @param {纵坐标} y 495 | */ 496 | function randomClick(x, y) { 497 | var rx = random(0, 5); 498 | var ry = random(0, 5); 499 | 500 | click(x + rx, y + ry); 501 | sleep(2000); 502 | return true; 503 | } --------------------------------------------------------------------------------