如何在Python中保存并使用Cookies实现网站持久登录?
问题根源分析
你的代码存在两个核心错误:
- 保存Cookie时未获取浏览器当前Cookie:直接调用
pickle.dump(cookies),但cookies变量未被赋值为driver.get_cookies()的结果,且pickle.dump返回None,导致保存的内容完全无效。 - 导入Cookie时逻辑错误:循环中每次执行
driver.delete_all_cookies(),会导致前一个添加的Cookie被立即删除,最终仅保留最后一个Cookie;且导入后未刷新页面,浏览器不会加载新的Cookie状态。
Selenium 正确实现代码
1. 登录后保存Cookie
import pickle from selenium import webdriver import time driver = webdriver.Chrome() driver.get("website") # 替换为目标网站实际URL # 手动完成登录操作(有自动登录逻辑可替换此步骤) time.sleep(10) # 获取当前浏览器的所有Cookie并保存 cookies = driver.get_cookies() pickle.dump(cookies, open("cookies.pkl", "wb")) driver.quit()
2. 导入Cookie实现自动登录
import pickle from selenium import webdriver import time driver = webdriver.Chrome() driver.get("website") # 必须先访问目标网站,否则Cookie无法绑定到对应域名 # 清除原有Cookie,批量导入保存的Cookie driver.delete_all_cookies() cookies = pickle.load(open("cookies.pkl", "rb")) for cookie in cookies: # 部分网站需要移除expiry字段(若导入时报错) if 'expiry' in cookie: del cookie['expiry'] driver.add_cookie(cookie) # 刷新页面,让浏览器加载新的Cookie状态 driver.refresh() time.sleep(5) # 后续操作即可处于登录状态
Playwright 实现方案(更稳定)
Playwright自带上下文保存功能,无需手动处理Cookie,可靠性更高:
1. 保存登录上下文
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() page.goto("website") # 手动登录或执行自动登录逻辑 page.wait_for_timeout(10000) # 保存上下文状态(包含Cookie、本地存储等所有登录相关数据) context.storage_state(path="auth_state.json") browser.close()
2. 加载上下文实现自动登录
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 加载保存的登录上下文 context = browser.new_context(storage_state="auth_state.json") page = context.new_page() page.goto("website") # 页面已处于登录状态,可直接执行后续操作 page.wait_for_timeout(5000) browser.close()
内容的提问来源于stack exchange,提问作者Matvey Gorshkov
相关产品推荐
相关产品推荐

