获取验证码
获取验证码使用selenium中的screenshot方法对验证码图片元素进行截图并保存。
wd = webdriver.Chrome('chromedriver.exe')
imag = wd.find_element_by_xpath("img")
imag.screenshot("code.png")
识别验证码
验证码识别使用pytesseract实现。
pytesseract是一款用于光学字符识别(OCR)的python工具,即从图片中识别出和“读取”其中嵌入的文字。pytesseract是对Tesseract-OCR的一层封装,同时也可以单独作为对Tesseract引擎的调用脚本,支持使用PIL库(Python Imaging Library)读取各种图片文件类型,包括jpeg、png、gif、bmp、tiff等其它格式。作为脚本使用时,pytesseract将打印识别出的文字,而不是将其写入文件。
首先,安装pytesseract:
pip3 install pytesseract -i https://pypi.tuna.tsinghua.edu.cn/simple/
其次需要安装Google Tesseract
Tesseract OCR github地址:https://github.com/tesseract-ocr/tesseract
Windows Tesseract下载地址:https://digi.bib.uni-mannheim.de/tesseract/
Mac和Linux安装方法参考:https://tesseract-ocr.github.io/tessdoc/Installation.html
下载后进行安装,安装时注意保存安装位置,用于设置环境变量,同时注意选择需要使用的语言,如下图:
其他步骤next即可。
安装完成后,将安装目录(C:\Program Files\Tesseract-OCR)添加到PATH环境变量中。命令行窗口输入:tesseract
,查看是否安装成功。
安装成功之后,使用pytesseract提取图片中出现的文字
code = pytesseract.image_to_string(Image.open("code.png"))[0:4]
注意截取字符串的长度,先保证输入验证码的长度是ok的。
提交验证码
提交验证码,当然是把识别出来的字符串填入input框里,点击提交按钮
wd.find_element_by_id("CodeInput").send_keys(code)
wd.find_element_by_xpath('/html/body/button').click()
but,unfortunately,pytesseract识别出来的验证码并不是百分百正确的,因此,填写了验证码,点了按钮,你可能收到的是验证码错误的提示。
在此,我使用了循环判断,如果点击提交之后,页面没有发生跳转,说明登录失败了,那么浏览器导航栏的url就没有发生变化,如果没发生变化,就重新填写用户名、密码、识别验证码,直至登录成功发生跳转。
#记录一下当前的url
current_url = wd.current_url
while True:
#判断url有没有发生变化
if current_url == wd.current_url:
#填密码,识别验证码
else:
#进入下一步
break
在我的使用过程中,这个方法行得通,有更好地方法,跪请私信我。
参考链接
Tesseract 下载安装https://blog.csdn.net/u010698107/article/details/121736386