【问题标题】:Changing xpath selenium python更改 xpath 硒 python
【发布时间】:2018-11-04 01:36:54
【问题描述】:

所以我遇到了需要 90% 时间的问题

//*[@id='MainContent']/tbody/tr[18]/td[2]

而我需要 10% 的时间

//*[@id='MainContent']/tbody/tr[20]/td[2]

我想知道补偿这种变化的最佳方法是什么。

这是表格的图片,以及表格的 html 代码。

我需要捕获3 Bedrooms 部分,并且有时tr 元素会交换。大多数情况下,第一个 xpath 代码有效,但我需要一种更有效的方法来确定要使用的 xpath,具体取决于手头的情况。

我知道有一种用于 selenium 的 starts-with 方法,但这是否允许我搜索实际的 TD 文本?

【问题讨论】:

  • 你能检查第一个 xpath 元素的文本,并用它来决定你需要哪个元素吗?即类似if 'Bedrooms' in driver.find_element_by_xpath('//*[@id='MainContent']/tbody/tr[18]/td[2]') ?
  • 我可以做到这一点,但我想知道是否有一种已经存在的 selenium 方法可以做到这一点,所以不是使用 if 语句,而是有一种方法可以搜索文本,如果找到文本可以复制xpath @JohnGordon
  • 我不明白你在问什么。 if 'something' in element.text: 尽可能直接。
  • @JohnGordon selenium 没有直接进行此查找的方法吗?例如,像这样: //*[text()[contains(.,'theText')]]
  • 哦,你的意思是一个 XPath 选择器。这与 Selenium 无关。

标签: python python-3.x selenium selenium-webdriver xpath


【解决方案1】:

要针对文本 Ttl Bedrms 捕获文本 3 Bedrooms,您可以使用以下解决方案:

  • XPath:

    //tr[@class='RowStyle']//td[contains(.,'Ttl Bedrms')]//following::td[1]
    

【讨论】:

  • 决定使用 text()= 方法,因为我试图匹配大小写精确的文本。如果他们更新了网站,我可以依靠精确的文本匹配,而不仅仅是包含,因为可能存在多个地方该文本可能存在
【解决方案2】:

如何使用Ttl Bedrms: 文本

//*[@id='MainContent']//td[contains(., `Ttl Bedrms:`)]/following-sibling::td

【讨论】:

  • 感谢您的帮助。我使用了类似的东西,但我使用了 text()= 方法而不是 contains(x,x)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多