Python+selenium 實現驗證碼識別


此篇文章僅作為自己的電子筆記,歡迎大神指教,如果能幫助到更多初學自動化測試的人也更好了!

我用的python版本是3.6的,至於python和selenium安裝配置這些步驟不再多說了,網上應該有很多與此相關的教程了。

首先我們需要安裝幾個模塊:打開cmd,使用命令

 

PIL模塊:pip3 install pillow

pytesseract模塊:pip install pytesseract

 

安裝后記得檢查venv/Lib/site_packages下是否已經有這些模塊了,像這樣:

 

 

 

 

那么下面我們就正式開始截取驗證碼了,第一步要做的就是引入我們后面要用到的模塊,代碼如下:

# coding = utf-8
from time import sleep
from selenium import webdriver
from PIL import Image
import pytesseract

 

然后我們來實現打開網站,跳轉網站的注冊頁面:

#打開谷歌瀏覽器
browser = webdriver.Chrome()

#打開首頁
browser.get("輸入注冊頁面URL路徑")
browser.maximize_window()

#如果需要點擊注冊按鈕
browser.find_element_by_xpath('//a[contains(text(),"注冊")]').click()

接下來我們就需要截取注冊頁面,再從截取到的注冊頁面圖片上根據驗證碼圖片的尺寸截取相應的圖片,我們就用最后截取到的圖片進行識別,原理大概就是先截取整個頁面,根據id元素定位到驗證碼圖片位置,算法計算出驗證碼的具體大小(可能會有截取不准確的情況,這里可以自己輸入數字進行調整),最后保存截取到的驗證碼圖片,代碼如下:

#獲取驗證碼圖片
browser.save_screenshot('picture.png')
ce = browser.find_element_by_id("imageCode")#具體的id要用F12自行查看
print(ce.location)
left = ce.location['x']
top = ce.location['y']
right = ce.size['width'] + left
height = ce.size['height'] + top
im = Image.open('picture.png')
img = im.crop((left,top,right, height))
img.save('picture2.png')#這里就是截取到的驗證碼圖片
browser.close()

最后我們使用pytesseract這個模塊來識別圖片中的驗證碼:

#引入pytesseract識別圖片中的驗證碼
image1 = Image.open('picture1')
text = pytesseract.image_to_string(image1)
print(text)

這個方法比較簡單,只適用驗證碼圖片非常清晰的情況,在項目中雖不太實用,但可以用來練習了解大概原理,今后學到了適用面更廣的方法會再分享給大家。

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM