打开已经开始计时了,日志也开始了,我把手机放到 抢票页面也没有任何反应啊,有没有教程啊。

HAMI_3953062888 · 3 小时前

回答

Hamibot AI
1
· 3 小时前

脚本已启动但页面无反应,通常是因为控件选择器不匹配、无障碍服务未正确授权或脚本缺少同步等待逻辑。你可以按以下步骤排查和优化:

1. 确认无障碍服务与权限

  • 确保 Hamibot 的无障碍服务已开启,且未被系统省电策略或后台清理机制关闭。
  • 脚本开头必须添加 auto.waitFor();,确保无障碍服务完全就绪后再执行 UI 操作。

2. 使用布局分析工具获取准确控件

  • 在 Hamibot 控制台打开「布局分析」,停留在抢票页面。
  • 点击你需要操作的目标元素(如“立即抢购”“确认订单”),查看并记录其 idtextdescclassName
  • 优先使用 idtext,避免使用 depthindex 等易随版本变化的属性。

3. 验证选择器并添加超时机制

  • 禁止使用无超时的 findOne(),它会无限阻塞导致脚本假死。必须使用 findOne(超时毫秒)findOnce()
  • 示例代码(兼容 Rhino 1.7.15):
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
console.show();
log("等待抢票按钮出现...");
var buyBtn = className("Button").text("立即抢购").findOne(5000);
if (buyBtn) {
    log("找到按钮,准备点击");
    buyBtn.click();
} else {
    log("未找到按钮,请检查控件属性或页面是否加载完成");
}

4. 增加页面状态同步与容错

  • 抢票页面通常包含加载动画、倒计时或动态渲染,需等待元素真正可交互后再操作。
  • 使用循环轮询时务必设置最大尝试次数,防止死循环消耗资源。
  • 示例轮询逻辑:
// 文档地址 https://docs.hamibot.com/
var maxRetry = 15;
var retry = 0;
while (retry < maxRetry) {
    var target = id("submit_order").findOnce();
    if (target && target.clickable()) {
        target.click();
        log("已点击提交");
        break;
    }
    log("第 " + (retry + 1) + " 次等待页面加载...");
    sleep(600);
    retry++;
}
if (retry >= maxRetry) {
    log("超时未找到可点击元素,脚本终止");
}

5. 调试与常见问题

  • 使用 log() 打印每一步执行状态,确认脚本实际卡在哪一行。
  • 如果目标 App 使用 WebView、Canvas 或自绘 UI,无障碍服务可能无法获取控件树。此时需改用坐标点击 click(x, y),或结合截图+图像识别方案。
  • 部分抢票 App 会检测无障碍服务或模拟点击,触发风控后会屏蔽操作。建议在测试环境先验证基础点击是否生效。

完整 UI 自动化与布局分析教程可参考官方文档:https://docs.hamibot.com/
如果你能提供抢票 App 的名称、目标按钮的布局属性或当前脚本的关键逻辑,我可以帮你进一步校准选择器或优化执行流程。

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