Selenium Python中同级元素可定位但目标元素报NoSuchElement错误如何解决
问题成因
- 核心原因:Selenium的
find_element_by_class_name()方法仅支持传入单个类名作为参数,你传入了空格分隔的5个组合类名,不符合方法要求,直接触发匹配失败。 - 次要原因:你代码中写的类名字符串中间手动插入了换行符,引入了多余的空白字符,和元素实际的class属性值无法完全匹配。
- 补充:你提到同级元素可正常定位,可排除元素未加载完成的问题,无需额外增加等待逻辑。
修复方案
提供3种可直接使用的解决方案,优先推荐第一种:
- 仅使用专属类名定位
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")
- 使用CSS选择器匹配多类名
如果需要同时校验多个类名确保定位精准,用CSS选择器实现:
duration = tmp.find_element(By.CSS_SELECTOR, ".genericTrackCount__duration.sc-type-small.sc-text-body.sc-type-light.sc-text-secondary").text
- 使用XPath匹配类名
也可以通过XPath的包含匹配实现定位:
duration = tmp.find_element(By.XPATH, './/div[contains(@class,"genericTrackCount__duration")]').text
内容的提问来源于stack exchange,提问作者Nguyen Thai
相关产品推荐
相关产品推荐

