轉載自:Python知識圈
ID:PythonCircle
作者:pk哥
閱讀文字大概需要 5 分鐘。
前言
很多時候我們做 Python 爬蟲時或者自動化測試時需要用到 selenium 庫,我們經常會卡在登入的時候,登入驗證碼是最頭疼的事情,特別是如今的文字驗證碼和圖形驗證碼。文字和圖形驗證碼還加了幹擾線,本文就來講講怎麼繞過登入頁面。
登入頁面的驗證,比如以下的圖形驗證碼。
還有我們基本都看過的 12306 的圖形驗證碼。
繞過登入方法
繞過登入基本有兩種方法,第一種方法是登入後檢視網站的 cookie,請求 url 的時候把 cookie 帶上,第二種方法是啟動瀏覽器帶上瀏覽器的全部資訊,包括新增的書簽和訪問網頁的 cookie 資訊。
第一種 cookie 方法我們要分析別人網站的 cookie 值,找出相應的值然後新增進去,對於我們不熟的網站,他們可能也會做加密或者動態處理,所以有些網站也不是那麼好操作。如果是自己公司的網站需要測試,我們可以詢問對應的開發那個 cookie 值是區分獨立用的值,拿出來放在請求裡面就行。
新增 cookie 繞過登入
比如我們登入百度賬號比較費勁,每次都需要登入也比較繁瑣,我們 F12 開啟頁面除錯工具,登入後找到 www.baidu.com 檔案,在 cookie 中,我們發現很多值,其中圖中圈起來的就是我們要找的值。
我們在訪問 baidu 連結的時候加上這個 cookie 值,這樣就是直接登入後的百度賬號了。
下載瀏覽器驅動
我們要 selenium 啟動瀏覽器時,需要下載後對應的驅動檔案並放在 Python 安裝的根目錄下,比如我會用到谷歌 Chrome 瀏覽器和 Firefox 火狐瀏覽器。
谷歌瀏覽器驅動下載地址:
http://chromedriver.storage.googleapis.com/index.html
火狐瀏覽器驅動下載地址:
https://github.com/mozilla/geckodriver/releases/
啟動 Chrome 瀏覽器繞過登入
我們每次開啟瀏覽器做相應操作時,對應的快取和 cookie 會儲存到瀏覽器預設的路徑下,我們先檢視個人資料路徑,以 chrome 為例,我們在位址列輸入 chrome://version/
圖中的個人資料路徑就是我們需要的,我們去掉後面的 \Default,然後在路徑前加上「–user-data-dir=」就拼接出我們要的路徑了。
profile_directory = r'--user-data-dir=C:\Users\xxx\AppData\Local\Google\Chrome\User Data'
接下來,我們啟動瀏覽器的時候採用帶選項時的啟動,這種方式啟動瀏覽器需要註意,執行程式碼前需要關閉所有的正在執行 chrome 程式,不然會報錯。全部程式碼如下。
selenium 自動化啟動瀏覽器後我們會發現我之前儲存的書簽完整在瀏覽器上方,baidu 賬號也是登入的狀態。
啟動 Firfox 瀏覽器繞過登入
Firfox 火狐瀏覽也可以這樣啟動它,設定略有不同。
首先,檢視配置檔案的儲存路徑,檢視方法:幫助–故障排除資訊–配置檔案夾,把裡面的路徑複製過來就行。
同樣,我們把路徑放在變數中。
profile_path = class="hljs-string">r'C:\Users\guixianyang\AppData\Roaming\Mozilla\Firefox\Profiles\dvm6wqam.default'
我們也在火狐瀏覽器中登入好百度的賬號,用 selenium 自動化啟動帶配置檔案的火狐瀏覽器,也會發現啟動時已經啟動了瀏覽器安裝的外掛和登入好的百度賬號。
繞過圖形驗證碼的網站
文中第一個圖是簡書登入時的圖形驗證碼,我們登入簡書後(cookie 有一定的時效,貌似有 10 天半個月左右),把上面程式碼中的連結換成簡書的,再用上面的方法覺可以實現繞過登入頁的圖形驗證碼。
比如我直接開啟我的簡書個人主頁
https://www.jianshu.com/u/52353ffa8b86
自動化啟動後也是保留了登入的狀態。
網站的登入大門已被開啟,接下來就可以做自己想做的事情了,比如爬蟲、自動化測試驗證之類的。
PS:以上技巧對有些網站可能不管用,但是對大部分網站還有適用的,覺得本文小技巧有用的自己趕緊試試吧。
朋友會在“發現-看一看”看到你“在看”的內容