回答
截图超时通常是由于截图权限未正确申请、权限申请后未等待足够时间,或设备性能不足导致的。以下是排查和解决该问题的具体方案:
1. 确保正确申请权限
在调用 captureScreen() 之前,必须先调用 requestScreenCapture()。该函数只需执行一次,无需每次截图都调用。如果未授权,脚本会抛出异常或无法获取图像。
// 文档地址 https://docs.hamibot.com/
if (!requestScreenCapture()) {
toastLog("没有授予 Hamibot 截图权限");
exit();
}
2. 增加必要的等待时间
requestScreenCapture() 执行成功后,系统需要一定时间初始化截图服务。如果立即调用 captureScreen(),虽然函数会阻塞等待,但在某些情况下可能导致超时或黑屏。建议在请求成功后增加短暂延迟。
// 文档地址 https://docs.hamibot.com/
if (!requestScreenCapture()) {
toastLog("请授予截图权限");
exit();
}
// 等待截图服务初始化,避免立即调用导致超时
sleep(500);
let img = captureScreen();
3. 处理连续截图的缓存机制
短时间内(约 16ms)连续调用 captureScreen() 可能返回同一张截图对象,这并非错误,但如果你期望获取最新画面,需确保两次调用之间有足够的时间间隔。
4. 检查运行环境
- 应用界面:建议在 Hamibot 软件界面内运行该函数,在其他应用界面运行时可能出现一闪而过的黑屏现象。
- 屏幕方向:如果不指定
landscape参数,截图方向由当前设备屏幕方向决定。务必注意执行requestScreenCapture()时的屏幕方向是否符合预期。 - 权限设置:如果第一次使用弹出权限请求,请选择“总是允许”。若已拒绝,需在手机系统设置中手动开启 Hamibot 的显示悬浮窗和截图权限。
5. 优化脚本逻辑
如果截图耗时过长影响任务效率,可以考虑以下优化:
- 仅在必要时截图,减少调用频率。
- 使用
images.findColor()等基于图片的操作时,确保图片加载完成后再进行匹配。 - 对于高负载设备,适当增加
sleep时间以稳定截图服务。
如果问题依旧存在,请检查设备是否开启了省电模式或后台限制,这些设置可能会干扰截图服务的正常运行。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实