如何唤醒手机屏幕上滑动解锁打开微信
第 1 条补充
· 1 个月前
如何根据层级来找到想要点击的图片
第 2 条补充
· 1 个月前
如何快速点击文本为1的同层级右边的可点击按钮
回答
要实现屏幕唤醒并滑动解锁打开微信,需分两步处理:
-
屏幕唤醒部分
Hamibot目前没有原生API直接唤醒屏幕。可以尝试以下替代方案:- 使用其他应用或系统设置实现唤醒(如定时任务、物理按键触发)
- 保持屏幕常亮:在脚本开头添加
device.keepOn()
(需开启无障碍服务)
-
滑动解锁操作(需root权限)
以下是完整的示例代码:
// 文档地址 https://docs.hamibot.com/
// 假设从底部上滑解锁(需根据实际屏幕坐标调整)
Swipe(540, 1800, 540, 300); // 从(540,1800)滑动到(540,300)
sleep(1000); // 等待解锁完成
// 打开微信(假设桌面存在微信图标)
click("微信"); // 或使用坐标点击:Tap(x, y)
注意事项:
Swipe()
需要 root 权限且坐标需根据设备实际分辨率调整- 可通过「开发者选项」->「指针位置」获取准确坐标
- 解锁后若需要继续操作微信,建议结合
click("微信")
或坐标点击 - 部分设备需在设置中允许Hamibot的悬浮窗权限
如果需要更精确的交互(如绘制解锁图案),应使用多点触摸API:
var ra = new RootAutomator();
ra.swipe(100, 100, 300, 300, 300); // 从(100,100)滑动到(300,300)
ra.exit();
补充回答 1
在Hamibot中,可通过结合图像识别与UI层级定位来精准点击目标图片。以下是具体方法:
- 图像查找定位
使用images.findImage
或images.matchTemplate
函数时,通过region
参数限定搜索区域:
// 示例:在屏幕右侧区域查找图片
var result = images.findImage(img, template, {
region: [screenWidth*0.6, 0, screenWidth*0.4, screenHeight]
});
- UI层级筛选
通过UiSelector
的drawingOrder
方法指定绘制顺序(适用于Android 7.0+):
// 示例:点击第2个绘制的可点击控件
var w = className("Button").drawingOrder(1).findOne();
w.click();
- 坐标范围验证
使用boundsContains
确保点击位置在指定控件区域内:
// 示例:验证坐标是否在指定控件范围内
var bounds = [100, 200, 300, 400];
clickable().boundsContains(...bounds).findOne().click();
- 多结果排序处理
当存在多个匹配项时,可通过max
参数控制结果数量,并按位置优先级筛选:
// 示例:获取最多3个匹配结果并选择最上方的
var results = images.matchTemplate(img, template, { max: 3 });
results.sort((a, b) => a.y - b.y).shift().click();
注意:层级定位需结合具体应用场景,建议先用布局分析工具获取控件bounds属性,再通过region
参数或boundsContains
进行精确匹配。对于复杂层级结构,可分步骤先定位父级控件,再在子区域进行图像查找。
补充回答 2
在Hamibot中,可通过以下步骤快速点击文本为"1"的同层级右侧可点击按钮:
// 获取文本为"1"的控件边界
var textBounds = text("1").bounds();
if (textBounds.notNull()) {
// 计算右侧区域(向右扩展50像素)
var rightRegion = [textBounds.right + 10, textBounds.top,
textBounds.right + 100, textBounds.bottom];
// 在右侧区域查找可点击控件
var rightButton = className("Button").boundsContains(...rightRegion).findOne();
if (rightButton) {
rightButton.click();
} else {
// 尝试使用坐标点击(需确保坐标有效)
click(rightRegion[0], rightRegion[1], rightRegion[2], rightRegion[3]);
}
}
关键点说明:
text("1").bounds()
会获取第一个匹配文本"1"的控件边界- 通过
boundsContains
将搜索范围限定在文本右侧区域 - 使用
className("Button")
过滤按钮控件,避免误点其他元素 - 若无法直接定位控件,可使用
click(left, top, right, bottom)
直接点击计算的坐标区域
注意事项:
- 需确保右侧区域存在可点击控件,否则会返回false
- 对于复杂布局,建议先用布局分析工具获取准确bounds值
- Android 7.0+ 可使用
drawingOrder
辅助定位同层级控件
ℹ️ 本回答由 AI 生成,内容仅供参考