上一篇文章讲到用selenium模拟登陆界面,然后人工输入验证码,这样增加了人的工作量,增加了处理时间,并且可能验证码输入错误,下面我通过截取验证码部分,然后通过图片识别方式获取验证码信息。
首先是截取当前的登陆界面,然后定位到验证码的位置截取验证码图片。我遇到的问题是相同的位置,有时候会遇到截取的图片没有验证码、者验证码模糊不清楚、验证码很小等问题。查找之后发现是截屏时,页面没有显示完全导致的。
用time.sleep(2)来推迟页面的截取时间。
import time
from selenium import webdriver
import os
from PIL import Image
import pytesseract
pytesseract.pytesseract.tesseract_cmd = 'mypath\\Tesseract-OCR\\tesseract.exe'
self.driver =webdriver.Chrome(CHROME_DRIVER) #初始化对象
self.driver.set_window_size(900, 900) #设置窗口大小
time.sleep(2)
self.driver.get_screenshot_as_file(os.path.join(BASE_DIR, 'veri.png'))#获取当前窗口截屏并保存在程序文件根目录
left = 700 #获取验证最左边位置
top = 350 #获取验证码上边位置
right = left + 50 #获取验证码右边位置
bottom = top + 20 #获取验证码下边位置
open_img = Image.open('veri.png')#打开屏幕截图
open_img = open_img.crop((left, top, right, bottom))#使用获取到的位置剪切图片
open_img.show()#显示图片
image = open_img.convert('L') # 将验证码图片转换为灰度图(L表示灰度图)
threshold = 127