// 文档地址 https://docs.hamibot.com/ // 等待页面加载完成,并找到刷新按钮(假设id为某个值) var refreshBtn = id("refresh_id").findOne(2000); // 替换为实际的刷新控件id或文本 var targetBtn = text("领取奖励").findOne(2000); // 替换为实际要点击的控件文本 // 循环次数与间隔 var loopTimes = 100; // 总循环次数 var interval = 2000; // 每次操作间隔,单位毫秒 for (var i = 0; i < loopTimes; i++) { // 判断刷新按钮是否存在 if (refreshBtn.exists()) { refreshBtn.click(); toast("刷新页面"); sleep(1000); // 等待刷新完成 } // 判断目标控件是否存在 if (targetBtn.exists()) { targetBtn.click(); toast("点击目标控件"); } // 等待下一次操作 sleep(interval); }
这段代码运行后立刻显示运行结束
回答
代码立刻结束是因为你在循环外部只执行了一次控件查找,如果一开始找不到控件,refreshBtn 和 targetBtn 就是 null,后续循环中调用 null.exists() 会直接抛出异常,脚本立即终止。
修正思路:
- 每次循环内重新查找控件,避免使用循环前获取的旧对象。
- 使用
findOne()返回null时需判断,或使用find()后检查长度。 - 如果控件可能动态出现,建议用
while循环等待控件出现。
修正后的代码(兼容 Rhino 引擎,不使用箭头函数等新特性):
// 文档地址 https://docs.hamibot.com/
var loopTimes = 100;
var interval = 2000;
for (var i = 0; i < loopTimes; i++) {
// 每次循环重新查找刷新按钮
var refreshBtn = id("refresh_id").findOne(2000);
if (refreshBtn) {
refreshBtn.click();
toast("刷新页面");
sleep(1000);
}
// 每次循环重新查找目标按钮
var targetBtn = text("领取奖励").findOne(2000);
if (targetBtn) {
targetBtn.click();
toast("点击目标控件");
}
sleep(interval);
}
如果控件 id 不固定,可将 id("refresh_id") 替换为 text("刷新") 等实际文本,findOne 的超时时间可根据网络情况调整。