使用Python Selenium如何点击Discord页面底部的配置齿轮按钮
Discord底部设置按钮点击失败解决方案
现有代码问题
- 选择器不稳定:你使用的
div#contents-18-Yxp属于Discord动态生成的带随机后缀的ID,每次版本更新、页面刷新都会变化,完全无法稳定匹配目标元素;a.item选择器过于宽泛,会优先匹配到侧边栏的频道、服务器等无关元素,根本不会点击到底部的设置按钮 - 等待时长不足:Discord单页应用加载资源慢,5秒等待时间大概率不足以完成页面全部渲染,特别是未登录状态下会先跳转登录页,找不到目标按钮
- 缺少登录逻辑:直接访问私有频道地址,未登录状态下会被重定向到登录界面,底部用户操作栏完全不会渲染
解决方法
- 先处理登录逻辑:可以先手动在Chrome里登录Discord后,通过配置用户数据目录复用登录态,避免每次启动都要重新登录
- 换用稳定的属性选择器:目标齿轮按钮的
aria-label属性是固定值,中文界面为用户设置,英文界面为User Settings,用这个属性匹配不会随页面更新失效 - 延长等待时长,优先等待底部操作栏加载完成后再执行点击操作
修正后代码示例
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("--no-sandbox") # 可选:复用本地Chrome的用户数据,保留登录态,路径替换成你自己的Chrome用户数据路径 # option.add_argument(r"user-data-dir=C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data") driver = webdriver.Chrome(options=option) driver.get("https://discord.com/channels/395582581124497408/395582581124497412") # 延长等待时长到20秒,给页面足够加载时间 wait = WebDriverWait(driver, 20) # 直接匹配目标设置按钮,中文界面用下面这行 wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[aria-label="用户设置"]'))).click() # 英文界面替换成下面这行 # wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[aria-label="User Settings"]'))).click()
目标按钮参考截图

内容的提问来源于stack exchange,提问作者user16532511
相关产品推荐
相关产品推荐

