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

SeleniumBasic VBA爬取:FindElementByXPath错误获取其他行Class内容

解决SeleniumBasic VBA爬取Farnell时Pkg Option重复第一行的问题

核心问题是你获取Pkg Option的XPath没有限定在当前遍历的产品行范围内,导致每次都全局查找第一个匹配元素。

修复步骤

  1. 确保基于当前行节点查找子元素
    遍历产品行时,必须用当前行的WebElement对象调用FindElementByXPath,而非直接用driver对象,同时XPath要写相对路径(开头加.)。

  2. 示例修正代码
    假设你的原有代码框架如下,这里给出修正后的关键部分:

    Dim driver As New ChromeDriver
    Dim ProductRows As WebElements
    Dim row As WebElement
    Dim MPN, Supplier_ID, QTY_InStock, Pkg_Option As String
    
    driver.Get "你的Farnell产品列表URL"
    Set ProductRows = driver.FindElementsByXPath("//tr[contains(@class,'product-row')]") '根据实际HTML调整行定位
    
    For Each row In ProductRows
        ' 其他属性的正确写法(基于当前行查找)
        MPN = row.FindElementByXPath(".//td[@data-header='MPN']").Text
        Supplier_ID = row.FindElementByXPath(".//td[@data-header='Supplier ID']").Text
        QTY_InStock = row.FindElementByXPath(".//td[@data-header='Stock']").Text
    
        ' 修正Pkg Option的获取方式:用当前行的相对路径
        ' 错误写法(全局查找):driver.FindElementByXPath("//td[@data-header='Package Option']").Text
        ' 正确写法(限定在当前行内查找)
        Pkg_Option = row.FindElementByXPath(".//td[@data-header='Package Option']").Text
    
        ' 输出或写入数据
        Debug.Print MPN, Supplier_ID, QTY_InStock, Pkg_Option
    Next row
    

关键细节

  • 相对路径的.代表从当前节点(即当前产品行row)开始查找,而非整个文档根节点。
  • 若Pkg Option的元素嵌套较深,可改用./descendant::*[@class='你的pkg-option类名']来匹配当前行下所有后代节点中的目标元素。
  • 调试时可通过Debug.Print row.Attribute("outerHTML")查看当前行的HTML结构,确认Pkg Option元素的位置和属性是否符合你的XPath定位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:52:36