需要帮助处理表中具有动态 xpath Selenium VBA 的元素

Need help working with elements in a table that have a dynamic xpath Selenium VBA

提问人:John Ritchey 提问时间:6/23/2023 更新时间:6/23/2023 访问量:58

问:

将 Edge chrome 用于我的浏览器、selenium 和 visual basic。我有一个 Web 表,我正在尝试遍历行。我遇到的问题是元素名称的一部分是动态的。

因此,对于我当前的边缘会话,第一列中前三行数据的 xpath 为:

//*[@id="content_ctl03_ctl00_G0_G10_G12_BC_e0149528_91fd_45d4_9c23_7b4df75a9207"]/tr[2]/td[1]/div/span
//*[@id="content_ctl03_ctl00_G0_G10_G12_BC_e0149528_91fd_45d4_9c23_7b4df75a9207"]/tr[3]/td[1]/div/span
//*[@id="content_ctl03_ctl00_G0_G10_G12_BC_e0149528_91fd_45d4_9c23_7b4df75a9207"]/tr[4]/td[1]/div/span

打开一个不同的浏览器会话,它可能是这样的:

//*[@id="content_ctl03_ctl00_G0_G10_G12_BC_d42b9044_d0bd_4a28_98b2_0631ffd0618c"]/tr[2]/td[1]/div/span
//*[@id="content_ctl03_ctl00_G0_G10_G12_BC_d42b9044_d0bd_4a28_98b2_0631ffd0618c"]/tr[3]/td[1]/div/span
//*[@id="content_ctl03_ctl00_G0_G10_G12_BC_d42b9044_d0bd_4a28_98b2_0631ffd0618c"]/tr[4]/td[1]/div/span

因此,这可能适用于今天遍历表的行......但是由于 XPath 的这一部分发生了变化,它只是暂时的。.....G10_G12_BC_836efe7a_d391_42e4_99da_70ca92d784fb']/tr.......

D.FindElementByXPath("//*[@id='content_ctl03_ctl00_G0_G10_G12_BC_836efe7a_d391_42e4_99da_70ca92d784fb']/tr[" & i & "]/td[1]").Click

我不确定我的语法是否错误,但我尝试使用 XPath 开头和包含,但这给了我一个错误 32 InvalidSelectorError。

Set table_element = D.FindElementByXPath("//*[starts-with(@id, 'content_ctl03_ctl00_G0_G10_G12_BC')] and contains(@id, 'tr[" & i & "]/td[1]/div/span')")

我也无法让这样的东西起作用。获取运行时错误 438 不支持对象

Set table_element = D.FindElementByXPath("//*[starts-with(@id, 'content_ctl03_ctl00_G0_G10_G12_BC')]")
Set elem = D.table_element.FindElementByXPath("//*[contains(@id, 'tr[" & i & "]/td[1]/div/span')]")
Excel VBA xpath selenium-edgedriver

评论


答:

0赞 zx485 6/23/2023 #1

你在第二个表达式上弄错了括号。试试这个

D.FindElementByXPath("//*[starts-with(@id, 'content_ctl03_ctl00_G0_G10_G12_BC')]/tr[" & i & "]/td[1]").Click

如有必要,追加 a。/div/span

评论

0赞 John Ritchey 6/23/2023
这做到了诀窍 Set elem = D.FindElementByXPath(“//*[starts-with(@id, 'content_ctl03_ctl00_G0_G10_G12_BC')]/tr[” & i + 1 & “]/td[1]/div/span”)
0赞 John Ritchey 6/23/2023
显然我之前点击了错误的按钮。是接受答案的小复选标记吗?