脚本没办法定位手机屏幕坐标,也不会左右点击跳转

HAMI_1624923112 · 1 天前

回答

Hamibot AI
1
· 1 天前

脚本无法定位坐标或无法执行点击跳转,通常是因为坐标获取方式、屏幕分辨率适配或权限配置不正确。以下是解决该问题的完整方案:

1. 获取屏幕坐标

要获取准确的点击坐标,需要在手机的“开发者选项”中开启“指针位置”(Pointer Position)。

  • 开启后,屏幕顶部会显示当前触摸点的坐标 (x, y)。
  • 记录你需要点击或滑动位置的坐标值。

2. 解决分辨率适配问题

不同手机屏幕分辨率不同,硬编码坐标会导致在其他设备上点击位置偏差。使用 setScreenMetrics 函数可以让脚本自动适配屏幕。

  • 用法:在脚本开头设置脚本设计时的分辨率。
  • 效果:脚本运行时,如果屏幕宽度不一致,Hamibot 会自动放缩坐标。
// 文档地址 https://docs.hamibot.com/
// 设置脚本设计时的分辨率,例如 1080x1920
setScreenMetrics(1080, 1920);

3. 选择正确的点击与滑动函数

根据权限和 Android 版本,选择合适的函数:

  • 普通点击 (Android 7.0+)
    使用 click(x, y)。需要开启无障碍服务。

    click(800, 200); // 点击坐标 (800, 200)
    
  • 滑动操作 (左右跳转)
    如果需要左右滑动页面(如翻页),使用 swipe 函数。

    // 从右向左滑动,实现下一页跳转
    // 参数:起点 x, 起点 y, 终点 x, 终点 y, 持续时间 (毫秒)
    swipe(800, 1000, 200, 1000, 300);
    
  • Root 权限 (高性能/无延迟)
    如果设备已 Root,可以使用 RootAutomator 或大写开头的函数(如 Tap, Swipe)。这些函数执行是异步的,需要配合 sleep 使用。

    var ra = new RootAutomator();
    ra.tap(100, 100);
    // 脚本退出时释放资源
    events.on('exit', function() {
        ra.exit();
    });
    

4. 常见问题排查

  • 权限检查:确保 Hamibot 已开启“无障碍服务”权限。如果需要 Root 功能,确保已授权 Root 权限。
  • 异步执行:如果使用 Root 命令(如 Tap, Swipe),函数执行不阻塞脚本,必须在动作后添加 sleep,否则脚本可能结束过快导致动作未执行。
    Tap(100, 100);
    sleep(500); // 等待动作完成
    
  • 控件结合:如果某些位置无法通过坐标点击,可以尝试获取控件 bounds 后点击中心位置。
    var widget = id('xxx').findOne();
    click(widget.bounds().centerX(), widget.bounds().centerY());
    

5. 完整示例代码

以下是一个适配分辨率并进行点击和滑动的示例脚本(兼容 Rhino 引擎):

// 文档地址 https://docs.hamibot.com/
// 1. 设置分辨率适配 (假设脚本是在 1080x1920 屏幕上编写的)
setScreenMetrics(1080, 1920);

// 2. 点击特定坐标
// 确保无障碍服务已开启,Android 7.0+
var clickResult = click(540, 1000);
if (!clickResult) {
    toast("点击失败,请检查权限或坐标");
}

// 3. 实现左右滑动跳转
// 从屏幕右侧滑向左侧
swipe(800, 1000, 200, 1000, 300);
sleep(1000); // 滑动后等待页面加载

// 4. 如果需要 Root 权限的快速点击
// var ra = new RootAutomator();
// ra.tap(540, 1000);
// sleep(500);
// ra.exit();

按照以上步骤检查你的脚本配置、权限和代码逻辑,即可解决坐标定位和点击跳转问题。

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