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")