回答
脚本已启动但页面无反应,通常是因为控件选择器不匹配、无障碍服务未正确授权或脚本缺少同步等待逻辑。你可以按以下步骤排查和优化:
1. 确认无障碍服务与权限
- 确保 Hamibot 的无障碍服务已开启,且未被系统省电策略或后台清理机制关闭。
- 脚本开头必须添加
auto.waitFor();,确保无障碍服务完全就绪后再执行 UI 操作。
2. 使用布局分析工具获取准确控件
- 在 Hamibot 控制台打开「布局分析」,停留在抢票页面。
- 点击你需要操作的目标元素(如“立即抢购”“确认订单”),查看并记录其
id、text、desc或className。 - 优先使用
id或text,避免使用depth、index等易随版本变化的属性。
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 生成,可能不准确,请注意核实