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

如何使用Selenium Python选择Discord下拉菜单选项

解决Discord中Selenium自动选择/bump下拉选项的问题

问题分析

你之前的操作失效主要原因:

  • 用time.sleep()静态等待,元素可能未完全渲染就执行后续操作,导致定位失败
  • 坐标点击完全依赖固定窗口尺寸,分辨率或窗口大小变化就会失效
  • 没有针对Discord动态渲染的下拉菜单使用稳定的定位策略和显式等待

可行解决方案

基于你提供的HTML结构,用显式等待配合语义化属性定位就能稳定完成操作:

1. 稳定的元素定位方式

从HTML结构看,下拉菜单是role="listbox"的容器,第一个选项自带aria-selected="true"属性,也可以通过来源文本DISBOARD精准定位,以下是两种可靠的XPATH:

  • 定位第一个选项://div[@role='listbox']//div[@role='option'][1]
  • 定位DISBOARD的/bump选项://div[@role='listbox']//div[contains(text(), 'DISBOARD')]/ancestor::div[@role='option']

2. 用显式等待替代静态sleep

显式等待会等待元素满足可点击条件后再执行操作,比固定时长的sleep更适配动态页面。

修改后的完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import time

url = "<channel url>"

options = webdriver.ChromeOptions()
options.add_argument(r"--user-data-dir=C:\Users\Fahad\AppData\Local\Google\Chrome\User Data")
options.add_argument(r'--profile-directory=Profile 3')
driver = webdriver.Chrome(options=options)

# 打开Discord频道
driver.get(url)

# 显式等待聊天输入框加载完成并可交互
wait = WebDriverWait(driver, 20)
input_ele = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[@role="textbox"]')))
input_ele.send_keys("/bump")

# 显式等待下拉菜单第一个选项加载完成并可点击
first_option = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[@role="listbox"]//div[@role="option"][1]')))
# 点击选项,若遇元素遮挡可改用ActionChains模拟点击
first_option.click()

# 可选:等待命令发送完成
time.sleep(2)

# 按需关闭浏览器
# driver.quit()

额外注意事项

  • 确保ChromeDriver版本与Chrome浏览器版本一致,避免兼容性问题
  • 若遇到元素被遮挡,可替换点击逻辑为:
    actions = ActionChains(driver)
    actions.move_to_element(first_option).click().perform()
    
  • Discord的类名可能动态变化,但role这类语义化属性通常不会轻易修改,优先用这类属性定位更稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:47:00