利用ChromeOptions()加載用戶配置


一. 如何繞過頁面登錄

我們在登錄網站的時候,通常需要輸入用戶名、密碼和驗證碼,那么有沒有辦法繞過登錄環節呢?

有兩種方法可以解決這個問題,一種是利用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

https://stackoverflow.com/questions/41941573/selenium-chromedriver-hangs-if-i-specify-user-data-dir-in-chrome-options

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM