回答
通过小图片找缺口位置的方法
要通过小图片找到缺口位置(如滑块验证码中的缺口),你可以使用Hamibot的模板匹配功能。这是实现该功能的完整方案:
使用images.matchTemplate方法
// 文档地址 https://docs.hamibot.com/
// 截取当前屏幕
var screen = captureScreen();
// 读取缺口模板图片(提前保存好的缺口小图)
var template = images.read('/sdcard/缺口.png');
// 设置找图选项
var options = {
threshold: 0.8, // 相似度阈值,0~1之间,值越低容错率越高
region: [0, 300, device.width, 600], // 可选:指定搜索区域[起始x, 起始y, 宽度, 高度]
max: 1 // 只需要找到一个缺口位置
};
// 在屏幕截图中查找缺口
var result = images.matchTemplate(screen, template, options);
if (result && result.matches.length > 0) {
// 找到缺口,获取匹配位置
var match = result.matches[0];
var x = match.point.x;
var y = match.point.y;
toastLog('找到缺口位置: (' + x + ', ' + y + ')');
// 这里可以添加滑动操作
// 例如:从滑块位置滑动到缺口位置
// swipe(滑块x, 滑块y, x, y, 300);
} else {
toastLog('未找到缺口');
}
关键参数说明
-
threshold: 图片相似度阈值(0~1),验证码场景建议0.7-0.9之间
- 值太低可能导致误匹配
- 值太高可能找不到缺口(验证码通常有干扰)
-
region: 限定搜索区域,可提高匹配速度和准确性
- 例如:
[0, 300, device.width, 600]表示只在屏幕下半部分搜索
- 例如:
-
max: 返回结果数量,找缺口通常设为1即可
实用技巧
-
模板图片准备:
- 从验证码截图中精确裁剪出缺口部分
- 保存为PNG格式(保留透明度)
- 建议尺寸为缺口实际大小的1:1
-
提高准确率的方法:
- 调整threshold值,从0.9开始逐步降低测试
- 限定region范围到验证码可能出现的区域
- 可以尝试对截图和模板进行预处理(如灰度化)
-
处理多缺口情况:
// 如果需要处理多个可能的缺口位置 if (result && result.matches.length > 0) { // 按相似度排序取最匹配的一个 result.matches.sort(function(a, b) { return b.similarity - a.similarity; }); var bestMatch = result.matches[0]; // 使用bestMatch }
注意:实际应用中可能需要根据具体验证码的特点调整参数,建议先在Hamibot的"截图找色"工具中测试合适的参数值。
ℹ️ 本回答由 AI 生成,内容仅供参考