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

zaqlnxep  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(136)

使用Edge Chrome浏览器,selenium和Visual Basic。我有一个web表,我正试图遍历这些行。我遇到的问题是元素名的一部分是动态的。
因此,对于我当前的edge会话,第一列中前三行数据的xpath是:

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

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

  1. //*[@id="content_ctl03_ctl00_G0_G10_G12_BC_d42b9044_d0bd_4a28_98b2_0631ffd0618c"]/tr[2]/td[1]/div/span
  2. //*[@id="content_ctl03_ctl00_G0_G10_G12_BC_d42b9044_d0bd_4a28_98b2_0631ffd0618c"]/tr[3]/td[1]/div/span
  3. //*[@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.......

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

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

  1. 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对象不支持

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

zlwx9yxi1#

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

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

如有必要,附加/div/span

相关问题