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)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章