使用 cookie 繞過驗證碼這種方式前提是必須要有長時間保存 cookie 的功能拭卿,比如登錄時會有勾選項"保存本次登錄信息","下次自動登錄"贱纠,"記住我"等峻厚。
當你勾選類似的選項后,登錄成功后服務(wù)器會要求瀏覽器將登錄信息存儲你到 cookie谆焊。我們就可以從瀏覽器 cookie 中獲取儲存的信息惠桃,添加到測試過程中的瀏覽器中,以達到繞過登錄的目的。
還是以 showdoc 為例辜王,showdoc 是默認保存 cookie 的劈狐。
首先查看登錄前的 cookie 信息:
這里注意 domain呐馆, 因為會有很多百度相關(guān)的統(tǒng)計肥缔。只看你當前系統(tǒng)相關(guān)域名的 cookie。
登錄后再查看一次 cookie 信息:
觀察登錄前后的 cookie汹来,這里 token 很像是我們要的辫继。??
如果你分辨不清楚,那就把登錄前后有差異俗慈,并且是當前系統(tǒng)域名下的 cookie 全部加進去。
得到想要的 cookie 信息后遣耍,就可以使用 WebDriver 中的 add_cookie()
方法添加 cookie 了闺阱。
接下來的步驟就簡單了:
- 進入系統(tǒng)任意頁面
- 添加 cookie
- 刷新頁面
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.showdoc.cc')
time.sleep(1) # => 等1秒,看看未登錄的狀態(tài)
# 以字典形式傳入cookie舵变,name的值對應(yīng)瀏覽器cookie中的name列酣溃,value值對應(yīng)cookie中的value列
driver.add_cookie({'name': 'cookie_token', 'value': '073fe7ab...cc1bc1ad'})
# 刷新頁面,相當于重新發(fā)送請求
# 此時會攜帶cookie纪隙,所以刷新后的頁面會以登錄后的狀態(tài)呈現(xiàn)
driver.refresh()
# 觀察一下赊豌,然后退出
time.sleep(5)
driver.quit()
以上面的方式就可以實現(xiàn)繞過登錄,不過這要注意以下兩點:
- 生成 cookie 的賬號不能有退出操作绵咱,否則 cookie 會失效碘饼。
- 注意 cookie 的有效期(
Expires/Max-Age
列),可能需要定時更新 cookie