如何用Python+Selenium通过token登录Discord localStorage设置失效求助
问题原因
- 域名上下文不匹配:localStorage是域名隔离的,执行写入脚本时如果浏览器当前页面不是
https://discord.com下的页面(比如默认空白页about:blank),写入的token会归属到当前页面对应域名,自然在Discord域名的存储下无法找到。 - token存储格式不符合要求:Discord要求localStorage中存储的token必须是带双引号包裹的字符串,如果直接写入纯token字符串,Discord前端初始化时会判定格式非法,自动清除该字段,这是写入后找不到字段的核心原因。
- 写入时机过早:如果刚调用
driver.get()加载Discord页面就立刻执行写入,页面上下文还未完成初始化,写入操作会被Discord的初始化逻辑覆盖。
解决方法
按照以下步骤调整代码即可正常写入token实现登录:
- 先加载Discord登录页面,等待页面初始化完成,确保当前上下文属于Discord域名
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import json driver = webdriver.Chrome() # 先加载Discord登录页 driver.get("https://discord.com/login") # 等待登录页元素加载完成,确认上下文就绪 WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "email")))
- 写入token时自动添加双引号包裹,推荐用
json.dumps处理避免转义错误
your_discord_token = "替换为你实际的token值" # 用参数传递的方式执行脚本更安全,避免特殊字符导致的语法错误 driver.execute_script( "window.localStorage.setItem(arguments[0], arguments[1]);", "token", json.dumps(your_discord_token) )
- 写入完成后刷新页面触发Discord的自动登录校验
driver.refresh() # 可选:等待登录成功后的服务器列表加载,确认登录生效 WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, '[aria-label="服务器"]')))
额外说明
你原有代码中的return不影响写入逻辑,localStorage.setItem本身没有返回值,去掉即可。
内容的提问来源于stack exchange,提问作者Hadi Ayoub
相关产品推荐
相关产品推荐

