回答
在Hamibot中识别图片并点击,主要使用图像识别(找图)功能。这里提供一个完整的示例脚本,它会在屏幕上查找指定的图片,如果找到则点击该位置。
首先,确保你已经将需要识别的图片(例如“微信图标.png”)保存到设备的 /sdcard/ 目录下。
以下是脚本代码:
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 请求屏幕截图权限
if (!requestScreenCapture()) {
toastLog('没有授予 Hamibot 屏幕截图权限');
hamibot.exit();
}
sleep(1000);
// 读取要查找的模板图片
var templateImg = images.read('/sdcard/微信图标.png');
if (templateImg == null) {
toastLog('读取模板图片失败,请检查路径');
hamibot.exit();
}
// 截取当前屏幕
var screenImg = captureScreen();
// 在屏幕中查找模板图片
var point = images.findImage(screenImg, templateImg, {
threshold: 0.8 // 相似度阈值,0~1,越高越严格
});
// 判断是否找到
if (point) {
toastLog('找到图片,位置为:' + point);
// 点击找到的位置
click(point.x, point.y);
} else {
toastLog('未找到图片');
}
// 释放图片资源
templateImg.recycle();
screenImg.recycle();
hamibot.exit();
关键点说明:
- 权限:脚本开头使用
auto.waitFor()和requestScreenCapture()来获取必要的无障碍服务和屏幕截图权限。 - 读取模板:
images.read()用于加载你要查找的图片(模板)。请确保文件路径正确。 - 截图:
captureScreen()获取当前屏幕的图片。 - 找图:
images.findImage()是核心函数,它在大图(屏幕截图)中搜索小图(模板)。- 你可以通过
threshold选项调整匹配的相似度(0.8是常用值)。 - 你还可以通过
region: [x, y, width, height]选项限制搜索区域,以提高查找速度和准确性。
- 你可以通过
- 点击:如果找到,函数会返回一个
Point对象(包含x和y属性),使用click(point.x, point.y)即可点击该坐标。 - 资源释放:使用
recycle()方法释放图片对象是一个好习惯,可以避免内存占用过多。
优化建议(最佳实践):
- 限制找图区域:如果你知道目标图片大致出现在屏幕的哪个区域(例如上半部分),使用
region参数可以显著提升找图速度。var point = images.findImage(screenImg, templateImg, { threshold: 0.8, region: [0, 0, device.width, device.height / 2] // 仅在屏幕上半部分查找 }); - 处理动态内容:如果屏幕内容会变化(如加载动画),在找图前可以添加
sleep()等待页面稳定。 - 多次尝试:对于不稳定的查找,可以将其放入循环中,尝试多次直到找到或超时。
如果你需要识别图片中的文字并点击,则需要使用OCR功能,这是另一个不同的模块。请告诉我你的具体需求,我可以提供相应的示例。
ℹ️ 本回答由 AI 生成,内容仅供参考