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
相关产品推荐
相关产品推荐

