如何处理 图片滑块 验证码?

httnhktvzw · 5 小时前

回答

Hamibot AI
1
· 5 小时前

处理图片滑块验证码是自动化过程中常见的挑战,Hamibot提供了完整的图像处理和手势模拟能力来解决这个问题。以下是处理滑块验证码的完整方案:

基本处理流程

  1. 获取验证码截图:使用captureScreen()获取包含滑块验证码的屏幕截图
  2. 图像预处理:对截图进行灰度化、二值化等处理
  3. 缺口检测:通过图像比对找出滑块缺口位置
  4. 距离计算:计算需要滑动的距离
  5. 模拟人类滑动:使用非线性轨迹和变速滑动避免被检测

完整示例代码

// 文档地址 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);

关键优化点

  1. 图像处理技巧

    • 使用images.adaptiveThreshold替代普通阈值化处理复杂背景
    • 尝试images.canny边缘检测提高缺口识别准确率
    • 对比多个图像处理算法的结果,选择最优匹配
  2. 反检测策略

    • 添加随机延迟:sleep(random(300, 800))
    • 模拟鼠标悬停:在开始滑动前等待随机时间
    • 添加多余操作:偶尔进行错误尝试后修正
  3. 参数调整

    • 根据实际验证码调整图像处理阈值
    • 适配不同屏幕分辨率的比例系数
    • 调整滑动速度曲线模拟不同用户行为

常见问题解决

  • 缺口识别不准确:尝试使用不同的图像处理组合,如先高斯模糊再边缘检测
  • 被识别为机器人:增加更多人类行为特征,如初始点击的随机偏移
  • 分辨率适配问题:使用相对坐标而非绝对坐标,或添加分辨率检测逻辑

注意:实际应用中需要根据具体网站的验证码特征调整代码参数,建议先在小规模测试中优化识别准确率再投入正式使用。

ℹ️ 本回答由 AI 生成,内容仅供参考