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.導入selenium
from selenium import webdriver
from 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列表,添加cookie
for cookie in cookies:
driver.add_cookie(cookie)
# 7. 刷新頁面
driver.refresh()
sleep(3)
# 8.關閉瀏覽器
driver.quit()
"""
注意:
當你手動點擊退出登陸,你所加載這這些cookie就失效了。
如果還需要通過cookie實現免登錄,就要重新獲取cookie信息。
"""
4、總結
-
通過上面例子我們可以知道,查看訪問百度所獲得的cookie中,也沒有看到有“sessionID”的數據,所以說“sessionID”名字是其他的名字也是一樣的,後端拿到這些cookie之後,只需要知道這個數據就是session,然後拿去和數據庫裏的進行比對就行了。
-
使用cookie 進行登錄最大的難點是如何獲得用戶名密碼的name ,如果找到不到name 的名字,就沒辦法向value 中輸用戶名、密碼信息。可以通過
get_cookies()
方法來獲取登錄的所有的cookie 信息,從而進行找到用戶名、密碼的name 對象的名字。當然最簡單的方法還是詢問前端開發人員。