如何用Selenium Java保存Cookie,避免自动化测试重复谷歌认证
核心思路
谷歌认证的会话依赖核心Cookie(如SID、HSID),只要在新测试实例中载入已登录状态的完整Cookie集合,就能跳过重复认证。但要注意,谷歌Cookie会绑定浏览器环境、IP等信息,需尽量保持测试环境一致性,同时Cookie存在有效期,需定期更新。
针对Selenium的实现步骤
- 首次登录并保存Cookie
完成一次谷歌认证后,将当前会话Cookie导出到本地文件:
from selenium import webdriver import json driver = webdriver.Chrome() # 访问开发URL并完成谷歌认证 driver.get("你的开发环境URL") # 等待登录完成后,获取所有Cookie cookies = driver.get_cookies() # 保存到本地JSON文件 with open("google_auth_cookies.json", "w") as f: json.dump(cookies, f) driver.quit()
- 后续测试载入Cookie
启动新浏览器实例时,先加载保存的Cookie,再访问目标URL:
from selenium import webdriver import json driver = webdriver.Chrome() # 必须先访问谷歌账号域名,否则无法跨域添加Cookie driver.get("https://accounts.google.com") # 读取并导入Cookie with open("google_auth_cookies.json", "r") as f: cookies = json.load(f) for cookie in cookies: # 移除Selenium不兼容的字段(如sameSite) if "sameSite" in cookie: del cookie["sameSite"] driver.add_cookie(cookie) # 访问开发URL,此时已处于登录状态 driver.get("你的开发环境URL")
提示:若Cookie添加失败,检查Cookie的domain字段是否与当前访问域名匹配。
针对Playwright的实现步骤
Playwright自带会话持久化功能,无需手动处理Cookie:
- 创建并保存持久化会话
首次运行时创建带存储目录的上下文,完成登录后会话数据自动保存:
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 指定会话存储目录,启动浏览器完成认证 browser = p.chromium.launch_persistent_context("./google_session_store", headless=False) page = browser.new_page() page.goto("你的开发环境URL") # 手动完成谷歌认证后关闭浏览器 browser.close()
- 复用已保存的会话
后续测试直接加载存储的上下文,跳过登录流程:
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 加载已保存的会话上下文 browser = p.chromium.launch_persistent_context("./google_session_store", headless=True) page = browser.new_page() page.goto("你的开发环境URL") # 直接执行测试逻辑,无需再次认证 # ... browser.close()
优势:自动处理Cookie、LocalStorage等所有会话数据,兼容性更强。
关键注意事项
- Cookie有效期:谷歌会话Cookie有效期通常为几小时到几天,需定期重新生成保存的会话文件。
- 环境一致性:保持测试用浏览器版本、用户代理、IP地址不变,否则谷歌可能触发二次验证。
- 验证码规避:首次登录尽量使用真人验证,保存会话后复用;避免短时间内频繁创建新实例触发风控。
内容的提问来源于stack exchange,提问作者Ivaylo Ilchev
相关产品推荐
相关产品推荐

