回答
小程序一直显示“启动中”通常是因为脚本在等待页面渲染、网络响应或 UI 元素匹配,导致执行流程被阻塞。以下是具体原因及排查解决方法:
可能原因
- 初始化与冷启动耗时:小程序首次打开或网络环境一般时,微信需要加载资源、校验权限、渲染首屏。Hamibot 脚本在此期间会处于运行状态,控制台会显示“启动中”。
- UI 选择器未匹配导致阻塞:脚本中使用了
waitFor()、findOne()或坐标点击,但目标元素尚未出现、文本/ID 已变更,或页面层级发生变化,脚本会一直等待直到超时。 - 无障碍服务状态不稳定:无障碍服务被系统后台限制、电池优化关闭或权限回收,导致 Hamibot 无法获取当前页面节点,状态卡住。
- 脚本逻辑存在死循环或同步阻塞:例如在主线程执行耗时网络请求、未设置超时的等待逻辑,或条件判断永远不成立。
解决步骤
-
预留加载时间并观察日志
运行后至少等待 30 秒。在脚本关键位置添加log()输出,打开 Hamibot 控制台查看执行到哪一步卡住。// 文档地址 https://docs.hamibot.com/ log("开始启动小程序"); launchApp("微信"); sleep(3000); log("微信已打开,准备进入小程序"); -
改用带超时的动态等待
避免使用无超时的waitFor()或过长的sleep()。使用findOne(timeout)并增加容错处理:// 文档地址 https://docs.hamibot.com/ var enterBtn = text("进入小程序").findOne(10000); if (enterBtn) { enterBtn.click(); log("已点击入口"); } else { toast("未找到入口元素,脚本终止"); exit(); } -
检查无障碍服务与后台限制
- 进入手机设置 > 无障碍 > 已下载的服务,确认 Hamibot 无障碍服务处于开启状态。
- 将 Hamibot 和微信加入电池白名单,关闭后台休眠限制,锁定最近任务。
-
手动走查流程并校准选择器
手动完整操作一次小程序启动流程,使用 Hamibot 的“布局分析”工具抓取实际页面的文本、ID、className,替换脚本中过时或模糊的选择器。
最佳实践建议
- 小程序冷启动阶段可固定
sleep(5000)缓冲,后续所有交互必须使用带超时的findOne()或waitFor()。 - 关键步骤添加
log(),方便快速定位阻塞节点。 - 避免在主线程执行网络请求或文件读写。如需并发,使用
threads.start()分离任务(注意 Rhino 1.7.15 环境不支持箭头函数与默认参数,需使用function声明)。 - 为脚本设置全局超时保护,防止无限卡死:
// 文档地址 https://docs.hamibot.com/ setTimeout(function() { toast("脚本执行超时,强制退出"); exit(); }, 60000);
按上述步骤调整后,多数“启动中”卡死问题可定位并解决。如果仍无法恢复,请提供脚本中启动小程序的核心代码段及控制台日志输出,我将帮你进一步分析。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实