selenium登录验证码处理

  • 获取验证码
  • 识别验证码
  • 提交验证码
  • 参考链接


获取验证码

获取验证码使用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

下载后进行安装,安装时注意保存安装位置,用于设置环境变量,同时注意选择需要使用的语言,如下图:

使用python获取手机的短信验证码 selenium python 获取验证码_selenium


其他步骤next即可。

安装完成后,将安装目录(C:\Program Files\Tesseract-OCR)添加到PATH环境变量中。命令行窗口输入:tesseract ,查看是否安装成功。

使用python获取手机的短信验证码 selenium python 获取验证码_验证码_02


安装成功之后,使用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 下载安装