在解锁设备输入密码界面调用OCR服务时会弹出系统弹窗,怎么通过脚本捕获弹窗并自己点击确定或允许等按钮授予权限。

已存档
JuN7 · 1 个月前

回答

Hamibot AI
1
· 1 个月前

在Hamibot脚本中处理系统权限弹窗(如屏幕截图权限请求)时,你可以通过UI自动化来捕获弹窗并点击允许按钮。但需要注意,在设备解锁界面(如输入密码屏幕)运行脚本可能存在限制,因为Android系统通常会在锁屏状态限制第三方应用的交互。确保Hamibot的无障碍服务已启用并在后台运行,否则脚本可能无法正常工作。

以下是一个示例脚本,用于在请求屏幕截图权限时自动检测并点击系统弹窗中的“允许”或“确定”按钮。这个脚本基于Hamibot的API和UI选择器功能,兼容Rhino 1.7.15引擎。

// 文档地址 https://docs.hamibot.com/
// 请求屏幕截图权限
if (!requestScreenCapture()) {
    toastLog('正在请求屏幕截图权限,等待弹窗出现...');
    auto.waitFor(); // 等待界面稳定
    // 尝试查找常见的权限弹窗按钮,如"允许"、"确定"或"同意"
    var allowButton = textMatches(/允许|确定|同意|允许 Hamibot|始终允许/).findOne(5000); // 等待5秒查找匹配文本的按钮
    if (allowButton) {
        allowButton.click(); // 点击允许按钮
        toastLog('已自动点击允许按钮');
        sleep(1000); // 等待权限处理
    } else {
        toastLog('未找到权限弹窗按钮,请手动授予权限或检查设置');
        hamibot.exit(); // 退出脚本
    }
    // 再次检查权限是否授予
    if (!requestScreenCapture()) {
        toastLog('屏幕截图权限仍未授予,脚本退出');
        hamibot.exit();
    }
}

// 权限授予后,继续OCR操作
toastLog('屏幕截图权限已获得,开始OCR...');
const img = captureScreen();
// 这里添加你的OCR识别代码,例如:
// const res = ocr.recognizeText(img);
// toastLog(res);

注意事项:

  • 锁屏界面限制:在设备解锁输入密码界面,系统可能阻止第三方应用(如Hamibot)模拟点击或拦截弹窗。如果脚本无法正常工作,建议先解锁设备再运行脚本,或确保Hamibot的无障碍服务在锁屏状态下保持活跃(需在手机设置中配置)。
  • 弹窗文本匹配:不同设备和系统版本可能使用不同的弹窗文本(如“允许”、“确定”、“同意”等)。使用textMatches() with regex 来覆盖常见变体。如果弹窗有特定ID或类名,可以使用id()className()选择器提高准确性。
  • 重试机制:如果弹窗未立即出现,可以添加循环等待和重试逻辑,但避免无限循环以免卡死。
  • 权限预授予:为避免每次运行脚本都处理弹窗,建议在手机设置中预先授予Hamibot相关权限(如屏幕截图、无障碍服务)。

如果问题持续,检查Hamibot的无障碍服务是否被系统结束,并尝试重启设备。对于更复杂的场景,如特定设备兼容性问题,可能需要查阅设备制造商文档。

ℹ️ 本回答由 AI 生成,内容仅供参考