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

使用Selenium提取印度新冠网站数据时Xpath无法定位元素的问题求助

解决Selenium提取Covid19India网站数据时的元素定位问题

我看了你遇到的问题——想从Covid19India网站顶部栏提取确诊、现存、康复、死亡的每日和累计数据,但一直碰到元素找不到的错误,哪怕加了sleep也没用。咱们来一步步解决这个问题:

错误根源分析

你代码里的核心问题出在XPath的使用方式上:

  • 你已经通过find_elements_by_class_name('Level')拿到了每个统计项的容器元素,但后续用的XPath是绝对路径(从#root开始),这完全忽略了当前item的上下文,相当于每次都从整个页面重新找元素,自然会定位失败。
  • 另外,sleep(5)是固定等待,不如显式等待可靠——有时候页面加载慢,5秒不够;有时候加载快,白等时间。

修正后的代码

这里给你调整后的代码,解决了定位问题,还优化了等待逻辑:

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

PATH = 'ChromeDriver/chromedriver'
driver = webdriver.Chrome(PATH)
driver.get('https://www.covid19india.org/')

try:
    # 显式等待Level元素加载完成,最多等10秒
    stats_containers = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.CLASS_NAME, 'Level'))
    )
    
    # 四个统计项的顺序是:确诊、现存、康复、死亡
    stats_labels = ["确诊", "现存", "康复", "死亡"]
    
    for idx, container in enumerate(stats_containers):
        # 用相对XPath定位当前容器内的h4(每日数据)和h1(累计数据)
        daily_data = container.find_element(By.XPATH, './/h4').text
        cumulative_data = container.find_element(By.XPATH, './/h1').text
        print(f"{stats_labels[idx]}: 新增 {daily_data} | 累计 {cumulative_data}")
        
finally:
    driver.quit()

关键改进点说明

  1. 用显式等待替代固定sleep:WebDriverWait会等到目标元素出现再继续执行,比硬等时间更灵活可靠,避免因加载速度波动导致的错误。
  2. 使用相对XPath:开头的.表示从当前元素(也就是每个container)开始查找,这样就能精准定位到每个统计项内部的h4和h1,而不会跑到页面其他地方去找。
  3. 添加统计项标签:利用enumerate和预设的标签列表,让输出结果更清晰,一眼就能区分每个数据对应的类别。

额外提示

如果后续网站结构有变化(比如class名或元素顺序调整),你可以通过浏览器的开发者工具(F12)重新检查元素结构,调整定位方式。比如如果h4有特定的class(比如DailyCount),也可以用By.CLASS_NAME来定位,比XPath更直观:

daily_data = container.find_element(By.CLASS_NAME, 'DailyCount').text
cumulative_data = container.find_element(By.CLASS_NAME, 'TotalCount').text

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:17:46