Selenium自動化測試:如何使用cookie跳過驗證碼登入

1、驗證碼問題

對於web 應用來說,大部分的系統在使用者登入時,都要求使用者輸入驗證碼。驗證碼的型別的很多,有字母數字的,有漢字的,甚至還要使用者輸入一條算術題的答案的。對於系統來說,使用驗證碼可以有效果的防止採用機器猜測方法對口令的刺探,在一定程度上增加了安全性。但對於測試人員來說,不管是進行效能測試,還是自動化測試都是一個棘手的問題

2、處理驗證碼的方法

(1)去掉驗證碼

這是最簡單的方法,對於開發人員來說,只是把驗證碼的相關程式碼註釋掉即可,如果是在測試環境,這樣做可省去了測試人員不少麻煩,如果自動化指令碼是要在正式環境跑,這樣就給系統帶來了一定的風險。(風險大)

(2)設定萬能碼

去掉驗證碼的主要是安全問題,為了應對線上系統的安全性威脅,可以在修改程式時不取消驗證碼,而是程式中留一個“後門”,設定一個“萬能驗證碼”,只要使用者輸入這個“萬能驗證碼”,程式就認為驗證透過,否則按照原先的驗證方式進行驗證。

(3)驗證碼識別技術

例如可以透過Python-tesseract來識別圖片驗證碼,Python-tesseract 是光學字元識別Tesseract CR引擎的Python 封裝類。能夠讀取任何常規的圖片檔案(JPG, GIF ,PNG , TIFF 等)。不過,目前市面上的驗證碼形式繁多,目前任何一種驗證碼識別技術,識別率都不是100% 。(玩玩還行,工作中不推薦)

(4)記錄cookie

透過向瀏覽器中新增cookie 可以繞過登入的驗證碼,這是比較有意思的一種解決方案。我們可以在使用者登入之前,透過add_cookie()方法將使用者名稱密碼寫入瀏覽器cookie ,再次訪問系統登入連結將自動登入

3、Selenium實現透過cookie繞過驗證碼登陸

‘’‘1。學習目標 掌握驗證碼處理方式2。操作步驟 2。1 獲取登入後的cookie 透過瀏覽器F12或抓包工具 2。2 將登入後的cookie新增到指令碼中 driver。add_cookie(字典格式) 2。3 執行重新整理操作 driver。refresh()3。需求 獲取百度登入後的cookie,實現免登陸4。總結 4。1 首先登入一次 4。2 明確哪些cookie和登入相關 (1)如果明確哪些cookie是儲存使用者資訊,新增相應的cookie就好 (2)如果不知道哪些cookie是儲存使用者資訊的 @1 可以把登陸後的cookie全部新增進去。 @2也可以登陸前和登陸後分別獲取cookie, 登陸後多出來的cookie就是和登陸相關的使用者資訊cookie。 4。3 使用cookie做免登陸,原來登入的賬號不能退出的’‘’# 1。匯入seleniumfrom selenium import webdriverfrom time import sleep# 2。開啟瀏覽器driver = webdriver。Chrome()# 3。開啟頁面url = “http://www。baidu。com/”driver。get(url)sleep(2)‘’‘4。 登陸一次百度網站 透過瀏覽器F12或抓包工具,獲取cookie, 火狐瀏覽器方便獲取’‘’‘’‘5。 新增百度登入後的cookie 要確定哪些cookie是和使用者資訊先關的。 百度中BAIDUID和BDUSS兩個cookie是和使用者資訊相關的。 這兩個cookie就可以實現百度免登入。 測公司自己專案的時候,需要用cookie實現免登入, 需要問一下開發,和使用者個人資訊相關的登陸資料是哪些cookie。 載入這些條cookie資訊就可以實現免登入。’‘’cookies = [{“name”: “BAIDUID”, “value”: “026CB67282F2B6C4F2AC6880EAEFE5A6:FG=1”}, {“name”: “BDUSS”, “value”: “pJckQ3aXdEVi1ZaUVpalpDfjhmQTlpZW9mfnNCMUFCdDFCNUpZajB3TG5sdlJlRVFBQUFBJCQAAAAAAAAAAAEAAAAzO-pLc2RqYWtzZGs3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOcJzV7nCc1eYX”}]# 6。 遍歷cookies列表,新增cookiefor cookie in cookies: driver。add_cookie(cookie)# 7。 重新整理頁面driver。refresh()sleep(3)# 8。關閉瀏覽器driver。quit()‘’‘注意:當你手動點選退出登陸,你所載入這這些cookie就失效了。如果還需要透過cookie實現免登入,就要重新獲取cookie資訊。’‘’