selenium +python 使用token跳过登录进首页
·
在测试时不想要每次调用登录进首页,那么想要跳过登录,那就是使用cokies或者token值进登录页了,但是我测试的项目既然在控制台找到cokies,所以研究用token
菜单也是有“key”值控制的,所以在最开始我只写入token只展示了首页但是没有菜单,所以当“key”有其他值也要加入避免页面元素不完整。

一、核心原理
网站的登录状态通常通过 Cookie 或 LocalStorage/SessionStorage 存储 Token(令牌)来维持:
- Token 是用户登录后服务器返回的身份凭证,只要 Token 未过期,浏览器携带该 Token 访问接口 / 页面,服务器就会判定为已登录;
- Selenium 可以模拟浏览器操作,提前将有效的 Token 写入浏览器的 Cookie 或本地存储,从而跳过账号密码输入的登录流程,直接进入首页。
二、前置条件
- 环境准备:已安装 Python、Selenium 库,下载对应浏览器的驱动(ChromeDriver/EdgeDriver,版本需与浏览器匹配);
- 安装命令:
pip install selenium
- 安装命令:
- 提前获取有效的 Token:
- 方式:登录目标网站后,在浏览器「开发者工具(F12)→ Application → Cookies/LocalStorage」中找到 Token 对应的键值对(常见键名:token、access_token、sessionid 等)。
三、完整实操代码
以下以 Chrome 浏览器为例,提供两种常见场景的实现代码(Cookie 存储 Token、LocalStorage 存储 Token)。
场景 1:Token 存储在 Cookie 中(最常见)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
def skip_login_by_cookie_token():
# 1. 配置浏览器选项(可选,根据需求调整)
chrome_options = Options()
# 取消浏览器自动化提示(可选)
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
# 打开浏览器
driver = webdriver.Chrome(options=chrome_options)
try:
# 2. 先访问网站的任意页面(必须先加载域名,才能写入Cookie)
# 建议访问首页或空页面,避免提前跳转登录页
driver.get("https://目标网站域名.com") # 替换为实际域名
time.sleep(1) # 等待页面加载
# 3. 写入Token到Cookie(核心步骤)
# 替换为你获取的Cookie参数:name=Token键名,value=Token值,domain=网站域名
driver.add_cookie({
"name": "access_token", # 替换为实际Token的键名(如token/sessionid)
"value": "你的有效Token值", # 替换为实际获取的Token
"domain": ".目标网站域名.com", # 替换为网站域名(如.baidu.com)
"path": "/", # 固定为/,表示全站生效
"expires": None # Token过期时间(可选,无则填None)
})
# 4. 刷新页面或重新访问首页,即可跳过登录
driver.refresh() # 刷新当前页面
# 或直接访问首页:driver.get("https://目标网站域名.com/home")
print("登录成功,已进入首页!")
# 后续可添加自动化操作(如点击按钮、获取页面元素等)
# 停留5秒查看效果(可选)
time.sleep(5)
except Exception as e:
print(f"操作失败:{e}")
finally:
# 关闭浏览器(调试时可注释,方便查看)
# driver.quit()
pass
if __name__ == "__main__":
skip_login_by_cookie_token()
场景 2:Token 存储在 LocalStorage 中
部分网站会将 Token 存在 LocalStorage(本地存储),需通过执行 JS 脚本写入:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
def skip_login_by_localstorage_token():
chrome_options = Options()
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
driver = webdriver.Chrome(options=chrome_options)
try:
# 1. 先访问网站域名(必须加载域名才能操作LocalStorage)
driver.get("https://目标网站域名.com")
time.sleep(1)
# 2. 执行JS脚本,将Token写入LocalStorage(核心步骤)
token_key = "access_token" # 替换为实际Token键名
token_value = "你的有效Token值" # 替换为实际Token
# 执行JS代码:localStorage.setItem(键, 值)
driver.execute_script(f'localStorage.setItem("{token_key}", "{token_value}")')
# 3. 刷新页面或访问首页
driver.get("https://目标网站域名.com/home")
print("Token写入成功,已进入首页!")
time.sleep(5)
except Exception as e:
print(f"操作失败:{e}")
finally:
# driver.quit()
pass
if __name__ == "__main__":
skip_login_by_localstorage_token()
场景 3:Token 存储在 SessionStorage 中
SessionStorage 和 LocalStorage 原理类似(同属 Web Storage),但 SessionStorage 仅在当前会话有效(关闭浏览器即失效),操作上只需调整 JS 脚本即可实现 Token 写入。下面是针对 SessionStorage 场景的完整实现方案,包含代码、关键细节和避坑点。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
def skip_login_by_sessionstorage_token():
# 1. 配置浏览器选项(新手可直接用默认,按需调整)
chrome_options = Options()
# 关闭自动化提示,避免网站检测
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
# 可选:无头模式(后台运行,不显示浏览器界面)
# chrome_options.add_argument("--headless=new")
# 初始化浏览器驱动(Chrome为例,Edge只需替换为webdriver.Edge())
driver = webdriver.Chrome(options=chrome_options)
try:
# 2. 关键:先访问目标网站的任意页面(必须加载域名才能操作SessionStorage)
# 建议访问网站根域名,避免提前跳转登录页
driver.get("https://目标网站域名.com") # 替换为实际域名
time.sleep(1) # 等待页面基础资源加载(避免JS执行失败)
# 3. 核心步骤:执行JS脚本写入Token到SessionStorage
token_key = "access_token" # 替换为你获取的SessionStorage中Token的键名
token_value = "你的有效Token值" # 替换为实际获取的Token字符串
# 执行JS:sessionStorage.setItem(键名, 键值)
# 注意:若Token包含特殊字符(如引号),需转义,这里用Python格式化确保兼容
js_script = f'sessionStorage.setItem("{token_key}", "{token_value}");'
driver.execute_script(js_script)
# 可选:验证Token是否写入成功(调试用)
check_script = f'return sessionStorage.getItem("{token_key}");'
saved_token = driver.execute_script(check_script)
if saved_token == token_value:
print("✅ Token成功写入SessionStorage")
else:
print("❌ Token写入失败,请检查键名/值是否正确")
# 4. 刷新页面或直接访问首页,触发登录态验证
driver.refresh() # 刷新当前页面
# 或直接访问需要登录的首页:driver.get("https://目标网站域名.com/home")
print("🎉 操作完成,已跳过登录进入页面!")
time.sleep(5) # 停留查看效果(调试用,可注释)
except Exception as e:
print(f"❌ 操作失败:{str(e)}")
finally:
# 调试完成后关闭浏览器(调试时可注释,方便查看)
# driver.quit()
pass
if __name__ == "__main__":
skip_login_by_sessionstorage_token()
四、关键步骤说明
1. 如何获取有效的 Token?
- 打开目标网站,手动登录账号;
- 按 F12 打开开发者工具,切换到「Application」标签;
- 若 Token 在 Cookie 中:点击左侧「Cookies」→ 选择网站域名 → 找到 Token 对应的行,复制「Name」和「Value」;
- 若 Token 在 LocalStorage 中:点击左侧「LocalStorage」→ 选择网站域名 → 找到 Token 键值对,复制键和值。
- 若 Token 在 SessionStorage 中:点击左侧「SessionStorage」→ 选择网站域名 → 找到 Token 键值对,复制键和值。
2. 核心参数注意事项
domain(Cookie 场景):必须填写网站的根域名(如.taobao.com,开头加.适配子域名),否则 Cookie 无效;path:固定为/,表示 Cookie 对全站路径生效;- Token 有效期:Token 通常有过期时间(几小时 / 几天),若提示未登录,需重新获取最新 Token;
- 浏览器驱动:确保 ChromeDriver/EdgeDriver 版本与本地浏览器版本一致(可在浏览器「设置→关于」查看版本)。
3. 常见问题解决
- 写入 Cookie 后仍跳登录页:
- 检查
domain是否填写正确(最常见错误); - 确认 Token 未过期,重新手动登录获取新 Token;
- 部分网站需同时写入多个 Cookie(如 refresh_token、uid),需全部复制写入。
- 检查
- LocalStorage 写入无效:
- 确认执行 JS 脚本前已访问目标域名(LocalStorage 是域名级别的,未加载域名无法写入);
- 检查 Token 键名是否完全匹配(区分大小写)。
五、进阶优化(可选)
- 封装 Token 获取逻辑:若 Token 过期快,可结合 requests 库先调用登录接口获取 Token,再传入 Selenium;
- 无头模式运行:添加
chrome_options.add_argument("--headless=new"),浏览器后台运行,不显示界面; - 持久化 Cookie:将 Token 保存到本地文件,避免每次手动复制(如用 json 存储)。
总结
- 核心逻辑:通过 Selenium 向浏览器写入登录态 Token(Cookie/LocalStorage),跳过账号密码登录;
- 关键前提:获取有效的 Token 并正确配置
domain/ 键名等参数; - 常见坑点:Token 过期、domain 填写错误、未先加载网站域名就写入 Token。
按此指南操作,只需替换 Token 和网站域名,就能快速实现跳过登录直接进入首页的自动化操作。
更多推荐

所有评论(0)