在自动化测试中,如果每次都要手动输入验证码登录,非常低效。一个常见的替代方式是:通过 Cookie 或 Token 登录,跳过验证码环节。
本文将介绍两种方式实现“免验证登录”策略。
🎯 场景适用
适合以下场景:
- 验证码极难识别(图形复杂、行为反爬强)
- 登录状态保存在 Cookie 或 Token 中
- 手动登录一次即可长期复用
- 已抓包获得接口参数,可模拟请求登录
✅ 方法一:使用 Cookie 登录(推荐)
🔁 步骤
- 手动登录一次网站
- 获取登录后的 Cookie(可用浏览器控制台)
- 将 Cookie 注入到 Selenium 会话中
- 直接访问受保护页面(已登录状态)
🧪 示例代码
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://example.com") # 必须先打开一次,创建域
# 注入 Cookie(以实际值为准)
cookies = [
{"name": "token", "value": "abc123"},
{"name": "session_id", "value": "xyz456"}
]
for cookie in cookies:
driver.add_cookie(cookie)
# 再次访问,已跳过登录
driver.get("https://example.com/dashboard")
📌 注意:
driver.get()
必须先打开域名,否则无法设置 Cookie- Cookie 需完整、有效,包含 domain / path / expiry 时可能需手动指定
✅ 方法二:通过请求接口获取 Token 再注入
适用于接口式登录系统,如某些前后端分离站点。
步骤:
- 分析登录接口(使用浏览器抓包)
- 用
requests
模拟登录,获得 Token - 将 Token 注入 Selenium 的 Cookie 或请求头中
🧪 示例代码
import requests
from selenium import webdriver
# Step 1:请求登录接口获取 token
resp = requests.post("https://example.com/api/login", json={"username": "user", "password": "pass"})
token = resp.json()['token']
# Step 2:打开 selenium
driver = webdriver.Chrome()
driver.get("https://example.com")
# Step 3:注入 token 为 cookie
driver.add_cookie({"name": "auth_token", "value": token})
driver.get("https://example.com/protected")
📌 有的网站把 token 放在 localStorage 或 header,此时需用 execute_script
或代理注入。
💡 方法三:直接操作 localStorage / sessionStorage
某些 SPA 页面不会用 Cookie,而是把登录信息放在 localStorage
:
driver.execute_script("window.localStorage.setItem('token', 'abc123');")
driver.refresh()
或 sessionStorage:
driver.execute_script("window.sessionStorage.setItem('auth', 'xyz456');")
🧨 踩坑提示
- 注入 Cookie 后别忘了刷新或重新访问页面
- Cookie 过期或有域名限制时,需重新获取
- 有些站点还需设置 User-Agent、Referer,建议抓包比对
🧼 小结
方法 | 场景 | 优点 |
---|---|---|
Cookie 注入 | 传统系统 | 简单通用 |
Token 注入 | 接口式登录 | 灵活、自动化强 |
localStorage | 前后端分离 | 无需页面交互 |
使用 Cookie / Token 登录可以绕过验证码,大幅提升自动化效率,特别适合频繁运行的测试任务或数据爬取。
📌 延伸阅读:
- 使用 Charles/Fiddler 抓包获取 Token
- Requests + Selenium 组合登录策略
- Cookie 结构字段介绍(path, domain, expires 等)
欢迎留言交流 👇