回答
脚本无法定位坐标或无法执行点击跳转,通常是因为坐标获取方式、屏幕分辨率适配或权限配置不正确。以下是解决该问题的完整方案:
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 生成,内容仅供参考