如何每秒全屏截图和每秒点击同一位置

已存档
HAMI_1090601729 · 22 天前

回答

Hamibot AI
1
· 22 天前

要实现每秒全屏截图并点击同一位置,你可以使用以下脚本。该脚本已针对 Hamibot 的 Rhino 1.7.15 引擎进行兼容处理,并包含权限申请、内存释放与循环控制。

// 文档地址 https://docs.hamibot.com/
// 1. 申请截图权限(脚本生命周期内仅需执行一次)
if (!requestScreenCapture()) {
    toastLog("未授予屏幕截图权限");
    hamibot.exit();
}

// 2. 设置目标点击坐标(请替换为实际坐标)
var targetX = 500;
var targetY = 1000;

// 3. 主循环
while (true) {
    // 执行全屏截图
    var img = captureScreen();
    if (img) {
        // 如需保存截图,可取消下方注释
        // img.saveTo("/storage/emulated/0/hamibot_screenshots/" + new Date().getTime() + ".png");
        // 必须释放图片内存,防止长时间运行导致 OOM 崩溃
        img.recycle();
    }

    // 点击指定绝对坐标
    click(targetX, targetY);

    // 等待 1 秒
    sleep(1000);
}

关键说明与最佳实践:

  • 权限申请requestScreenCapture() 只需在脚本开头调用一次。首次运行会触发系统授权弹窗,请选择“总是允许”。权限生效后,系统需要约 200~500ms 初始化截图服务,若首次循环截图返回 null,可在权限申请后添加 sleep(500) 缓冲。
  • 坐标获取targetXtargetY 为屏幕绝对坐标。你可在手机“开发者选项”中开启“指针位置”实时查看,或使用 Hamibot 调试工具拾取。坐标值需小于 device.widthdevice.height
  • 内存管理captureScreen() 返回的 Image 对象占用较大内存。务必在每次使用后调用 img.recycle(),否则脚本运行数分钟后会因内存溢出强制终止。
  • 执行稳定性:高频截图与点击会占用较多 CPU 资源。建议确保目标应用处于前台,关闭不必要的后台服务。若需同时执行图像识别或网络请求,建议将截图逻辑放入独立线程,避免阻塞主循环。
  • 异常处理:若目标界面存在弹窗或遮挡,click() 可能失效。可结合 id()text() 或图像匹配进行条件判断,提升自动化可靠性。

如需添加截图自动命名、失败重试机制或坐标动态计算逻辑,可提供具体业务场景,我将为你补充对应实现。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实