一. 如何繞過頁面登錄
我們在登錄網站的時候,通常需要輸入用戶名、密碼和驗證碼,那么有沒有辦法繞過登錄環節呢?
有兩種方法可以解決這個問題,一種是利用chrome瀏覽器的用戶配置,一種是利用cookie,這篇文章主要總結一下前者
二. 如何實現加載用戶配置(以博客園為例)
第一步:如果之前未登錄過該網站,在手工登錄的時候,要勾選下次自動登錄
第二步:利用chrome://version查看User Data的路徑
用戶的配置信息都放在User Data目錄下
第三步:構建python代碼
這里值得注意的是:
1. --user-data-dir 要寫正確(--user-data-dir或user-data-dir都是可以的),我看很多博文里都寫成了–user-data-dir,經過測試,發現后者是無法加載用戶配置的
2. get后的url為登陸后頁面的url,這也契合我們的目的:即繞過登錄頁面,直接查看登陸后的頁面
from selenium import webdriver import time option = webdriver.ChromeOptions() option.add_argument("--user-data-dir=C:\\Users\\Beck\\AppData\\Local\\Google\\Chrome\\User Data") driver = webdriver.Chrome(options=option) driver.get("https://www.cnblogs.com")
第四步:python代碼運行之前,請關閉已打開的chrome瀏覽器
否則,chromedriver會掛起,后面打開url的操作不會執行,這一點請參考《Selenium chromedriver hangs if I specify user-data-dir in Chrome options》:
"The only one client could be connected to a debugger in one time. So, to fix the issue, when we want to enter to a user profile using a debugger - to avoid chromedriver hangs trying to connect to the debugger, we must close an existing Chrome session"
看來這個和遠程調試有關系,如果想用調試器來進入用戶配置,為了避免chromedriver嘗試連接調試器而導致的掛起,必須關閉已經存在的chrome會話
第五步:運行代碼,觀察結果
結果是符合預期的,因為看到的用戶名,我的博客和退出選項
三. 加載用戶配置並不是萬能的
利用ChromeOptions()加載用戶配置的前提是,我們要訪問頁面的url在瀏覽器的每次會話中都是相同的,如果同一頁面每次會話的url變化,這意味着可能要改變一下策略了,以QQ郵箱為例,每次瀏覽器會話中首頁的url都是不同的
一次會話:
另一次會話:
從上面兩張圖中,可以明顯發現這個sid是變動的,sid又是什么呢?請參考《詳解SID之終結篇》,里面有句話是:
"SID即安全標識符(System IDentifier),它用來標識用戶身份的。當系統每次創建用戶都會分配一個唯一的SID,每個帳戶的SID都是不重復的"
這樣即使運行python代碼,看到的始終是QQ郵箱的登錄頁面
參考文章
https://blog.csdn.net/zwq912318834/article/details/78933910
https://www.cnblogs.com/baoyu7yi/p/7058537.html