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

Selenium设置隐式等待后仍报NoSuchElementException错误原因排查

问题原因分析
  • 核心报错NoSuchElementException的首要原因是find_element_by_class_name方法使用错误:该方法仅支持传入单个class名称,你传入的是空格分隔的多组class值,Selenium会把整串字符串当成单个class名匹配,自然找不到对应元素。多class匹配需要改用CSS选择器实现。
  • 你调用的是find_element(单数方法),返回结果是单个WebElement对象,无法直接用for循环遍历,需要改为调用find_elements(复数方法)获取元素列表。
  • 代码中存在两处弃用警告,是Selenium 4+版本的语法调整导致:
    1. executable_path参数已弃用,需要先实例化Service对象传入chromedriver路径
    2. find_element_by_*系列方法已弃用,统一改为find_element(By.定位方式, 定位值)的写法
  • 你当前写的公司名称XPath是固定id的绝对路径,循环遍历每个条目时都会匹配到第一个符合条件的元素,无法拿到每个条目对应的公司名,需要改为相对路径写法。
  • 日志中出现的蓝牙、USB相关报错是Chrome浏览器的系统级日志输出,不影响代码运行,可直接忽略。
修正后可运行代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

url = 'https://www.checkatrade.com/search?page=1&categoryId=1164&location=London'
# 替换为你的chromedriver路径
s = Service(r'D:\Web_Scraping\chromedriver_win32\chromedriver.exe')
driver = webdriver.Chrome(service=s)

driver.get(url)
driver.implicitly_wait(20)

# 多class匹配改用CSS选择器,使用find_elements获取元素列表
items = driver.find_elements(By.CSS_SELECTOR, '.sc-8keyp7-0.kbPUFb.sc-1a2v1qv-0.gwBNSh.sc-3jeiz1-1.bfuahU')

for item in items:
    # 相对路径开头加.,匹配当前item下的h2元素,避免每次都匹配全局第一个元素
    company = item.find_element(By.XPATH, './/h2').text
    print(company)
    
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:06:05