python - 如何使用 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 "dayg"">That'll be the "day"</p>
所以,这给我留下了两个问题:
如何使其与包含双引号的标题值一起使用?
如何使它适用于任何标题值,例如包含双引号和单引号的标题值?
解决方案
我最终从这个线程中使用了 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 + ']')
推荐阅读
- javascript - 我有两个数组,一个有 N 个数据,另一个有固定的数据
- json - Curl/Json - 从 curl json 输出中检索值
- react-native - Expo v4 / React:在选项卡屏幕之间传递数据
- python - 使用 pyInstaller 作为 exe 构建运行时,无法使用 win32com 读取 Outlook 邮件项目 - Python 代码有效
- apache-kafka - 需要一些关于 kafka connect 中的错误处理的说明
- javascript - 如何在可滚动的 div 上添加叠加层
- django - Django过滤深度相关模型
- python - 为什么需要 create_task() 来使用 asyncio collect 创建一个协程队列?
- c# - Docker ram 内存限制
- python - Python中的Filedialog问题,Selenium'NameError'