OCR 识别图形验证码
从基础预处理到 PaddleOCR/Selenium 4 自动化全流程(2024 版)
1. 验证码技术概述
随着网络安全意识的提升,各类网站的反爬虫体系迭代越来越快,验证码(CAPTCHA) 作为人机鉴别的第一道防线,技术形态早已跳出纯字符组合的范畴:
- 初代基础款:纯数字/字母、大小写混排,无明显干扰
- 轻量增强款:加入倾斜、旋转、干扰点线、随机背景
- 中文本地化款:使用常用汉字或生僻字,甚至加入成语、语义干扰
- 行为复杂款:如 12306 点选同类物体、点击文字补全诗句
- AI 辅助交互款:滑动拼图(含缺口检测)、轨迹识别验证
本教程聚焦前三种纯静态图形验证码的通用识别方案,滑动、点选等交互类验证码将另行分享。
2. 图形验证码识别技术基础
2.1 OCR 技术选型参考
OCR(光学字符识别)的核心是将图像中的视觉文字转换为可编辑文本。2024 年做轻量级爬虫,无需从零训练模型,以下方案按易用性、准确率、成本排序即可:
2.2 轻量级开发环境准备
Python 3.9+ 是目前爬虫与 OCR 最稳定的组合,依赖按需安装:
通用依赖(必装)
方案一:Tesseract 练手依赖
方案二:PaddleOCR 实战推荐依赖
3. 验证码识别全流程实战
3.1 热身:直接用 Tesseract 识别基础款
基础款验证码几乎没有干扰,无需预处理即可识别,但对倾斜、颜色等容忍度低:
提示:
--psm 7将图像视为单行文本;whitelist限制识别字符集,可有效减少误识别。
3.2 关键步骤:OpenCV 验证码预处理
轻量增强款验证码的主要干扰来自背景噪点、干扰线和颜色混乱。预处理的目标是将文字与背景彻底分离,只保留干净的黑白文字轮廓。
3.3 2024 实战首选:PaddleOCR 识别带预处理的验证码
PaddleOCR 内置中英文预训练模型,配合预处理后对常见干扰的鲁棒性极强,准确率可达 90% 以上。
lang 参数说明:
"en"优先英文识别;"ch"中英文混合识别,更适合中文验证码场景。
4. 自动化登录实战(Selenium 4 + PaddleOCR)
以「scrape.center」的模拟登录验证码网站为例,将整个流程串联成一个完整的自动化脚本。
关键技巧:使用
element.screenshot()直接截取验证码元素,避免整页截图再裁剪,提高稳定性。
5. 轻量级反反爬技巧(2024 更新)
识别验证码只是第一步,还需配合以下策略降低风控风险:
-
随机延迟
所有操作前后加入random.uniform(a, b)的随机等待,避免毫秒级执行。 -
IP 轮换
频繁请求时使用代理池(推荐付费代理,免费可用性极低): -
验证码错误重试
PaddleOCR 并非 100% 准确,增加 3~5 次识别-提交循环,失败后刷新验证码重试。 -
控制请求频率
批量爬取时,将请求频率控制在每分钟 10~20 次以内,避免触发风控。
6. 总结与展望
本教程分享了 2024 年轻量级爬虫识别静态图形验证码的全流程实践:
- OpenCV 预处理分离文字与噪声
- PaddleOCR 预训练模型完成高精度识别
- Selenium 4 实现自动化登录
这套组合足以应对大多数网站的轻量增强与中文验证码。
若遇到极度扭曲、密集生僻字等复杂验证码,可尝试:
- 调用百度、腾讯等商业 API 获取更高准确率
- 收集该站验证码样本,训练专用的小数据集模型
参考资料

