【问题标题】:How to escape single quote in xpath 1.0 in selenium for python如何在 selenium for python 中转义 xpath 1.0 中的单引号
【发布时间】:2015-09-24 10:42:58
【问题描述】:

我在 selenium python 脚本中使用了以下代码行:

from selenium import webdriver

driver.find_element_by_xpath(u"//span[text()='" + cat2 + "']").click()

cat2 是我得到的数据库列表中的变量:

db = Database()
sql = "SELECT * FROM missing
listeproduit = db.select(sql)
for record in listeproduit:
    cat2       = record[6]

问题是当变量包含这样的文本时:

cat2 = Debimetre d'air

那么脚本不起作用,因为它是一个非法的 xpath 表达式。

从我的搜索中,我了解到在我的变量 cat2 中转义单引号是一个问题

从这个答案:Escape single quote in XPath with Nokogiri?

他们建议使用 concat() xpath 函数,但在我的情况下如何使用它? 感谢您的帮助。

干杯

【问题讨论】:

  • 你试过这个 - cat2 = Debimetre d\'air 吗?
  • @GirishSortur,XPath 有不同的转义机制。
  • 我已经尝试过了,但正如 abel 所说,xpath 有不同的转义机制。

标签: python selenium xpath selenium-webdriver


【解决方案1】:

在浏览器和 Selenium 使用的 XPath 1.0 中,没有转义字符串文字的本机方法(在 XPath 2.0 中已修复)。一个few workarounds are mentioned by this poster,其中包括:

  • 首先,确保您了解在 Python 中可能的转义与在 XPath 表达式中转义之间的区别
  • 然后,如果您只需要单引号,请用双引号将其括起来,反之亦然
  • 然后,如果一个字符串文字同时包含双引号和单引号,请使用 concat('"', "Here's Johnny", '"', ", said Johnny.") 之类的内容,它与文字组合:"Here's Johnny", said Johnny.

在你的情况下,这会起作用:

driver.find_element_by_xpath(u"//span[text()=\"" + cat2 + "\"]").click()

解决此问题的另一种方法是设置一个 XPath 变量以包含字符串文字的值,这有助于提高可读性。但是我找不到如何使用 Selenium 的 Web 驱动程序来执行此操作,这通常意味着没有可用的方法。

【讨论】:

  • 完美运行!安瑟接受了。非常感谢能
  • 很好的答案!事实上,我在这个问题上见过最好的,做得很好。
【解决方案2】:

这是我刚刚编写的一个 Python 函数,它使用@Abel 的回答中描述的技巧转义了要在 XPath 1.0 表达式中使用的字符串:

def escape_string_for_xpath(s):
    if '"' in s and "'" in s:
        return 'concat(%s)' % ", '\"',".join('"%s"' % x for x in s.split('"'))
    elif '"' in s:
        return "'%s'" % s
    return '"%s"' % s

请注意,它会在您的字符串周围添加适当类型的引号,因此请确保不要在返回值周围添加额外的引号。

使用示例:

escaped_title = escape_string_for_xpath('"that\'ll be the "day"')

driver.find_element_by_xpath('//a[@title=' + escaped_title + ']')

【讨论】:

    猜你喜欢
    • 2016-07-28
    • 1970-01-01
    • 2020-04-09
    • 2013-01-27
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多