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

使用Python Selenium为csfloat.com添加Cookie后页面刷新仍无法保持登录,及添加Authorization header的技术咨询

Python Selenium为csfloat.com添加Cookie后页面刷新仍无法保持登录,及添加Authorization header的技术咨询

问题背景

我是Python新手,目前在做网站认证相关的工作。我遇到一个问题:通过Selenium添加Cookie后(已经确认浏览器中能看到这些Cookie),页面刷新后网站不会保持登录状态。我用requests包使用相同的Cookie时,认证完全正常,但这里我不能用requests,因为这个网站严重依赖JavaScript渲染的内容,requests处理不了。

我的代码如下:

import json
import time
from selenium import webdriver

driver = webdriver.Chrome()

# 2. Download cookies from file
def load_cookies(filename):
    try:
        with open(filename, "r", encoding="utf-8") as file:
            return json.load(file)
    except Exception as e:
        print(f"❌ Error for download cookies: {e}")
        return []

 # add cookie
def add_cookies(driver, cookies):
    driver.get("https://csfloat.com")
    time.sleep(25)

    for cookie in cookies:
        selenium_cookie = {
            'name': cookie['name'],
            'value': cookie['value']
        }

        try:
            driver.add_cookie(selenium_cookie)
            print(selenium_cookie)
        except Exception as e:
            print(f"⚠️ Can not to add cookie {cookie['name']}: {str(e)}")
        finally:
            print('Cookies loaded')

    time.sleep(25)
    # refresh site for post cookies
    driver.get("https://csfloat.com")
    time.sleep(60)
    driver.save_screenshot("auth_check.png")

# 4. Using
cookies = load_cookies("cookie.json")
if cookies:
    add_cookies(driver, cookies)
    print("Site content:", driver.page_source)

driver.quit()

另外,这个网站支持通过Authorization header登录,但我还没找到在Selenium中添加这个请求头的方法。

我的问题:

  1. 为什么在Selenium中刷新页面后网站不保留认证状态,即使Cookie已经存在?
  2. 如何在Selenium中添加Authorization header来直接认证?

要是我遗漏了什么细节或者需要澄清的地方,请告诉我——这是我第一次在这里发帖,感谢你的耐心!


问题解答

问题1:添加Cookie后刷新仍无法保持登录的原因及解决

导致这个问题的核心原因大多和Cookie参数不完整、添加时机错误有关,结合csfloat.com的特性,具体分析和修改建议如下:

常见原因

  1. Cookie关键参数缺失:你当前只传递了name和value,但csfloat.com的Cookie需要domain、path、secure、sameSite这些参数才能被浏览器识别为有效Cookie。比如缺失domain=.csfloat.com的话,浏览器会认为这个Cookie不属于当前站点,刷新后自动失效。
  2. 添加时机错误:你先打开网站再等待25秒加Cookie,此时网站可能已经完成了初始认证检查,或者生成了冲突的本地Cookie,导致你添加的Cookie无法覆盖原有逻辑。
  3. 网站额外认证机制:csfloat.com可能依赖localStorage/sessionStorage中的令牌、浏览器指纹匹配(比如特定User-Agent),仅靠Cookie无法完成完整认证。

代码修改建议

完善Cookie参数、调整添加时机,修改后的add_cookies函数如下:

def add_cookies(driver, cookies):
    # 先打开空白页,避免页面提前加载触发认证检查
    driver.get("about:blank")
    # 先访问一次目标站,获取站点的Cookie上下文
    driver.get("https://csfloat.com")
    time.sleep(3)
    # 清空现有Cookie,避免冲突
    driver.delete_all_cookies()

    for cookie in cookies:
        # 从原Cookie中提取所有必要参数,适配Selenium格式
        selenium_cookie = {
            'name': cookie['name'],
            'value': cookie['value'],
            'domain': cookie.get('domain', '.csfloat.com'),
            'path': cookie.get('path', '/'),
            'secure': cookie.get('secure', True),
            'sameSite': cookie.get('sameSite', 'Lax')
        }
        # 处理expiry参数,需转为整数格式
        if 'expiry' in cookie:
            selenium_cookie['expiry'] = int(cookie['expiry'])

        try:
            driver.add_cookie(selenium_cookie)
            print(f"✅ 成功添加Cookie: {selenium_cookie['name']}")
        except Exception as e:
            print(f"⚠️ 无法添加Cookie {cookie['name']}: {str(e)}")

    print('所有Cookie处理完成')
    time.sleep(2)
    # 用refresh而非重新get,避免触发站点的初始检查
    driver.refresh()
    time.sleep(5)
    driver.save_screenshot("auth_check.png")

问题2:在Selenium中添加Authorization header的方法

Selenium本身没有直接修改请求头的API,但可以通过Chrome DevTools Protocol (CDP) 实现,这是目前最稳定的方案:

def add_authorization_header(driver, auth_token):
    # 先打开空白页初始化CDP
    driver.get("about:blank")
    # 通过CDP设置全局Authorization请求头
    driver.execute_cdp_cmd(
        "Network.setExtraHTTPHeaders",
        {"headers": {"Authorization": f"Bearer {auth_token}"}}
    )
    # 再访问目标站点,所有请求都会携带这个header
    driver.get("https://csfloat.com")
    time.sleep(5)
    driver.save_screenshot("auth_header_check.png")

注意事项

  • 确认csfloat.com的Authorization格式:通常是Bearer <token>,你可以从之前能用的requests请求中复制完整的header值。
  • 这个方法会给所有后续请求添加header,如果需要针对特定请求设置,可以结合CDP的Network.requestWillBeSent事件做更精细的控制。

备注:内容来源于stack exchange,提问作者Tw1lighT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:19:31