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

Selenium XPATH:遍历类名不同的父元素子元素的解决方法

解决方案

原代码的问题

  1. 父元素定位错误:你要遍历的目标父容器是_1LiCn类的div,但代码里定位的是另一个class的div,根本没拿到正确的父元素
  2. 单数方法无法遍历:find_element只会返回单个元素,没法用for循环遍历,必须用find_elements复数方法获取多个元素
  3. 全局XPATH匹配错误:子元素里的//td会从整个页面查找元素,不是当前子元素范围内的,必然会拿到重复或错误的内容

修正后的实现方案

核心思路:先定位正确的父容器,再获取它下面的所有子元素,遍历的时候用相对XPATH在当前子元素范围内查找目标节点,同时加异常处理避免无目标节点时程序崩溃。

from selenium.common.exceptions import NoSuchElementException

# 1. 定位目标父元素
parent_container = wd.find_element(By.XPATH, "//div[@class='_1LiCn']")

# 2. 获取父元素下的所有子元素(直接子元素用"./child::*",所有后代子元素用".//*")
child_elements = parent_container.find_elements(By.XPATH, ".//*")

# 3. 遍历每个子元素提取信息
for element in child_elements:
    try:
        # 用相对路径".//"限制在当前element下查找目标td
        mrp = element.find_element(By.XPATH, ".//td[@data-qa='productPrice']").text.strip()
        # 这里写处理MRP的逻辑,比如打印或存入列表
        print(f"提取到MRP: {mrp}")
    except NoSuchElementException:
        # 部分子元素可能没有这个td节点,直接跳过
        continue

额外优化技巧

  • 如果知道子元素的标签类型(比如都是div),可以把.//*改成.//div,缩小查找范围提升效率
  • 如果子元素有共同的结构特征(比如都属于某个层级或带有特定属性),可以优化XPATH更精准,比如./div[contains(@class, 'pack-item')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:15:35