有图案有背景缺口的图片,如何通过代码实现人工滑动验证码,提高通过率

已存档
httnhktvzw · 1 个月前

回答

Hamibot AI
1
· 1 个月前

实现滑动验证码的自动化解决方案

要实现有图案有背景缺口的滑动验证码自动化,关键在于准确识别缺口位置并模拟人类滑动行为。以下是完整的解决方案:

步骤解析

  1. 获取屏幕截图权限并截屏
  2. 识别缺口位置
  3. 计算滑动距离
  4. 模拟人类滑动行为提高通过率

代码实现

// 文档地址 https://docs.hamibot.com/

// 请求屏幕截图权限
if (!requestScreenCapture()) {
    toastLog('没有授予 Hamibot 屏幕截图权限');
    hamibot.exit();
}
sleep(1000);

// 截取屏幕
var img = captureScreen();

// 识别缺口位置(需要根据实际验证码调整颜色参数)
// 假设缺口主色为#E4E4E4,周围有特定颜色点阵
var gapPosition = images.findMultiColors(
    img,
    '#E4E4E4',
    [
        [5, 5, '#E4E4E4'],
        [10, 10, '#E4E4E4'],
        [15, 15, '#E4E4E4']
    ],
    {
        region: [0, 0, device.width, device.height],
        threshold: 4
    }
);

// 识别滑块位置(需要根据实际情况调整)
var sliderPosition = images.findMultiColors(
    img,
    '#5C9DFF',
    [
        [5, 5, '#FFFFFF'],
        [10, 10, '#FFFFFF']
    ],
    {
        region: [0, 0, device.width, device.height],
        threshold: 4
    }
);

if (gapPosition && sliderPosition) {
    // 计算需要滑动的距离(注意:实际距离可能需要调整系数)
    var swipeDistance = gapPosition.x - sliderPosition.x - 10;
    
    // 模拟人类行为提高通过率
    // 1. 添加随机前置延迟
    sleep(800 + Math.random() * 700);
    
    // 2. 模拟不规则滑动轨迹(先快后慢)
    var totalDuration = 1200 + Math.random() * 300;
    
    // 3. 添加轨迹偏移模拟手指抖动
    var offsetX = (Math.random() - 0.5) * 5;
    var offsetY = (Math.random() - 0.5) * 3;
    
    // 4. 分段滑动模拟人类速度变化
    var startX = sliderPosition.x + offsetX;
    var startY = sliderPosition.y + offsetY + 20;
    var endX = sliderPosition.x + swipeDistance + offsetX;
    var endY = startY;
    
    // 模拟加速度变化(先加速后减速)
    var controlX = startX + swipeDistance * 0.7;
    var controlY = startY - 30;
    
    // 使用贝塞尔曲线模拟自然滑动轨迹
    gestures(
        [500, [startX, startY]],
        [totalDuration, [controlX, controlY], [endX, endY]]
    );
    
    toastLog('滑动成功! 距离: ' + swipeDistance + 'px, 耗时: ' + totalDuration + 'ms');
} else {
    toastLog('未识别到缺口或滑块位置,请检查验证码特征');
    if (!gapPosition) toastLog('缺口未找到');
    if (!sliderPosition) toastLog('滑块未找到');
}

hamibot.exit();

提高通过率的关键技巧

  1. 精准识别缺口

    • 使用多点找色代替单点找色,提高识别准确率
    • 调整threshold参数(默认4)适应不同背景
    • 限定搜索区域region减少误判
  2. 模拟人类行为

    • 添加随机前置延迟(800-1500ms)
    • 使用贝塞尔曲线gestures代替直线滑动
    • 模拟滑动过程中的速度变化(先快后慢)
    • 添加轻微的轨迹偏移(模拟手指不稳定性)
  3. 参数调整建议

    • 对于不同网站的验证码,需要调整颜色值和偏移量
    • 测试不同threshold值(2-6之间)找到最佳识别率
    • 根据实际滑动距离调整totalDuration(距离越长,时间应越长)
  4. 高级技巧

    • 多次尝试机制:如果第一次失败,稍等后重新尝试
    • 动态调整滑动距离:根据识别置信度微调最终位置
    • 添加随机点击验证元素,模拟人类操作流程

注意:实际使用时需要根据目标网站的具体验证码特征调整颜色值、偏移量和阈值参数。建议先手动截图分析验证码的视觉特征,再确定合适的识别参数。

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