【问题标题】:Dynamic and changing XPATH动态和变化的 XPATH
【发布时间】:2019-09-30 15:07:37
【问题描述】:

我正在编写一个脚本来使用 selenium 浏览网页。我通常只是根据 XPATH 查找并选择所有元素。但是,xpath 的元素之一似乎每周左右都会略有变化。如何在不受动态 XPATH 约束的情况下选择或找到该元素?

这是我目前选择元素的方式:

driver.find_element_by_xpath('//*[@id="footable_213701"]/tfoot/tr/td/div/ul/li[15]/a')

这里是元素和属性

<li class="footable-page-nav" data-page="next">
<a class="footable-page-link" href="#">></a>
</li>

我需要选择“>”按钮才能导航到下一页。我无法通过 class="footable-page-link" 进行选择,因为它们的数量是动态的,所以我不知道该选择哪一个。

【问题讨论】:

  • 这个id会改变@id="footable_213701 吗?
  • 屏幕抓取的乐趣。如果您可以给我们一些规则来告诉您在哪里可以找到所需的数据,那么我们可以帮助您将该规则转换为 XPath。如果没有这样的规定,那我们帮不了你。

标签: python selenium xpath


【解决方案1】:

有几种方法可以在 xpath 中尝试,

1)点击基于数据页的锚点——下一步

//li[@data-page="next"]/a

2) 将其作为文本点击“>”,

//li[@class="footable-page-nav"]/a[contains(.,'>')]

或者简单地说,

//a[contains(.,'>')]

【讨论】:

    【解决方案2】:

    编写 XPATH 的最佳方式是避免使用数值(即带有数值的 id),这意味着它们本质上是动态的,li[15] 在这里您引用的第 15 个列表项可能会因添加或删除项,这将使您的 XPATH 失败。

    试试下面,

    driver.findElement(By.XPATH("//li[@class='footable-page-nav']/a"));
    

    谢谢,

    【讨论】:

    • 这有两个 XPATH。我怎样才能获得第二次或第 n 次交互?除此以外,这是可行的。
    • 当您的 XPATH 有 2 个匹配节点时,尝试从页面/节/popup 的根目录派生它。我在我的项目中遇到了同样的问题,派生的 XPATH 如下所示。希望能帮助到你。 //ul[@class='menucontainer']//li[@class='subsectionnode']//div[@class='popoutmenu']//li[@path='/Dxxx/xxxx']/a
    猜你喜欢
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多