Python 带有多个标签的 Selenium XPATH
Python Selenium XPATH with multiple tags
我有一个自动 python 脚本来检查 DOM 中的任何更改。我有一个有效的 xpath:
//td[@class='high-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
但它给我的输出比我需要的多,其中一些会导致错误。所以我想从 xpath 中获取我需要的抽象项目,所以我尝试使用这样的东西:
//table[@id't5c711109b1eea263276674']/tbody[]/tr[]/td[@class='warning-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
但是它不工作,所以甚至可以用那么多标签搜索 xpath 吗?
<table id="example">
<tbody>
<tr>
<td class="average-bg">
<a class="link-action" data-hintbox="1" data-hintbox-static="1" role="button" href="javascript:void(0)">1</a>
</td>
</tr>
</tbody>
</table>
在这里。
XML
<root>
<e1 role='a' class='y'></e1>
<e1 role='a' class='t'></e1>
<e1 role='a' class='z'></e1>
</root>
XAPTH
//e1[@role='a' and @class='t']
输出
Element='<e1 class="t" role="a"/>'
关于您的代码试用:
在您的第一次尝试中,您尝试使用元素的所有属性来构造 xpath:
//td[@class='high-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
可以存在具有相似属性但在不同 position/location 处的元素。因此它 returns 比您需要的期望输出多。
在您的第二次尝试中,您构建了一个 absolute xpath,它是 brittle:
//table[@id't5c711109b1eea263276674']/tbody[]/tr[]/td[@class='warning-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
解决方案
根据您提供的 HTML 文本,要识别所需的元素,您可以使用以下任一解决方案:
xpath
:
driver.find_element_by_xpath("//table[@id='example']//td[@class='average-bg']/a[@class='link-action' and text()='1']")
css_selector
:
driver.find_element_by_css_selector("table#example td.average-bg>a.link-action")
我有一个自动 python 脚本来检查 DOM 中的任何更改。我有一个有效的 xpath:
//td[@class='high-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
但它给我的输出比我需要的多,其中一些会导致错误。所以我想从 xpath 中获取我需要的抽象项目,所以我尝试使用这样的东西:
//table[@id't5c711109b1eea263276674']/tbody[]/tr[]/td[@class='warning-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
但是它不工作,所以甚至可以用那么多标签搜索 xpath 吗?
<table id="example">
<tbody>
<tr>
<td class="average-bg">
<a class="link-action" data-hintbox="1" data-hintbox-static="1" role="button" href="javascript:void(0)">1</a>
</td>
</tr>
</tbody>
</table>
在这里。
XML
<root>
<e1 role='a' class='y'></e1>
<e1 role='a' class='t'></e1>
<e1 role='a' class='z'></e1>
</root>
XAPTH
//e1[@role='a' and @class='t']
输出
Element='<e1 class="t" role="a"/>'
关于您的代码试用:
在您的第一次尝试中,您尝试使用元素的所有属性来构造 xpath:
//td[@class='high-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
可以存在具有相似属性但在不同 position/location 处的元素。因此它 returns 比您需要的期望输出多。
在您的第二次尝试中,您构建了一个 absolute xpath,它是 brittle:
//table[@id't5c711109b1eea263276674']/tbody[]/tr[]/td[@class='warning-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
解决方案
根据您提供的 HTML 文本,要识别所需的元素,您可以使用以下任一解决方案:
xpath
:driver.find_element_by_xpath("//table[@id='example']//td[@class='average-bg']/a[@class='link-action' and text()='1']")
css_selector
:driver.find_element_by_css_selector("table#example td.average-bg>a.link-action")