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

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

修复Selenium登录ytmonster.net的错误问题

问题代码

# Importing everything #
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# PATH + Driver Setup #
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)

# Getting All Requirements #
driver.get("https://ytmonster.net/login")
time.sleep(5)
imputUsername = driver.find_element(By.ID, "inputUsername")
imputPassword = driver.find_element(By.ID, "inputPassword")
linkClick = driver.find_element(By.CLASS_NAME, "btn btn-success")

# Executing script #
imputUsername.send_keys("mymail@gmail.com")
imputPassword.send_keys("mypassword")
linkClick.click

错误信息

C:\Users\Xera\Desktop\YtMonster Bot.py:9: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome(PATH)

DevTools listening on ws://127.0.0.1:51847/devtools/browser/a848e7ed-d31d-4415-96c5-1a28a4729a17
[8664:1220:0815/155348.366:ERROR:device_event_log_impl.cc(214)] [15:53:48.364] Bluetooth: bluetooth_adapter_winrt.cc:1074 Getting Default Adapter failed.
Traceback (most recent call last):
  File "C:\Users\Xera\Desktop\YtMonster Bot.py", line 16, in <module>
    linkClick = driver.find_element(By.CLASS_NAME, "btn btn-success")
  File "C:\Users\Xera\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 856, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\Xera\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 434, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Xera\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 243, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".btn btn-success"}
  (Session info: chrome=104.0.5112.81)
Stacktrace:
Backtrace:
        Ordinal0 [0x00CA78B3+2193587]
        Ordinal0 [0x00C40681+1771137]
        Ordinal0 [0x00B541A8+803240]
        Ordinal0 [0x00B824A0+992416]
        Ordinal0 [0x00B8273B+993083]
        Ordinal0 [0x00BAF7C2+1177538]
        Ordinal0 [0x00B9D7F4+1103860]
        Ordinal0 [0x00BADAE2+1170146]
        Ordinal0 [0x00B9D5C6+1103302]
        Ordinal0 [0x00B777E0+948192]
        Ordinal0 [0x00B786E6+952038]
        GetHandleVerifier [0x00F50CB2+2738370]
        GetHandleVerifier [0x00F421B8+2678216]
        GetHandleVerifier [0x00D317AA+512954]
        GetHandleVerifier [0x00D30856+509030]
        Ordinal0 [0x00C4743B+1799227]
        Ordinal0 [0x00C4BB68+1817448]
        Ordinal0 [0x00C4BC55+1817685]
        Ordinal0 [0x00C55230+1856048]
        BaseThreadInitThunk [0x766A6739+25]
        RtlGetFullPathName_UEx [0x779F90AF+1215]
        RtlGetFullPathName_UEx [0x779F907D+1165]

修复方案

1. 解决executable_path弃用警告

Selenium 4.x已弃用直接传入驱动路径的方式,需用Service类加载驱动:

  • 导入from selenium.webdriver.chrome.service import Service
  • 实例化Service对象并传入驱动路径,再传给webdriver.Chrome

2. 修复按钮元素定位失败问题

By.CLASS_NAME仅支持单个类名匹配,无法处理空格分隔的多类名(btn btn-success是两个独立类),需改用:

  • By.CSS_SELECTOR,语法为.btn.btn-success(点号连接多个类)
  • 或By.XPATH,语法为//button[@class='btn btn-success']

3. 修复点击方法调用错误

linkClick.click是方法引用,需添加括号执行调用:linkClick.click()

4. 替换不可靠的固定延迟(推荐)

用显式等待替代time.sleep,确保元素加载完成后再操作,提升稳定性:

  • 导入from selenium.webdriver.support.ui import WebDriverWait和from selenium.webdriver.support import expected_conditions as EC

修复后的完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 驱动路径与Service设置,加r避免转义字符问题
PATH = r"C:\Program Files (x86)\chromedriver.exe"
service = Service(PATH)
driver = webdriver.Chrome(service=service)

driver.get("https://ytmonster.net/login")

# 显式等待元素加载,超时时间10秒
wait = WebDriverWait(driver, 10)
imputUsername = wait.until(EC.presence_of_element_located((By.ID, "inputUsername")))
imputPassword = wait.until(EC.presence_of_element_located((By.ID, "inputPassword")))
linkClick = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".btn.btn-success")))

# 执行登录操作
imputUsername.send_keys("mymail@gmail.com")
imputPassword.send_keys("mypassword")
linkClick.click()

# 操作完成后记得关闭驱动
# driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:24:16