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

Selenium使用By.CLASS_NAME定位元素时NoSuchElementException的解决方法

解决Selenium NoSuchElementException 定位元素失败问题

原代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

s=Service("C:\selenium driver\chromedriver.exe")
driver = webdriver.Chrome(service=s)

driver.get("https://www.selenium.dev/selenium/web/web-form.html")

driver.implicitly_wait(5)

submit_button = driver.find_element(By.CLASS_NAME, "btn btn-outline-primary mt-3")
submit_button.click()

报错信息

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".btn btn-outline-primary mt-3"}
  (Session info: chrome=109.0.5414.120)

问题分析

By.CLASS_NAME仅支持单个类名匹配,不能传入多个空格分隔的类名。当你传入"btn btn-outline-primary mt-3"时,Selenium会将其识别为一个完整的类名去查找,但页面中不存在拥有该完整类名的元素,因此抛出定位失败异常。

解决方案

有两种可行的修正方式:

方式1:使用CSS_SELECTOR匹配多类名

通过.连接多个类名,匹配同时拥有这些类的元素(注意类名之间无空格,空格代表后代选择器):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

s=Service("C:\selenium driver\chromedriver.exe")
driver = webdriver.Chrome(service=s)

driver.get("https://www.selenium.dev/selenium/web/web-form.html")

driver.implicitly_wait(5)

# 用CSS选择器匹配多个类名
submit_button = driver.find_element(By.CSS_SELECTOR, ".btn.btn-outline-primary.mt-3")
submit_button.click()

方式2:使用单个唯一类名

如果目标元素的某个类名是唯一的,直接用By.CLASS_NAME传入该单个类名即可:

# 选择唯一的类名"btn-outline-primary"
submit_button = driver.find_element(By.CLASS_NAME, "btn-outline-primary")
submit_button.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:05:16