在自动化测试中,如果每次都要手动输入验证码登录,非常低效。一个常见的替代方式是:通过 Cookie 或 Token 登录,跳过验证码环节。

本文将介绍两种方式实现“免验证登录”策略。


🎯 场景适用

适合以下场景:

  • 验证码极难识别(图形复杂、行为反爬强)
  • 登录状态保存在 Cookie 或 Token 中
  • 手动登录一次即可长期复用
  • 已抓包获得接口参数,可模拟请求登录

🔁 步骤

  1. 手动登录一次网站
  2. 获取登录后的 Cookie(可用浏览器控制台)
  3. 将 Cookie 注入到 Selenium 会话中
  4. 直接访问受保护页面(已登录状态)

🧪 示例代码

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 再注入

适用于接口式登录系统,如某些前后端分离站点。

步骤:

  1. 分析登录接口(使用浏览器抓包)
  2. requests 模拟登录,获得 Token
  3. 将 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 等)

欢迎留言交流 👇

添加微信