回答
处理图片滑块验证码是自动化过程中常见的挑战,Hamibot提供了完整的图像处理和手势模拟能力来解决这个问题。以下是处理滑块验证码的完整方案:
基本处理流程
- 获取验证码截图:使用
captureScreen()获取包含滑块验证码的屏幕截图 - 图像预处理:对截图进行灰度化、二值化等处理
- 缺口检测:通过图像比对找出滑块缺口位置
- 距离计算:计算需要滑动的距离
- 模拟人类滑动:使用非线性轨迹和变速滑动避免被检测
完整示例代码
// 文档地址 https://docs.hamibot.com/
// 1. 获取屏幕截图
var screen = captureScreen();
// 2. 定位滑块和背景图区域(需要根据实际页面调整坐标)
// 假设滑块区域坐标为(300, 800, 600, 900),背景图区域为(300, 600, 900, 700)
var sliderImg = images.clip(screen, 300, 800, 300, 100);
var bgImg = images.clip(screen, 300, 600, 600, 100);
// 3. 图像预处理 - 转为灰度图
var sliderGray = images.grayscale(sliderImg);
var bgGray = images.grayscale(bgImg);
// 4. 二值化处理,增强对比度
var sliderBinary = images.threshold(sliderGray, 100, 255, "BINARY");
var bgBinary = images.threshold(bgGray, 100, 255, "BINARY");
// 5. 模板匹配查找缺口位置
var result = images.matchTemplate(bgBinary, sliderBinary);
var x = result.x;
// 6. 计算需要滑动的距离(需要根据实际页面比例调整)
var distance = x * 0.8; // 通常需要乘以一个比例系数
// 7. 模拟人类滑动(关键:模拟不规则速度)
function humanLikeSwipe(startX, startY, endX, endY) {
var steps = Math.floor(distance / 5) + 10; // 根据距离动态调整步数
var points = [];
// 生成模拟人类行为的不规则轨迹
var cx = (startX + endX) / 2;
var cy = startY - 50;
for (var i = 0; i <= steps; i++) {
var t = i / steps;
var x = Math.pow(1 - t, 2) * startX + 2 * t * (1 - t) * cx + Math.pow(t, 2) * endX;
var y = Math.pow(1 - t, 2) * startY + 2 * t * (1 - t) * cy + Math.pow(t, 2) * endY;
points.push([x, y]);
}
// 添加随机抖动
for (var i = 1; i < points.length - 1; i++) {
points[i][0] += random(-3, 3);
points[i][1] += random(-2, 2);
}
// 添加随机延迟点
var insertIndex = Math.floor(steps * 0.6);
points.splice(insertIndex, 0, [points[insertIndex][0], points[insertIndex][1]]);
// 执行手势
gesture(500, points);
}
// 8. 执行滑动(根据实际页面调整起始点坐标)
humanLikeSwipe(350, 850, 350 + distance, 850);
// 9. 等待验证结果
sleep(2000);
关键优化点
-
图像处理技巧:
- 使用
images.adaptiveThreshold替代普通阈值化处理复杂背景 - 尝试
images.canny边缘检测提高缺口识别准确率 - 对比多个图像处理算法的结果,选择最优匹配
- 使用
-
反检测策略:
- 添加随机延迟:
sleep(random(300, 800)) - 模拟鼠标悬停:在开始滑动前等待随机时间
- 添加多余操作:偶尔进行错误尝试后修正
- 添加随机延迟:
-
参数调整:
- 根据实际验证码调整图像处理阈值
- 适配不同屏幕分辨率的比例系数
- 调整滑动速度曲线模拟不同用户行为
常见问题解决
- 缺口识别不准确:尝试使用不同的图像处理组合,如先高斯模糊再边缘检测
- 被识别为机器人:增加更多人类行为特征,如初始点击的随机偏移
- 分辨率适配问题:使用相对坐标而非绝对坐标,或添加分辨率检测逻辑
注意:实际应用中需要根据具体网站的验证码特征调整代码参数,建议先在小规模测试中优化识别准确率再投入正式使用。
ℹ️ 本回答由 AI 生成,内容仅供参考