XPath:在进行翻译和规范化空间时查找包含精确文本的元素

Posted

技术标签:

【中文标题】XPath:在进行翻译和规范化空间时查找包含精确文本的元素【英文标题】:XPath: Find element that contains exact text while doing translate and normalize-space 【发布时间】:2022-01-13 08:55:44 【问题描述】:

我不确定实现这些目标的正确 XPath 语法:

网页上元素的文本内容应该是完全正确"ABC",除了:

我想使用translate,这样我就可以使用"abc" 搜索并找到"ABC"

我想做normalize-space

我知道translatenormalize-text在使用contains时的语法,即:

"//*[contains(translate(normalize-space(.), '%s), '%s')]" % ("ABC', 'abc'", "abc")
 #                                                           ↑ Translation   ↑ Target

这将找到一个包含 "ABC" 的元素,例如使用"abc" 搜索时的"ABCD"

但是,当我不使用contains 时,我正在努力使用正确的语法,即文本内容必须完全 "ABC" 而不是"ABCD" 并且可以通过"abc" 找到– 同时执行normalize-space

我知道您可以找到确切的文本,例如通过使用:

//*[normalize-space(text()) = "ABC"]

如何组合这些部分?


注意:我正在使用 Firefox for Selenium 通过driver.find_element_by_xpath 查找元素。据我所知,Firefox 使用 XPath 1,而不是任何更高版本的 XPath 2。

【问题讨论】:

【参考方案1】:

如果您使用//*[translate(normalize-space(), 'abc', 'ABC') = 'ABC'],则选择标准化字符串值为ABC 的任意大小写版本的元素。

【讨论】:

【参考方案2】:

您可以在 XPath 表达式中使用 or 运算符。 所以你可以使用这个定位器:

//*[normalize-space(text()) = "ABC" or normalize-space(text()) = "abc"]

【讨论】:

以上是关于XPath:在进行翻译和规范化空间时查找包含精确文本的元素的主要内容,如果未能解决你的问题,请参考以下文章

xPath 用法总结整理

具有显式默认命名空间的 XML 文档的 XPath 和命名空间规范

Python解析库lxml与xpath用法总结

XPATH 帮助:使用 XPathNodeIterator 在命名空间中查找 XML 节点

如何使用 Selenium xpath 查找包含“下载”一词的所有元素?

Selenium XPath 合并跨越文本并查找包含子字符串的元素