【问题标题】:python selenium - how to make webdriver use XPATH version 2.0python selenium - 如何让 webdriver 使用 XPATH 2.0 版
【发布时间】:2019-03-24 11:24:05
【问题描述】:

我正在尝试使 webdriver/浏览器能够处理 XPATH 2.0 版。

使用旧版本的 XPATH 很好,但在某些特定情况下,我还需要处理 XPATH 版本 2.0。

我对此进行了一些研究,但仍然没有任何线索。

例如,假设我想获取所有包含titlehref 属性的<a> 元素:

# find elements by xpath in older version
driver.find_elements_by_xpath("//a[@title or @href]")

# I want the code to be able to process XPATH version 2.0
driver.find_elements_by_xpath("//a/(@title|@href)")

我希望我能找到一些配置(或者我应该使用什么浏览器)来实现处理 XPATH 版本 2.0 的可用性。

【问题讨论】:

  • 这将选择属性而不是元素。这是你的意图吗?
  • @pguardiario 我的意思是选择包含这些属性的元素。所以它不会检索没有hreftitle<a>
  • 既然可以将 2.0 定位器转换为兼容 1.0 的定位器,为什么还要费尽心思寻找执行 2.0 定位器的方法?你的第一个定位器会做你想做的事。您能否提供一个无法转换为等效 1.0 的 2.0 定位器?
  • 当前版本的 Chrome 显示您的第二个 XPath 无效。
  • @JeffC 这就是我要解决的问题。第二个 XPath 是有效的 XPath 2.0 版,但 Chrome 不支持它。有时给定的 XPath 总是来自 XPath 2.0 版。

标签: python selenium selenium-webdriver


【解决方案1】:

这是xpath 2.0 jquery plugin

在与 jquery 一起注入之后:

for script in ['jquery.js', 'jquery.xpath.js']:
  with open(script, errors='ignore') as f:
    driver.execute_script(f.read())

您应该能够执行 xpath 2.0 表达式:

driver.execute_script('return $(document).xpath("count(//a)")')

【讨论】:

    猜你喜欢
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多