js的var定义的字符串变量使用+=时报语法错误

博客提到在JavaScript里,使用var定义字符串变量后,使用+=操作符时出现语法错误,错误信息为Uncaught SyntaxError: Unexpected token += 。

Uncaught SyntaxError: Unexpected token +=

// ======================== // Auto.js 循环任务自动化脚本 (智能界面判断版) // 优化要点: 智能界面识别/自适应流程/错误恢复 // ======================== auto.waitFor(); console.show(); // 1. 通用函数:点击包含特定文本的控件 function clickText(text, timeout) { timeout = timeout || 5000; let target = text(text).findOne(timeout); if (target && target.clickable()) { target.click(); console.log("已点击: " + text); return true; } else { console.log("未找到或不可点击: " + text); return false; } } // 2. 通用函数:查找并点击目标文本旁的特定按钮 function clickSiblingButton(targetText, buttonText, timeout) { console.log(`开始任务: 查找'${targetText}'旁的'${buttonText}'`); timeout = timeout || 5000; let targetButton = textContains(targetText).findOne(timeout); if (!targetButton) { console.log("未找到目标文本: " + targetText); return false; } let parentLayout = targetButton.parent(); if (!parentLayout) { console.log("目标控件没有父控件,无法查找同级"); return false; } let found = false; parentLayout.children().forEach(sibling => { if (sibling.text() === buttonText && sibling.clickable()) { sibling.click(); console.log("已点击: " + buttonText); found = true; } }); return found; } // 定义一个函数来执行点击操作 function clickOnTarget(textToFind) { let target = text(textToFind).findOne(); if (target) { let bounds = target.bounds(); let centerX = bounds.centerX(); let centerY = bounds.centerY(); click(centerX, centerY); sleep(1000); // 等待1秒以确保页面加载完成 return true; } else { console.log("未找到文本为: " + textToFind + " 的元素"); return false; } } // 生成指定范围内的随机整数 function randomInRange(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } // 从文本中提取数字的函数(原代码中缺失此函数) function extractNumbers(text) { if (!text) return null; // 提取数字,支持时间格式如"05:30"或纯数字 let numbers = text.match(/\d+/g); if (numbers && numbers.length > 0) { // 如果是时间格式,转换为总秒数 if (text.match(/^\d{1,2}:\d{2}$/)) { let parts = text.split(':'); return parseInt(parts[0]) * 60 + parseInt(parts[1]); } return parseInt(numbers.join('')); } return null; } // 2. 屏幕坐标计算(固定点+随机偏移) // 获取屏幕的宽度和高度 let screenWidth = device.width; let screenHeight = device.height; var success1 = executeSingleTask( "去淘金币", "浏览15秒得", "去完成" ); if (success1) { sleep(8000); back(); console.log("单任务执行成功!"); } else { console.log("单任务执行失败或未完成"); } var success2 = executeSingleTask( "去微博看看热搜", "去微博看看热搜", "去完成" ); if (success2) { sleep(8000); launchApp("淘宝"); // 字符串形式 console.log("去微博任务完成,已返回淘宝"); } else { console.log("去微博任务执行失败"); } var success3 = executeSingleTask( "领百亿红包", "浏览5秒得", "去完成" ); if (success3) { sleep(8000); back(); console.log("领百亿红包任务完成"); } else { console.log("领百亿红包任务失败"); } // 专用函数:通过索引定位查找倒计时文本 function findCountdownTextByIndex() { let anchorWidget = textContains("滑动浏览").findOne(5000); if (!anchorWidget) { console.log("未找到锚点控件'滑动浏览'"); return null; } let parentLayout = anchorWidget.parent(); let siblingWidgets = parentLayout.children(); let anchorIndex = siblingWidgets.indexOf(anchorWidget); // 方法A:通过相对索引定位(锚点上方相邻控件) if (anchorIndex > 0) { let targetIndex = anchorIndex - 1; let countdownWidget = siblingWidgets[targetIndex]; let widgetText = countdownWidget.text(); console.log("通过索引定位找到倒计时控件:", widgetText); return widgetText; } console.log("锚点位于第一个位置,上方无相邻控件"); return null; } // 专用函数:提取第一个数字 function extractFirstNumber(text) { if (!text) { console.log("提取数字: 输入文本为空"); return 0; } console.log("提取数字: 原始文本 =", text); // 只提取第一个连续数字序列 let numbers = text.match(/\d+/); if (numbers && numbers.length > 0) { let result = parseInt(numbers[0]); console.log("提取数字: 找到第一个数字 =", result); return result; } console.log("提取数字: 未找到数字, 返回默认值0"); return 0; } // 专用函数:执行双向滑动 function performBidirectionalSwipes(times, startX, startY, endX, endY) { for (let i = 0; i < times; i++) { swipe(startX, startY, endX, endY, 1010); sleep(2000); swipe(endX, endY, startX, startY, 1010); sleep(2000); } } // 专用函数:执行单向滑动 function performUnidirectionalSwipes(times, startX, startY, endX, endY) { for (let i = 0; i < times; i++) { swipe(startX, startY, endX, endY, 1010); sleep(3000); } } // 最后,调用这个主函数来执行任务 //mainSlideTask(); // 修改后的 handleLoopTask 函数 function handleLoopTask(taskConfig) { console.log("开始处理循环任务: " + taskConfig.name); let maxAttempts = taskConfig.maxAttempts || 8; let attempts = 0; while (attempts < maxAttempts) { attempts++; console.log("尝试第 " + attempts + " 次"); if (text("当前页下单").exists()) { sleep(1000); console.log("未返回主任务页面,再次返回"); back(); } // 首先检查任务项是否还存在 let targetButton = textContains(taskConfig.targetText).findOne(5000); if (!targetButton) { console.log("未找到任务项: " + taskConfig.targetText + ",任务可能已完成"); break; // 任务项不存在,退出循环[6,7](@ref) } let parentLayout = targetButton.parent().parent().parent(); if (!parentLayout) { console.log("任务项无父控件"); break; } // 尝试点击"去完成" let completeClicked = false; parentLayout.children().forEach(sibling => { if (sibling.text() === taskConfig.completeText && sibling.clickable()) { console.log("点击'" + taskConfig.completeText + "'"); sibling.click(); completeClicked = true; sleep(2500); } }); if (!completeClicked) { console.log("未能点击'" + taskConfig.completeText + "'"); // 不立即break,可能重试[6](@ref) sleep(2000); continue; // 跳过本次循环的剩余部分,直接下一次尝试 } // 执行滑动任务 if (text("搜索后浏览立得奖励").exists()) { //sleep(2000); //click(619,376); var inputField = className("android.widget.EditText").findOne();// 获取当前获得焦点控件focusedWidget(); if (inputField) { // 直接设置文本,这是最可靠的方式 inputField.setText("抽纸"); // 将需要粘贴的文本"抽纸"设置到系统剪贴板 //setClip("抽纸"); sleep(500); //paste(); sleep(500); text("搜索").findOne().click(); } sleep(3000); mainSlideTask() }else { if(textStartsWith("滑动浏览") || textContains("浏览得肥料").exists()){ mainSlideTask(); //clickOnTarget("抽纸"); } } // 等待页面稳定 //sleep(2000); // 关键修改:再次检查任务项是否还存在[2](@ref) let taskItemStillExists = textContains(taskConfig.targetText).findOne(1000); if (!taskItemStillExists) { console.log("任务项已消失,任务可能已完成,继续下一个任务"); break; // 退出循环,移动到下一个任务 } else { console.log("任务项仍存在,任务可能未完成,继续尝试"); } // 如果任务项还存在,但可能需要等待,可以添加延迟 sleep(1000); } console.log("退出任务: " + taskConfig.name + ",尝试次数: " + attempts); return attempts >= maxAttempts; // 返回是否达到最大尝试次数 } // ======================== // 新增函数:执行单次任务 (ES5 语法) // ======================== function executeSingleTask(taskName, targetText, completeButtonText) { // 参数校验 if (!taskName || !targetText || !completeButtonText) { console.log("executeSingleTask 错误: 缺少必要参数"); return false; } console.log("开始执行单任务: " + taskName); // 1. 查找包含目标文本的任务项 var targetWidget = textContains(targetText).findOne(5000); if (!targetWidget) { console.log("未找到任务关键词: " + targetText); return false; } // 2. 获取父布局以便查找同级控件(如“去完成”按钮) var parent = targetWidget.parent(); if (!parent) { console.log("目标控件无父布局,无法查找按钮"); return false; } // 3. 遍历同级控件查找可点击的“去完成”按钮 var clicked = false; parent.children().forEach(function(child) { if (child.text() === completeButtonText && child.clickable()) { console.log("点击按钮: " + completeButtonText); child.click(); clicked = true; sleep(2500); // 等待页面跳转 } }); if (!clicked) { console.log("未能点击: " + completeButtonText); return false; } // 4. 判断是否进入搜索浏览类任务(根据界面特征决定行为) if (text("搜索后浏览立得奖励").exists()) { console.log("检测到搜索浏览任务,执行搜索操作"); // 等待输入框出现并输入内容 var inputField = className("android.widget.EditText").findOne(3000); if (inputField) { inputField.setText("抽纸"); console.log("已输入搜索词: 抽纸"); sleep(800); // 点击搜索按钮 if (text("搜索").exists()) { text("搜索").findOne().click(); console.log("点击搜索按钮"); sleep(3000); } } else { console.log("未找到输入框,跳过搜索"); sleep(2000); } // 执行滑动任务 mainSlideTask(); } else if (textStartsWith("滑动浏览").exists() || textContains("浏览得肥料").exists()) { console.log("进入滑动浏览任务"); mainSlideTask(); } else { console.log("未知任务类型,等待3秒观察"); sleep(3000); } // 5. 完成后返回主任务页 console.log("任务完成,返回..."); back(); sleep(2000); // 检查任务是否完成(任务项消失) if (!textContains(targetText).exists()) { console.log("✅ 任务已完成: " + taskName); return true; } else { console.log("⚠️ 任务可能未完成: " + taskName); return false; } } var success1 = executeSingleTask( "去淘金币", "浏览15秒得", "去完成" ); if (success1) { sleep(8000); back(); console.log("单任务执行成功!"); } else { console.log("单任务执行失败或未完成"); } var success2 = executeSingleTask( "去微博看看热搜", "去微博看看热搜", "去完成" ); if (success2) { sleep(8000); launchApp("淘宝"); // 字符串形式 console.log("去微博任务完成,已返回淘宝"); } else { console.log("去微博任务执行失败"); } var success3 = executeSingleTask( "领百亿红包", "浏览5秒得", "去完成" ); if (success3) { sleep(8000); back(); console.log("领百亿红包任务完成"); } else { console.log("领百亿红包任务失败"); } // 任务配置 var loopTasks = [ { name: "浏览15秒得奖励", targetText: "浏览15秒", completeText: "去完成", maxAttempts: 10 }, { name: "浏览得奖励", targetText: "浏览得奖励", completeText: "去完成", maxAttempts: 10 } ]; // ======================== // 主程序 // ======================== console.log("脚本启动,开始执行任务..."); let maxMainLoops = 10; for (let mainLoopCount = 1; mainLoopCount <= maxMainLoops; mainLoopCount++) { console.log(`\n===== 主循环第 ${mainLoopCount} 次开始 =====`); // 执行循环任务 - 每个任务会内部循环直到完成 for (let task of loopTasks) { handleLoopTask(task); sleep(2000); } console.log(`===== 主循环第 ${mainLoopCount} 次完成 =====`); sleep(1000); } console.log("脚本执行完成"); toast("任务脚本执行完成"); 这是我当前的脚本,配置任务能运行,单任务直接显示未找到就直接跳过了
11-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值