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

Python Selenium遍历多div元素获取EPA注册号报错求助

问题解决:Selenium遍历product元素收集EPA注册号

核心错误分析

  • XPath文本节点定位无效:Selenium的find_element()无法直接定位/text()节点,必须先定位包含文本的元素,再提取内容。
  • 字符串格式化顺序错误:原代码把格式化操作放在find_element()调用之后,导致传入未替换占位符的原始XPath,自然找不到元素。
  • 冗余嵌套循环:已经通过find_elements(By.CLASS_NAME, "product")拿到所有目标元素,无需再通过索引循环遍历。

修正后的代码

products = driver.find_elements(By.CLASS_NAME, "product")

for product in products:
    try:
        # 基于当前product元素,定位包含EPA号的p节点
        epa_container = product.find_element(By.XPATH, ".//div[@class='mainSection']/p[1]")
        # 提取文本并拆分出注册号
        epa_text = epa_container.text
        epa_reg_no = epa_text.split("EPA Registration #:")[1].strip()
        print(epa_reg_no)
    except Exception as e:
        print(f"处理元素出错: {e}")
        continue

代码说明

  • 相对路径定位:使用.//开头的相对XPath,基于当前product元素定位子节点,避免全局路径的不稳定问题。
  • 文本提取逻辑:通过字符串分割提取冒号后的注册号,比依赖索引更健壮,适配不同格式的文本内容。
  • 直接遍历元素列表:无需依赖结果数的索引计算,直接遍历已获取的products列表,减少出错概率。

额外优化建议

  • 用len(products)直接获取实际找到的元素数量,替代从文本中提取数字的方式,更可靠。
  • 添加显式等待确保元素加载完成:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 等待所有product元素加载完成,超时10秒
products = WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CLASS_NAME, "product"))
)

内容的提问来源于stack exchange,提问作者Karolina Lęcznar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:13:22