使用Selenium和Python通过Cookie登录TradingView失败求助
问题排查与修复方案
1. 先确认Cookie保存的正确性
保存Cookie必须在登录TradingView成功后执行,且当前页面处于TradingView域名下。正确的保存代码示例:
import pickle # 登录成功后,获取并保存Cookie cookies = driver.get_cookies() with open('cookies.pkl', 'wb') as f: pickle.dump(cookies, f)
如果保存Cookie时未完成登录,或页面不在TradingView主域,加载的Cookie必然无效。
2. 修正Cookie加载逻辑
你的现有代码存在几个关键细节问题,调整后的代码如下:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import pickle import time self.wait = WebDriverWait(self.driver, 20) # 先访问TradingView的子页面(如仪表盘),确保浏览器处于目标域上下文 self.driver.get("https://www.tradingview.com/chart/") with open('cookies.pkl', 'rb') as f: cookies = pickle.load(f) for cookie in cookies: # 统一修正domain,保留其他原始属性(如path、secure) if 'domain' in cookie: cookie['domain'] = ".tradingview.com" # 移除部分浏览器不支持的字段(如sameSite),避免添加失败 if 'sameSite' in cookie: del cookie['sameSite'] try: self.driver.add_cookie(cookie) except Exception as e: print(f"添加Cookie失败: {e}") # 刷新页面让Cookie生效,而非重复调用get() self.driver.refresh() # 验证登录状态 time.sleep(5) try: # 等待登录后专属元素加载(如用户头像) self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".tv-header__user-menu-button"))) print("登录成功") except: print("登录失败,未检测到登录状态")
调整点说明:
- 加载Cookie前先访问TradingView子页面,确保域上下文完全匹配
- 保留Cookie原始的
path、secure等属性,仅修正domain - 移除
sameSite这类可能导致兼容性问题的字段 - 用
refresh()替代重复get(),避免重置会话
3. 检查Cookie有效性
- 打开浏览器开发者工具(F12),在
Application -> Cookies -> https://www.tradingview.com下,核对加载后的Cookie与保存的是否一致,重点关注sessionid、auth_token这类核心凭证 - 检查
expiry字段,若Cookie已过期,需重新保存新的有效Cookie - 确保浏览器版本与Selenium驱动版本完全匹配,版本不兼容会导致Cookie无法正确注入
4. 排查浏览器设置
- 不要使用无痕模式,无痕模式下Cookie无法持久化
- 确认浏览器未阻止TradingView的Cookie权限
内容的提问来源于stack exchange,提问作者Nuno
相关产品推荐
相关产品推荐

