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

Selenium报错:WebDriver对象无find_element_by_class_name属性

报错产生原因
  • 核心是API版本不兼容:Selenium 4.3.0及以上正式版本已经彻底移除了find_element_by_class_name、find_element_by_id等所有find_element_by_*系列旧方法,你当前环境安装的是新版Selenium,调用已删除的方法就会抛出属性不存在的报错。
  • 元素定位参数完全错误:目标div标签里,Fresh是元素展示的文本内容,不是class属性值,该元素实际class值为label-31sIdr,就算旧API没有被移除,传入'Fresh'作为class搜索参数也定位不到元素。
  • 代码里还存在几个必然导致运行失败的隐患:
    • 手动指定本地chromedriver路径的初始化方式在新版Selenium中已经过时,极易出现驱动与Chrome浏览器版本不匹配的报错。
    • 初始化浏览器驱动后没有调用get()方法打开目标Discord频道页面,直接在浏览器默认空白页查找元素不可能成功。
    • 目标元素的class名label-31sIdr带随机哈希后缀,是Discord前端CSS Modules生成的动态类名,页面迭代、刷新后后缀大概率会变化,直接用class定位稳定性极差。
修复方案
  1. 导入新版Selenium定位必需的By类:from selenium.webdriver.common.by import By
  2. 替换旧版驱动初始化逻辑,用Selenium内置的Selenium Manager自动匹配对应版本的ChromeDriver,不需要手动下载驱动、写本地路径。
  3. 驱动初始化完成后先打开目标Discord页面,预留时间完成账号登录(Discord频道内容必须登录后才能访问)。
  4. 替换旧的元素定位写法,优先用稳定性更高的XPath按元素文本匹配定位,避开动态class的失效问题,新版Selenium统一使用find_element(定位方式, 定位值)的语法。
修改后参考代码
from selenium import webdriver
from selenium.webdriver.common.by import By
import requests
import time

# 新版Selenium自动匹配对应版本ChromeDriver,无需手动指定路径
driver = webdriver.Chrome()
# 替换为你要操作的Discord频道实际地址
driver.get("https://discord.com/channels/你的服务器ID/目标频道ID")
# 预留时间手动完成账号登录,也可以自行替换为登录态持久化逻辑
time.sleep(15)

payload = {
    'content': "pls pm"
}

header = {
    'authorization': 'xxxxx'
}

for i in range(1000):
    r = requests.post('https://discord.com/api/v9/channels/991579455376072775/messages', data=payload, headers=header)
    time.sleep(1.5)
    # 通过XPath精确匹配文本为Fresh的div元素,不受动态class影响
    button = driver.find_element(By.XPATH, '//div[text()="Fresh"]')
    button.click()
    time.sleep(30)

补充说明:如果坚持要用class定位,写法为driver.find_element(By.CLASS_NAME, 'label-31sIdr'),但因为Discord的class是动态生成的,这种写法随时可能失效,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:51:25