一、缘 由
学习Selenium的过程,在尝试应用于实际工作中遇到的第一个问题,和开发沟通是否可以开个后门绕过验证码登录,但无果,遂决定自己尝试解决这个问题。
二、说 明
接下来我分享两种较为简单验证码的自动识别方法实现,一种如图1无杂质,仅仅添加有干扰的背景色,另一种在图1验证码的基础上再添加不规则的杂质,如图2所示。
三、方法及实现
3.1、图1(无杂质)验证码,实现自动识别
思 路:
首先截取整个web页面,然后定位验证码元素大小,截取验证码图片并保存,最后调用用OCR识别技术识别验证码,OK!
环 境:
Python3 + Selenium + OCR软件 + pytesseract/PIL(第三方图像识别库)
Python3安装两个第三方图像识别库,直接命令行输入:pip install pytesseract,同时也会附带安装PIL库
OCR软件下载(目前最新版是v3.05.01):https://github.com/UB-Mannheim/tesseract/wik
配置环境变量:
PATH→ D:\Tesseract-OCR
TESSDATA_PREFIX→ D:\Tesseract-OCR\tessdata
注 意:OCR软件需要配置两个环境变量,一个是其安装路径,另一个是安装路径下的tessdata,变量名为:TESSDATA_PREFIX,这个点很重要!
实 现:
3.2、图2(有杂质)验证码,实现自动识别
思 路:
还是先截取整个web页面,然后定位验证码元素大小,截取验证码图片并保存,这次调用百度云识别技术识别验证码,OK!
说 明:
环境搭建与方法3.1一致,区别在于识别技术调用百度云-文字识别,基于Python的SDK下载、安装以及使用方法见官方SDK文档(调用需要有百度云账号)。
根据不同的文字识别技术,每天有50~500次的免费调用权限,如图所示,我本次所使用的是网络图片文字识别,目前对于图2类型(有杂质)的验证码识别正确率大概为40%,虽然识别率不高但是总比你手动输入方便。
实 现:
OK,搞定!如有问题欢迎随时沟通,评论~