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

VBA Selenium如何判断XPath匹配文本"Duet"的第几次出现

解决方案

你可以通过调整XPath语法+改造VBA循环逻辑,直接识别Duet的出现次序,同时避免数据覆盖:

1. XPath识别次序的核心语法

要获取第k个文本为Duet的节点,直接使用XPath的索引语法即可,索引从1开始计数:
(//td[text()='Duet'])[k]
比如(//td[text()='Duet'])[2]就对应第二个出现的Duet节点。

2. 完整改造后的VBA代码

你原代码的核心问题是每次固定取第三个tr的数据,且Excel匹配时每次都找A列第一个Duet的行,才会出现覆盖。改造后逻辑如下:

Dim DuetTrs As Object, i As Integer, firstDuetRow As Integer

' 限定范围到目标表格,获取所有包含Duet的行节点集合
Set DuetTrs = .FindElementsByXPath("/html/body/ui-view/main/div[1]/div[1]/ui-view/div/ui-view/div[4]/div/section/table[2]/tbody/tr/td[text()='Duet']/parent::tr")

' 找到Excel表A列第一个Duet所在的行号,后续按顺序匹配后续Duet行
firstDuetRow = Sheets("Import").Range("A:A").Find(what:="Duet", LookIn:=xlValues, LookAt:=xlWhole).Row

' 循环遍历每一个Duet行,按次序写入对应Excel行
For i = 1 To DuetTrs.Count
    currentWriteRow = firstDuetRow + i - 1
    ' 写入第二列数据到G列
    Sheets("Import").Range("G" & currentWriteRow) = DuetTrs.Item(i).FindElementByXPath("./td[2]").Text
    ' 写入第三列数据到H列
    Sheets("Import").Range("H" & currentWriteRow) = DuetTrs.Item(i).FindElementByXPath("./td[3]").Text
Next i

逻辑说明

  • 用复数形式的FindElementsByXPath直接获取所有符合条件的行节点集合,集合的索引天然对应Duet的出现次序,不需要额外判断第几次出现
  • Excel侧按顺序匹配A列的Duet行,不会每次都匹配第一个Duet导致数据覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:24:03