1. 程式人生 > >webdriver——自動化測試驗證碼問題

webdriver——自動化測試驗證碼問題

驗證碼作用

不少網站在使用者登入、使用者提交資訊等登入和輸入的頁面上使用了驗證碼技術。驗證碼技術可以有效防止惡意使用者對網站的濫用,使得網站可以有效避免使用者資訊失竊、保證網站穩定安全性。
但是驗證碼給自動化測試帶來一些不便,使指令碼無法正常執行覆蓋功能模組。

如何解決

1.去掉驗證碼
這是最簡單的方法,對於開發人員來說,只是把驗證碼的相關程式碼註釋掉即可,如果是在測試環境,這樣做可省去了測試人員不少麻煩,如果自動化指令碼是要在正式環境跑,這樣就給系統帶來了一定的風險。
2.設定萬能碼
去掉驗證碼的主要是安全問題,為了應對線上系統的安全性威脅,可以在修改程式時不取消驗證碼,而是程式中留一個“後門”—設定一個“萬能驗證碼”,只要使用者輸入這個“萬能驗證碼”,程式就認為驗證通過,否則按照原先的驗證方式進行驗證。
3.驗證碼識別技術(OCR)
例如可以通過Python-tesseract 來識別圖片驗證碼,Python-tesseract是光學字元識別Tesseract OCR引擎的Python封裝類。能夠讀取任何常規的圖片檔案(JPG, GIF ,PNG , TIFF等)。不過,目前市面上的驗證碼形式繁多,目前任何一種驗證碼識別技術,識別率都不是100% 。
4.記錄cookie
通過向瀏覽器中新增cookie 可以繞過登入的驗證碼。

基於Cookie繞過驗證碼自動登入

案例:使用Cookie繞過百度驗證碼自動登入賬戶。

from selenium import webdriver
from time import sleep

driver=webdriver.Firefox()
driver.get("http://www.baidu.com/")

#手動新增cookie(和研發溝通清楚,用什麼cookie來驗證登陸)
#使用者id
driver.add_cookie({'name':'BAIDUID','value':'(根據實際獲取值填寫)'})
#儲存著使用者登入狀態的
driver.add_cookie({'name'
:'BDUSS','value':'根據實際抓包獲取值填寫'}) sleep(2) driver.refresh() sleep(3) driver.quit()