验证码处理经验
快速识别流程
页面出现验证码?
├── 有滑动条 + 背景图 + 滑块图 → 滑块验证码
├── 有图片 + 输入框 → 图片验证码(OCR)
├── 有背景图 + 文字/图标提示 → 点选验证码
├── 有旋转图片 → 旋转验证码
├── 有拼图 → 拼图验证码(类似滑块)
└── 弹出第三方页面(极验/网易/腾讯)→ 第三方验证码服务
滑块验证码
缺口检测方法
| 方法 | 适用场景 | 精度 | |------|----------|------| | Canny 边缘检测 | 缺口边缘清晰 | 高 | | 模板匹配 | 有独立滑块图片 | 高 | | 像素差异对比 | 有完整背景图和缺口背景图 | 最高 | | 灰度梯度 | 缺口区域与背景对比度大 | 中 |
轨迹生成参数
总时长: 300-800ms(过快被检测,过慢不自然)
阶段分配:
- 起步 (0-15%): 加速,速度从 0 到峰值
- 中段 (15-75%): 匀速或微加速
- 减速 (75-90%): 明显减速
- 微调 (90-100%): 缓慢靠近 + 轻微回弹 (1-3px)
Y 轴抖动: ±1-2px 随机偏移(纯水平移动会被检测)
采样间隔: 10-30ms(模拟 requestAnimationFrame)
常见失败原因
- 缺口偏移量不准 → 加 ±2px 随机偏移重试
- 轨迹太规则 → 增加 Y 轴抖动和速度波动
- 滑动太快 → 总时长调到 500ms+
- 验证接口校验 → 检查是否需要额外参数(如 trace 数据、加密 token)
图片验证码
OCR 方案选择
| 方案 | 识别率 | 成本 | 适用场景 | |------|--------|------|----------| | ddddocr | 60-80% | 免费 | 简单数字/字母验证码 | | Tesseract + 预处理 | 50-70% | 免费 | 清晰文字 | | 打码平台 (超级鹰等) | 90%+ | 付费 | 复杂验证码、量大 | | 自训练模型 | 95%+ | 开发成本高 | 固定样式、长期使用 |
图片预处理流程
- 灰度化 → 去除颜色干扰
- 二值化 → 分离文字和背景(阈值需调试)
- 去噪点 → 中值滤波或形态学操作
- 字符分割 → 连通域分析(粘连字符需特殊处理)
常见失败原因
- 背景干扰线 → 加强二值化阈值或用形态学开运算
- 字符粘连 → 投影分割或滴水算法
- 字体扭曲 → ddddocr 通常比 Tesseract 更好
- 识别错误 → 刷新验证码重试(最多 3 次)
点选验证码
处理流程
- 获取提示信息("请依次点击:X、Y、Z")
- 目标检测:定位背景图中每个候选目标的坐标
- 匹配:将提示与候选目标对应
- 按顺序点击坐标
难点与应对
- 文字点选:OCR 识别背景图中的文字位置
- 图标点选:图像分类匹配提示图标
- 语义点选("点击最大的"):需要目标检测 + 属性比较
- 3D/旋转文字:打码平台更可靠
第三方验证码服务
| 服务商 | 常见类型 | 特征 |
|--------|----------|------|
| 极验 (GeeTest) | 滑块、点选、九宫格 | gt + challenge 参数 |
| 网易易盾 | 滑块、拼图、点选 | NECaptcha 对象 |
| 腾讯防水墙 | 滑块 | TencentCaptcha 对象 |
| 阿里云 | 滑块、智能验证 | ALIYUN 前缀 |
| hCaptcha | 图像分类 | h-captcha class |
| reCAPTCHA | 图像分类、评分 | g-recaptcha class |
通用应对策略
- 优先尝试绕过:部分验证码有 API 直接获取 token 的方式
- 浏览器方案:用 Patchright 模拟真实操作
- 打码平台:极验/hCaptcha 等有专门的打码服务
- 降低触发频率:通过反检测手段减少验证码出现
验证失败通用处理
- 第 1 次失败 → 刷新验证码,调整参数重试
- 第 2 次失败 → 换方案(如 OCR → 打码平台)
- 第 3 次失败 → 返回告知主 agent,建议人工介入或换策略
Scan to join WeChat group