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

Selenium Python中同级元素可定位但目标元素报NoSuchElement错误如何解决

问题成因
  • 核心原因:Selenium的find_element_by_class_name()方法仅支持传入单个类名作为参数,你传入了空格分隔的5个组合类名,不符合方法要求,直接触发匹配失败。
  • 次要原因:你代码中写的类名字符串中间手动插入了换行符,引入了多余的空白字符,和元素实际的class属性值无法完全匹配。
  • 补充:你提到同级元素可正常定位,可排除元素未加载完成的问题,无需额外增加等待逻辑。
修复方案

提供3种可直接使用的解决方案,优先推荐第一种:

  1. 仅使用专属类名定位
    genericTrackCount__duration是该元素独有的业务类名,其余sc-开头的是平台通用样式类,直接用单个类名即可精准匹配(注:Selenium 4.0+已废弃旧版find_element_by_*写法,以下统一使用官方推荐的By类实现):
from selenium.webdriver.common.by import By

try:
    tmp = driver.find_element(By.XPATH, "//div[@class='fullHero__tracksSummary']") 
    # 仅传入单个专属类名
    duration = tmp.find_element(By.CLASS_NAME, "genericTrackCount__duration").get_attribute('textContent')
    print(duration)
except:
    print("None")
  1. 使用CSS选择器匹配多类名
    如果需要同时校验多个类名确保定位精准,用CSS选择器实现:
duration = tmp.find_element(By.CSS_SELECTOR, ".genericTrackCount__duration.sc-type-small.sc-text-body.sc-type-light.sc-text-secondary").text
  1. 使用XPath匹配类名
    也可以通过XPath的包含匹配实现定位:
duration = tmp.find_element(By.XPATH, './/div[contains(@class,"genericTrackCount__duration")]').text

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:04