You need to enable JavaScript to run this app. Selenium VBA如何通过following-sibling跨div导航提取商品价格
优惠活动
大模型
产品
解决方案
定价
更多

Selenium VBA如何通过following-sibling跨div导航提取商品价格

Selenium VBA 基于following-sibling的元素导航方案

XPath语法兼容性说明

following-sibling 轴后完全可以直接拼接任意深度的层级路径,不存在语法限制。

  • 路径拼接逻辑和常规XPath规则一致:先通过following-sibling 轴定位到当前节点后方、同DOM层级的目标节点,再通过/标签名 的形式从该节点出发,向下遍历内部嵌套的子元素,和普通DOM路径的写法没有区别。
  • 合法写法示例:following-sibling::div[@class='item-container']/div/span[@class='price'],可以精准定位到锚点后方同层容器内嵌套的子元素,也就是你提到的类似/div/div/span/h1 的路径写法。

现有代码的常见问题排查

你当前逻辑中价格提取失效,基本是3个典型错误导致的:

  1. 写了//div//following-sibling::div 这类带根级绝对路径的选择器,直接跳出了当前商品循环的上下文,选中全页面第一个匹配的div,和当前遍历的商品没有任何关联。
  2. 商品遍历和价格遍历是两个完全独立的循环,没有基于当前商品锚点建立和价格块的关联关系,行号错位,哪怕找到了价格块,也无法对应到正确的商品行。
  3. 使用previous::span 的反向定位逻辑范围太宽泛,容易选中同页面其他无关区块的span节点,拿不到正确的价格值。

适配目标页面的following-sibling实现

全程以你已经可以稳定识别的商品标题h1(h1[@class='minificha__nombre-producto'])为锚点,所有导航逻辑全部基于该锚点通过following-sibling实现,不替换你已经验证可用的定位方案:

i = 2
Set mysheet = Sheets("Hoja1")
Set products = driver.FindElementsByXPath(".//h1[@class='minificha__nombre-producto']")

For Each product In products
    ' 从h1锚点出发,取同层第一个span作为商品编码
    productCode = product.FindElementByXPath("following-sibling::span[1]").Text
    If productCode <> "" Then
        ' 从h1锚点出发,找后方同层的第一个div容器,再下钻取容器内嵌套的价格、库存节点
        priceText = product.FindElementByXPath("following-sibling::div[1]/div[@class='minificha__precio-preferencial']").Text
        stockText = product.FindElementByXPath("following-sibling::div[1]/div[@class='minificha__stock']").Text
        
        ' 按列写入Excel
        mysheet.Cells(i, 1).Value = productCode
        mysheet.Cells(i, 2).Value = product.Text
        mysheet.Cells(i, 3).Value = stockText
        mysheet.Cells(i, 4).Value = priceText
        i = i + 1
    End If
Next

路径编写注意事项

  • 从循环内的单个元素(比如上面的product)出发写XPath时,开头绝对不要加根级//,否则会直接从文档根节点开始查找,丢失当前循环的上下文定位。
  • 给following-sibling选中的同层节点加序号限定(比如[1]),避免选中列表中其他商品块的同层节点,防止导航范围串位。
  • 如果目标价格块嵌套层级较深,只要顺着DOM结构在following-sibling选中的节点后补全每一层的路径即可,例如following-sibling::div[1]/div[2]/section/span,这种写法完全符合XPath语法规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 18:06:04