在测试时不想要每次调用登录进首页,那么想要跳过登录,那就是使用cokies或者token值进登录页了,但是我测试的项目既然在控制台找到cokies,所以研究用token

菜单也是有“key”值控制的,所以在最开始我只写入token只展示了首页但是没有菜单,所以当“key”有其他值也要加入避免页面元素不完整。

一、核心原理

网站的登录状态通常通过 CookieLocalStorage/SessionStorage 存储 Token(令牌)来维持:

  1. Token 是用户登录后服务器返回的身份凭证,只要 Token 未过期,浏览器携带该 Token 访问接口 / 页面,服务器就会判定为已登录;
  2. Selenium 可以模拟浏览器操作,提前将有效的 Token 写入浏览器的 Cookie 或本地存储,从而跳过账号密码输入的登录流程,直接进入首页。

二、前置条件

  1. 环境准备:已安装 Python、Selenium 库,下载对应浏览器的驱动(ChromeDriver/EdgeDriver,版本需与浏览器匹配);
    • 安装命令:pip install selenium
  2. 提前获取有效的 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?

  1. 打开目标网站,手动登录账号;
  2. 按 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 后仍跳登录页:
    1. 检查 domain 是否填写正确(最常见错误);
    2. 确认 Token 未过期,重新手动登录获取新 Token;
    3. 部分网站需同时写入多个 Cookie(如 refresh_token、uid),需全部复制写入。
  • LocalStorage 写入无效:
    • 确认执行 JS 脚本前已访问目标域名(LocalStorage 是域名级别的,未加载域名无法写入);
    • 检查 Token 键名是否完全匹配(区分大小写)。

五、进阶优化(可选)

  1. 封装 Token 获取逻辑:若 Token 过期快,可结合 requests 库先调用登录接口获取 Token,再传入 Selenium;
  2. 无头模式运行:添加 chrome_options.add_argument("--headless=new"),浏览器后台运行,不显示界面;
  3. 持久化 Cookie:将 Token 保存到本地文件,避免每次手动复制(如用 json 存储)。

总结

  1. 核心逻辑:通过 Selenium 向浏览器写入登录态 Token(Cookie/LocalStorage),跳过账号密码登录;
  2. 关键前提:获取有效的 Token 并正确配置 domain/ 键名等参数;
  3. 常见坑点:Token 过期、domain 填写错误、未先加载网站域名就写入 Token。

按此指南操作,只需替换 Token 和网站域名,就能快速实现跳过登录直接进入首页的自动化操作。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐