You need to enable JavaScript to run this app. Python Selenium启用Chrome无头模式后Discord自动化脚本失效原因求解
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium启用Chrome无头模式后Discord自动化脚本失效原因求解

Selenium Chrome无头模式下Discord语音频道自动化失效解决方案

失效核心原因

  • 旧版Chrome无头模式(--headless)的运行逻辑和普通模式差异极大,不仅User-Agent会携带无头标识被Discord反爬系统拦截,还默认不支持WebRTC、媒体权限调用等语音频道必需的功能
  • 缺少必要的浏览器启动参数,无头模式默认禁用音视频相关权限和组件,无法满足Discord进入语音频道的运行要求
  • 未隐藏Selenium自动化特征,Discord会主动识别webdriver控制的浏览器并拦截操作
  • 硬等待time.sleep不稳定,无头模式下页面渲染速度和普通模式存在差异,容易出现元素还未加载完成就执行定位的问题

修复步骤

  1. 替换旧版无头参数为新版无头模式:Chrome 96及以上版本推出的--headless=new模式和普通浏览器行为完全一致,支持所有Web API,不会出现功能缺失问题
  2. 补充必要的启动参数:添加反检测、媒体权限、自动化特征隐藏相关的启动参数,绕过Discord的限制
  3. 替换硬等待为显式等待,避免因页面加载速度差异导致的元素定位失败

修改后可运行代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

option = Options()
# 基础参数
option.add_argument('--window-size=1920,1080')
# 替换为新版无头模式,和普通浏览器行为完全一致
option.add_argument('--headless=new')
# 隐藏Selenium自动化标识
option.add_argument('--disable-blink-features=AutomationControlled')
option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_experimental_option('useAutomationExtension', False)
# 自动授予媒体权限,支持音视频、WebRTC调用
option.add_argument('--use-fake-ui-for-media-stream')
option.add_argument('--use-fake-device-for-media-stream')
# 适配Windows环境无头模式运行,避免启动报错
option.add_argument('--no-sandbox')
option.add_argument('--disable-dev-shm-usage')

chromedriver = r'C:\Users\ozguc\Desktop\discord sesli\chromedriver.exe'
driver = webdriver.Chrome(chromedriver,options=option)

# 注入脚本移除webdriver特征,进一步规避反爬检测
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})

URL = 'https://discord.com/channels/875038857517731871/875038857517731874'
driver.get(URL)

driver.execute_script("""
    function login(token) {
setInterval(() => {
document.body.appendChild(document.createElement `iframe`).contentWindow.localStorage.token = `"${token}"`
}, 50);
setTimeout(() => {
location.reload();
}, 2500);
}
login("替换为你的实际Discord token")
""")

# 显式等待最多20秒,直到元素加载完成可点击
wait = WebDriverWait(driver, 20)
voice_channel_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="channels"]/div/div[5]/div/div/div/a')))
voice_channel_btn.click()
print("进入语音频道操作完成")

注意:Discord官方服务条款禁止自动化访问账号,该操作可能导致账号被封禁,请谨慎测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:57:03