1. 程式人生 > >python selenium-webdriver 登錄驗證碼的處理(十二)

python selenium-webdriver 登錄驗證碼的處理(十二)

title strip() main ext ima 大小 ring pass 搭建

很多系統為了防止壞人,會增加各樣形式的驗證碼,做測試最頭痛的莫過於驗證碼的處理,驗證碼的處理一般分為三種方法

1.開發給我們設置一個萬能的驗證碼;

2.開發將驗證碼給屏蔽掉;

3.自己識別圖片的上的千奇百怪的圖片,但是這樣的方法識別成功率不是特別的高,而且也不是對所有的都可以識別,只是識別一些簡單的驗證碼;

這裏主要使用到了pytesseract和PIL兩個模塊,首先我們搭建一下環境

pip install Pillow
pip install pytesseract 
由於Python-tesseract是一個基於google‘s Tesseract-OCR的獨立封裝包,那麽我們需要下載
Tesseract-OCR進行安裝,window下安裝記住需要配置環境變量

下面我們直接看一下具體的實例

#-*- coding:utf-8 -*-
import time
from selenium import webdriver
from PIL import Image,ImageEnhance
import pytesseract

def get_auth_code(driver,codeEelement):
    ‘‘‘獲取驗證碼‘‘‘
    driver.save_screenshot(login/login.png)  #截取登錄頁面
    imgSize = codeEelement.size   #
獲取驗證碼圖片的大小 imgLocation = imgElement.location #獲取驗證碼元素坐標 rangle = (int(imgLocation[x]),int(imgLocation[y]),int(imgLocation[x] + imgSize[width]),int(imgLocation[y]+imgSize[height])) #計算驗證碼整體坐標 login = Image.open("login/login.png") frame4=login.crop(rangle) #截取驗證碼圖片 frame4.save(
login/authcode.png) authcodeImg = Image.open(login/authcode.png) authCodeText = pytesseract.image_to_string(authcodeImg).strip() return authCodeText def pandarola_login(driver,account,passwd,authCode): ‘‘‘登錄pandarola系統‘‘‘ driver.find_element_by_id(loginname).send_keys(account) driver.find_element_by_id(password).send_keys(passwd) driver.find_element_by_id(code).send_keys(authCode) driver.find_element_by_id(to-recover).click() time.sleep(2) title = driver.find_element_by_id(menuName-h).text #獲取登錄的標題 ‘‘‘驗證是否登錄成功‘‘‘ try: assert title == u桌面 return 登錄成功 except AssertionError as e: return 登錄失敗 if __name__ == __main__: driver = webdriver.Chrome() driver.get(http://pandarola.pandadata.cn) driver.maximize_window() imgElement = driver.find_element_by_id(codeImg) authCodeText = get_auth_code(driver,imgElement) pandarola_login(driver,admin,1,authCodeText) driver.quit()

由於我們系統屬於內部系統,驗證碼比較簡單,所以很輕松的識別了,但是有時候2和Z無法識別,只要登錄失敗重新獲取再次登錄即可。

python selenium-webdriver 登錄驗證碼的處理(十二)