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

Selenium定位元素失败:访问ESPNcricinfo球员页面报NoSuchElementException

解决Selenium获取ESPNcricinfo球员名字的NoSuchElementException问题

问题根源

  • 绝对XPATH完全依赖页面固定层级结构,一旦网站微调布局就会失效
  • 固定时长的time.sleep无法精准匹配元素加载节奏,容易出现元素未就绪就执行查找的情况
  • 弹窗处理后未等待目标元素加载完成就直接执行查找操作

修复后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器实例
driver = webdriver.Firefox()
driver.get('https://www.espncricinfo.com/player/aamer-jamal-793441')
driver.maximize_window()

try:
    # 显式等待弹窗并关闭(兼容弹窗延迟加载的情况)
    cancel_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, 'wzrk-cancel'))
    )
    cancel_btn.click()
    
    # 用相对定位+显式等待获取球员全名,避免依赖固定页面结构
    fullname_element = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH, '//div[@data-testid="player-header"]//h5'))
    )
    print(fullname_element.text)
finally:
    # 确保浏览器正常关闭,避免资源占用
    driver.quit()

核心优化说明

  • 替换绝对XPATH为语义化定位:通过data-testid属性定位父容器,再查找内部的名字元素,这种方式不受页面层级变化影响
  • 用显式等待替代固定休眠:WebDriverWait会等待元素满足可见/可点击条件后再执行操作,比time.sleep更高效且稳定
  • 增加资源回收逻辑:try-finally确保无论是否报错,浏览器都会正常关闭

备选定位方案

如果上述定位仍有问题,可尝试以下更精准的方式:

  • 通过文本内容定位:(By.XPATH, '//h5[contains(text(), "Aamer Jamal")]')
  • 通过唯一class定位:(By.CSS_SELECTOR, 'h5.ds-text-title-l.ds-font-bold')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:01:19