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
相关产品推荐
相关产品推荐

