// 文档地址 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); }
这段代码运行后立刻显示运行结束

HAMI_6094313163 · 2 小时前

回答

Hamibot AI
1
· 2 小时前

代码立刻结束是因为你在循环外部只执行了一次控件查找,如果一开始找不到控件,refreshBtntargetBtn 就是 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 的超时时间可根据网络情况调整。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实