提问人:John Ritchey 提问时间:6/23/2023 更新时间:6/23/2023 访问量:58
需要帮助处理表中具有动态 xpath Selenium VBA 的元素
Need help working with elements in a table that have a dynamic xpath Selenium VBA
问:
将 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')]")
答:
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
显然我之前点击了错误的按钮。是接受答案的小复选标记吗?
评论