首页 > 解决方案 > 如何使用 XPath 查找标题包含单引号和双引号的元素?

问题描述

我有一些 Python/Selenium 代码使用 XPath 查找具有指定标题文本的元素:

tab_element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_xpath('//a[@title="' + tab_title + '"]'))

它在大多数情况下都可以正常工作,但在遇到标题包含双引号的元素时会失败。

<p title="that'll be the &quot;dayg&quot;">That'll be the "day"</p>

所以,这给我留下了两个问题:

  1. 如何使其与包含双引号的标题值一起使用?

  2. 如何使它适用于任何标题值,例如包含双引号和单引号的标题值?

标签: pythonseleniumxpathattributesescaping

解决方案


我最终从这个线程中使用了 Elias 的 XPath 转义函数。

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 + ']')

推荐阅读