selenium-跳過登錄驗證碼

selenium最常見的就是登錄,但是登錄有個坑,就是驗證碼的問題,關於驗證碼一共四個辦法:

1.讓開發註釋掉驗證碼。

2.讓開發設置一個萬能驗證碼,只要輸入這個驗證碼,就通過。

3.跳過驗證碼直接登錄成功。

4.驗證碼識別技術。

第三條寫的很模糊,不過下面就介紹一下第三條的實現方法。

先說一下實現思路:

1.打開要測試的網頁,獲取登錄前的cookie(可以抓包獲取,可以代碼實現,下面會附上代碼)。

2.手動登錄,再獲取登錄後的cookie。

3.對比兩次獲取的cookie,找出登錄後多出來的cookie,只要多出來的name和value就行(一般name就是token)。

4.在代碼里加上寫入cookie,把找出來的name和value寫入。然後再寫一遍打開網頁的代碼。

下面放上代碼(不要着急複製代碼爲自己所用,代碼後面會寫限制,有些登錄用這代碼也跳不過去,哈哈)。

#coding=utf-8
from selenium import webdriver
import time
#下面四行這麼寫是去掉谷歌瀏覽器上面提示的,第二行和第三行分別對應不同的提示
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
# options.add_argument('disable-infobars')
browser = webdriver.Chrome(chrome_options=options)
#
browser.maximize_window()
#打開火狐瀏覽器
# browser=webdriver.Firefox()
#輸入網址
browser.get("https://m.flycua.com/h5/#/")
#點擊登錄,用下面註釋的代碼獲取cookie,實現跳過登錄,執行腳本的時候就不用這部分了
# browser.find_element_by_id("su").click()
# cookie1= browser.get_cookies()
#打印登錄前的cookie
# print (cookie1)
#等待30秒,用這30秒時間完成登錄操作
# time.sleep(30)
#獲取登錄後的cookie
# cookie2= browser.get_cookies()
#打印登錄後的cookie
# print (cookie2)
#
#加入要獲取的cookie,寫進去
browser.add_cookie({'name':'tokenId', 'value':'8BB8FDD4FBB31F92424A7E0EBE872E01A4AF77654043DAD638E9F93B378F94E19A882A6C7E78999C9A5482985FDA333C3D1E5236C6BDA7935A89178F053FB490'})
#再次輸入網址
browser.get("https://m.flycua.com")

上面代碼包含了獲取cookie和實現跳過登錄的所有代碼,註釋部分一定要看清楚。(最早寫的是用的python2,後來又拿到python3的環境上執行,根據自己python版本,對腳本略作修改,應該只有print要修改)

然後我再說一下這代碼的侷限性。

1.可以看出cookie裏有tokenId,這個tokenId可以使用比較長的一段時間,前提是隻執行這自動化腳本,不能再手動登錄。因爲手動登錄又會產生一個新的tokenId,代碼需要更新。

2.如果某些網站打開直接就是登錄頁,那恐怕就跳不過登錄了,即使寫入cookie,第二次打開的網頁,仍然是登錄頁,即使寫了登錄後的網址。(我還見過更厲害的,登錄之前和登錄之後網址都不變)

如果不幸要測試的網站中了第二條,那麼只能放棄這中辦法了。驗證碼識別會在後續寫,可以百度搜索:selenium-識別驗證碼,我會用這個標題,可能就搜出我寫的了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章