基于 Selenium+Python 自动获取登录态 Cookie 的三种实战方案
做爬虫,尤其是需要处理用户登录态的爬虫,最让人头疼的往往不是解析页面,而是如何稳定、优雅地拿到那把'钥匙'——身份认证凭证。无论是传统的 Cookie,还是现代应用偏爱的 Token、Session,获取它们的过程,常常是项目从'玩具级'迈向'生产级'的第一道坎。很多开发者止步于简单的 driver.get_cookies(),却在面对复杂登录流程、动态令牌或反爬策略时束手无策。今天,我们不谈那些手动复制粘贴的'玩具'方法,而是聚焦于如何用 Selenium 构建一套健壮的、可自动化的身份凭证获取体系。这不仅仅是调用一个 API,更是一场关于浏览器自动化、网络协议理解与工程化思维的实战。
1. 基础与进阶:超越 get_cookies() 的 API 获取方案
绝大多数 Selenium 教程都会告诉你,获取 Cookie 只需一行代码:cookies = driver.get_cookies()。这没错,但如果你只停留在这一步,可能会错过一半的风景,并踩进无数的坑。让我们先夯实基础,再探索更精细的控制。
1.1 标准 API 的深度解析与陷阱规避
driver.get_cookies() 返回的是一个字典列表,每个字典代表一个 Cookie。直接使用看似简单,但生产环境中,有几个关键细节必须处理。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import json
driver = webdriver.Chrome()
try:
driver.get("https://example.com/login")
# 模拟登录操作...
driver.find_element(By.ID, "username").send_keys("your_user")
driver.find_element(By.ID, "password").send_keys("your_pass")
driver.find_element(By.ID, "submit").click()
# 关键:等待登录完成,确保 Cookie 已设置
time.sleep(3)
# 显式等待是初级方案,更好的做法如下:
# from selenium.webdriver.support.ui import WebDriverWait
# from selenium.webdriver.support import expected_conditions as EC
# WebDriverWait(driver, 10).until(EC.url_changes("https://example.com/login"))
# 获取所有 Cookie
all_cookies = driver.get_cookies()
print(f"共获取 {len(all_cookies)} 个 Cookie")
# 将 Cookie 列表转换为 requests 库可用的字典格式
requests_cookies = {}
cookie all_cookies:
requests_cookies[cookie[]] = cookie[]
(, ) f:
json.dump(all_cookies, f, indent=)
:
driver.quit()

