You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium使用get(url)跳转时丢失Cookie与登录会话问题(Python)

问题根因

你遇到的登录态丢失问题核心原因是传入get()方法的URL缺失HTTP/HTTPS协议前缀:

  • 不带协议的地址(如www.abcdefg.com)会被Selenium判定为非标准网络地址,每次调用都会生成独立的临时浏览上下文,同域名下的Cookie、LocalStorage等站点数据完全不共享,跳转时自然会触发登出。
  • 次要可能原因:默认启动的Firefox实例使用临时匿名配置,浏览器退出后所有数据自动清空,无法跨脚本保留登录态;部分站点SameSite Cookie策略校验严格,域名不匹配时会主动清除会话。
可行解决方案

1. 修正URL格式(90%场景下可直接解决问题)

所有传入get()的URL必须补全https://或http://协议前缀,不要省略:

# 错误写法
url = 'www.abcdefg.com'
driver.get('www.abcdefg.com/1234abcd')

# 正确写法
url = 'https://www.abcdefg.com'
driver.get('https://www.abcdefg.com/1234abcd')

修正后同一会话内的同站跳转将自动复用已有站点数据,登录态会正常保留,无需额外操作Cookie。

2. 配置持久化浏览器配置(跨脚本保留登录态可选)

如果需要多次启动脚本都不用重复登录,可以给Firefox指定固定的本地配置目录,所有浏览数据会持久化存储在该目录下:

from selenium.webdriver.firefox.options import Options

firefox_opts = Options()
# 替换为本地任意空文件夹路径即可,不要使用包含中文/特殊字符的路径
firefox_opts.add_argument('-profile')
firefox_opts.add_argument('D:/selenium/firefox_profile')

driver = webdriver.Firefox(options=firefox_opts)

第一次运行完成登录后,后续启动脚本会直接读取本地存储的会话信息,无需重复登录。

3. 手动存取Cookie(兜底方案)

如果上述配置仍存在会话丢失问题,可以在登录完成后手动导出Cookie,跳转或重启后手动注入:

import json

# 登录成功、页面加载完成后导出Cookie到本地文件
cookies = driver.get_cookies()
with open('site_cookies.json', 'w') as f:
    json.dump(cookies, f)

# 跳转/重启后加载Cookie的逻辑
# 注意:添加Cookie前必须先访问一次目标域名,否则会触发域名不匹配错误
driver.get('https://www.abcdefg.com')
with open('site_cookies.json', 'r') as f:
    cookies = json.load(f)
for cookie in cookies:
    # 部分站点返回的expiry字段格式不符合Selenium要求,可直接删除
    if 'expiry' in cookie:
        del cookie['expiry']
    driver.add_cookie(cookie)

# Cookie注入完成后再跳转到目标业务页面
driver.get('https://www.abcdefg.com/1234abcd')
修正后的复现代码
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 补全HTTPS协议前缀
url = 'https://www.abcdefg.com'
driver = webdriver.Firefox()
driver.get(url)

# 省略用户名密码输入、提交登录的逻辑
# ...

# 等待登录后页面元素加载完成
WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CLASS_NAME, "goods-block")))

# 跳转地址同样补全协议前缀
driver.get('https://www.abcdefg.com/1234abcd')

优先测试URL修正方案,绝大多数同站跳转丢登录态的问题都是协议缺失导致的,不需要额外做Cookie读写操作。

内容的提问来源于stack exchange,提问作者Jing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:03:24