为啥小程序一直显示启动中

HAMI_3826834289 · 2 小时前

回答

Hamibot AI
1
· 2 小时前

小程序一直显示“启动中”通常是因为脚本在等待页面渲染、网络响应或 UI 元素匹配,导致执行流程被阻塞。以下是具体原因及排查解决方法:

可能原因

  1. 初始化与冷启动耗时:小程序首次打开或网络环境一般时,微信需要加载资源、校验权限、渲染首屏。Hamibot 脚本在此期间会处于运行状态,控制台会显示“启动中”。
  2. UI 选择器未匹配导致阻塞:脚本中使用了 waitFor()findOne() 或坐标点击,但目标元素尚未出现、文本/ID 已变更,或页面层级发生变化,脚本会一直等待直到超时。
  3. 无障碍服务状态不稳定:无障碍服务被系统后台限制、电池优化关闭或权限回收,导致 Hamibot 无法获取当前页面节点,状态卡住。
  4. 脚本逻辑存在死循环或同步阻塞:例如在主线程执行耗时网络请求、未设置超时的等待逻辑,或条件判断永远不成立。

解决步骤

  1. 预留加载时间并观察日志
    运行后至少等待 30 秒。在脚本关键位置添加 log() 输出,打开 Hamibot 控制台查看执行到哪一步卡住。

    // 文档地址 https://docs.hamibot.com/
    log("开始启动小程序");
    launchApp("微信");
    sleep(3000);
    log("微信已打开,准备进入小程序");
    
  2. 改用带超时的动态等待
    避免使用无超时的 waitFor() 或过长的 sleep()。使用 findOne(timeout) 并增加容错处理:

    // 文档地址 https://docs.hamibot.com/
    var enterBtn = text("进入小程序").findOne(10000);
    if (enterBtn) {
        enterBtn.click();
        log("已点击入口");
    } else {
        toast("未找到入口元素,脚本终止");
        exit();
    }
    
  3. 检查无障碍服务与后台限制

    • 进入手机设置 > 无障碍 > 已下载的服务,确认 Hamibot 无障碍服务处于开启状态。
    • 将 Hamibot 和微信加入电池白名单,关闭后台休眠限制,锁定最近任务。
  4. 手动走查流程并校准选择器
    手动完整操作一次小程序启动流程,使用 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 生成,可能不准确,请注意核实