前言
前期写得爬虫已经逐渐稳定,但是每次都是手动输入验证码,时间久了觉得麻烦,就想着自动识别验证码登陆,于是就开启了各种百度之路,磕磕碰碰,总算成功实现自动登陆,特次复盘此次验证码识别的全过程,以便大家参考。
一、下载安装tesserocr
1. 环境:win7 x64位 +python3.6
tesserocr是Python的一个OCR识别库,但其实是对tesseract做的一层PythonAPI封装,所以它的核心是tesseract。所以需要先安装tesseract。
2. 下载链接
- 下载链接:https://digi.bib.uni-mannheim.de/tesseract/
- 百度云链接:https://pan.baidu.com/s/1LpTBxBitlljUwP0cyqZS-Q 提取码:1d53
我下载的是tesseract-ocr-setup-3.05.01版本,并且将之后需要用到软件以及语言包打包在一起,有需要的读者可以点击百度云链接下载。
3.安装注意事项
-
安装注意事项:在安装到图片这一步时不需要勾选语言包,因为在安装过程中需要额外下载,但总是报错下载不了,可以先安装完再将单独下载语言包放入.\Tesseract-OCR\tessdata文件夹中即可。
-
添加系统变量:我是参考用于图片文本识别的Tesseract-OCR的安装说明(windows10)这篇博文的。
二、安装pytesseract和Pillow包
1.使用pycharm导入pytesseract和Pillow包
2.pytesseract包路径设置
- pytesseract安装完需要打开pytesseract文件,找到tesseract_cmd(一般在前几十行),将其设置为自己的tesseract.exe的安装路径,不然运行时会报错。
tesseract_cmd = r"D:\\python work\\tesserocr\\Tesseract-OCR\\tesseract.exe"
三、验证码图片处理
1.使用selenium自动批量右击下载验证码
这里我采用的是每次点击验证码就会自动刷新一下,然后右击另存为保存验证码,循环100次。
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
import win32api
import win32con
# 键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
# 键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0)
if __name__ == '__main__':
url = ''
driver = webdriver.Chrome()
driver.get(url)
VK_CODE = {
'enter': 0x0D, 'down_arrow': 0x28}
element = driver.find_element_by_xpath('//*[@id="vercode"]')
for i in range(100):
element.click()
action = ActionChains(driver).move_to_element(element) # 移动到该元素
action.context_click(element).perform() # 右键点击该元素
time.sleep(1)
win32api.keybd_event(