selenium模拟登陆截屏保存验证码

上一篇文章讲到用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                         # 设置灰度图二值化阈值
table = []
for i in range(256):                    # 像素为256
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image = image.point(table, '1')         # 二值化处理后的副本(1表示二值化)
    
result = pytesseract.image_to_string(image)# 验证码图片转换为文本
    


# 验证码识别信息脏数据处理

verif_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
verif_list = []
for i in result:
    if i in verif_str:
        verif_list.append(i)
veri = "".join(verif_list)
print(veri)

 

 

你可能感兴趣的:(爬虫)