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

SeleniumBase保存与加载Discord Cookies失效问题求助

SeleniumBase加载Discord Cookies无效的解决方案

问题描述

尝试用SeleniumBase保存Discord账号的认证Cookies,登录后Cookies已成功写入文件,但加载Cookies后完全不生效,页面仍要求重新登录。原生Selenium也存在同样问题,请勿提供pickle相关方案(各类方法已尝试),目前仅Playwright可正常实现该功能,需要基于SeleniumBase的有效解决方案。

原测试代码:

from seleniumbase import BaseCase
BaseCase.main(__name__, __file__)

class MyTestClass(BaseCase):
    def test_swag_labs(self):
        self.open("https://discord.com/")
        self.sleep(5)
        # self.save_cookies(name="cookies.txt")
        self.load_cookies(name="cookies.txt")
        self.open("https://discord.com/channels/@me")
        self.sleep(5)

原因分析

Discord的认证机制依赖带有HttpOnly和SameSite属性的Cookies,SeleniumBase默认的save_cookies方法可能未完整保留这些关键属性,或者加载时未正确关联Cookie的Domain和Path,导致Discord无法识别已认证状态。

解决方案

通过手动处理Cookie的保存与加载流程,确保保留所有必要属性,并在加载前绑定正确的域名:

from seleniumbase import BaseCase
import json

BaseCase.main(__name__, __file__)

class DiscordAuthTest(BaseCase):
    def save_discord_cookies(self, file_path="discord_cookies.json"):
        # 获取包含完整属性的所有Cookies
        all_cookies = self.driver.get_cookies()
        # 用JSON格式保存,避免丢失HttpOnly、SameSite等属性
        with open(file_path, "w", encoding="utf-8") as f:
            json.dump(all_cookies, f, indent=2)

    def load_discord_cookies(self, file_path="discord_cookies.json"):
        with open(file_path, "r", encoding="utf-8") as f:
            saved_cookies = json.load(f)
        
        # 先访问Discord根域名,确保Cookie绑定到正确的域
        self.open("https://discord.com/")
        
        # 逐个添加Cookie,处理兼容性问题
        for cookie in saved_cookies:
            # 修正SameSite属性的有效值,避免Selenium报错
            if "sameSite" in cookie:
                if cookie["sameSite"] not in ["Strict", "Lax", "None"]:
                    cookie["sameSite"] = "Lax"
            # 跳过可能导致错误的空值属性
            clean_cookie = {k: v for k, v in cookie.items() if v is not None}
            try:
                self.driver.add_cookie(clean_cookie)
            except Exception as e:
                print(f"跳过无效Cookie [{cookie.get('name')}]: {str(e)}")
        
        # 刷新页面让Cookie生效
        self.refresh()

    def test_discord_auto_login(self):
        # --------------------------
        # 第一次运行时执行以下步骤保存Cookies:
        # self.open("https://discord.com/")
        # self.sleep(15)  # 手动完成登录操作
        # self.save_discord_cookies()
        # --------------------------

        # 加载Cookies并验证登录状态
        self.load_discord_cookies()
        self.open("https://discord.com/channels/@me")
        self.sleep(5)

关键说明

  • 使用driver.get_cookies()获取完整Cookie对象,包含Discord认证所需的所有属性,避免SeleniumBase默认方法的信息丢失
  • 加载Cookies前必须先访问Discord根域名,确保浏览器将Cookie关联到正确的域
  • 处理SameSite属性的兼容性问题,符合Selenium的要求格式
  • 清理空值属性并跳过无效Cookie,避免添加过程中出现异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:53:25