文章目錄
- 前言
- 1 方案一:使用Chrome用戶數據目錄
- 2 方案二:手動獲取并保存Cookies,后續使用保存的Cookies
- 3 注意事項
前言
-
在進行使用Selenium進行爬蟲、網頁自動化操作時,登錄往往是一個必須解決的問題,但是Selenium每次打開的瀏覽器默認是不攜帶用戶數據的,所以每次都需要手動登錄。本文將詳細介紹如何使用Selenium配合Cookies實現網頁的自動登錄功能,以鏈家網站為例進行講解。
-
實現思路
- 使用本地保存的Chrome用戶數據目錄
- 先手動登錄一次獲取并保存Cookies,后續使用保存的Cookies
1 方案一:使用Chrome用戶數據目錄
-
思想:這種方案的核心是直接使用本地Chrome瀏覽器的用戶數據,包括已保存的登錄狀態和Cookie信息。
-
代碼實現(代碼執行之前先保證手動正常打開網站時,網站是登陸了的,不然使用的用戶數據也是沒有登陸的,沒有用)
from selenium import webdriver
from selenium.webdriver.chrome.service import Servicedriver_path = "E:\\ProgramFiles\\_CodeTools\\ChromeDriver\\chromedriver.exe"
service = Service(driver_path)options = webdriver.ChromeOptions()
# 設置用戶數據目錄
options.add_argument("--user-data-dir=C:/Users/L/AppData/Local/Google/Chrome/User Data")
# 禁用自動化提示
options.add_experimental_option("useAutomationExtension", False)
options.add_experimental_option("excludeSwitches", ["enable-automation"])browser = webdriver.Chrome(service=service, options=options)
browser.get("https://bj.lianjia.com/ershoufang/")# 后續操作
# ...
- 核心代碼:
options.add_argument("--user-data-dir=C:/Users/L/AppData/Local/Google/Chrome/User Data")
該代碼的作用是設置Chrome瀏覽器的用戶數據目錄(C:/Users/L/AppData/Local/Google/Chrome/User Data
),使得Selenium可以直接使用本地Chrome瀏覽器的用戶數據,包括已保存的登錄狀態和Cookie信息。不過應注意用戶數據目錄隨操作系統、用戶名等不同而不同,需要根據實際情況進行調整。
-
不同操作系統的數據目錄如下:
- Windows:
C:/Users/用戶名/AppData/Local/Google/Chrome/User Data
- macOS:
~/Library/Application Support/Google/Chrome/Profile 1
- Linux:
~/.config/google-chrome/Default
- Windows:
-
優點
- 實現簡單,不需要手動處理Cookie,代碼量少
- 可以直接使用本地瀏覽器的所有配置
-
缺點
- 依賴本地Chrome瀏覽器配置
- 可能存在跨設備兼容性問題
- 需要指定正確的用戶數據目錄路徑
2 方案二:手動獲取并保存Cookies,后續使用保存的Cookies
-
思想:這種方案的核心是先通過手動登錄獲取網站的Cookies信息,將其保存到本地文件,后續使用時直接讀取并應用這些Cookies來實現自動登錄。
-
代碼實現(第一步:獲取Cookies)
import json
from selenium import webdriver
from selenium.webdriver.chrome.service import Servicedriver_path = "E:\\ProgramFiles\\_CodeTools\\ChromeDriver\\chromedriver.exe"
service = Service(driver_path)options = webdriver.ChromeOptions()
options.add_experimental_option("useAutomationExtension", False)
options.add_experimental_option("excludeSwitches", ["enable-automation"])browser = webdriver.Chrome(service=service, options=options)
browser.get("https://bj.lianjia.com/ershoufang/")# 等待手動登錄
input("請登錄后按回車繼續...")# 獲取cookie并保存
cookies = browser.get_cookies()
with open("cookies.json", "w") as f:json.dump(cookies, f, indent=4)# 關閉瀏覽器
browser.quit()
這一步在瀏覽器打開后網頁是沒有登錄的,需要我們手動按照網頁要求進行登錄,登錄完成后命令行回車,程序獲取Cookies后保存到本地文件,結束程序。
- 代碼實現(第二步:使用Cookies實現免登錄)
import json
from selenium import webdriver
from selenium.webdriver.chrome.service import Servicedriver_path = "E:\\ProgramFiles\\_CodeTools\\ChromeDriver\\chromedriver.exe"
service = Service(driver_path)options = webdriver.ChromeOptions()
options.add_experimental_option("useAutomationExtension", False)
options.add_experimental_option("excludeSwitches", ["enable-automation"])browser = webdriver.Chrome(service=service, options=options)
browser.get("https://bj.lianjia.com/ershoufang/")# 讀取并添加cookie
with open("cookies.json", "r") as f:cookies = json.load(f)
for cookie in cookies:browser.add_cookie(cookie)# 刷新頁面,完成登錄
browser.refresh()# 后續操作
# ...
這一步代碼是讀取保存的Cookies,并將其添加到瀏覽器中,完成自動登錄。
- 核心代碼:
# 步驟一:獲取并保存Cookies
cookies = browser.get_cookies()
with open("cookies.json", "w") as f:json.dump(cookies, f, indent=4)# 步驟二:讀取并使用Cookies
with open("cookies.json", "r") as f:cookies = json.load(f)
for cookie in cookies:browser.add_cookie(cookie)
這段代碼展示了Cookies的獲取、保存和使用過程。需要注意的是,Cookies通常都有有效期,過期后需要重新獲取。
- 優點
- 可跨設備使用,便于部署
- Cookie可以保存和復用
- 實現更靈活,可以針對不同網站保存不同的Cookie
- 缺點
- 需要先手動登錄獲取Cookie
- Cookie可能會過期,需要定期更新
- 實現步驟相對較麻煩
3 注意事項
- ChromeDriver版本要與Chrome瀏覽器版本匹配
- Cookie有效期有限,需要定期更新
- 不同網站的Cookie獲取方式可能不同
- 注意Cookie的安全存儲,避免泄露
- 建議添加異常處理機制