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
我知道translate
和normalize-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:在进行翻译和规范化空间时查找包含精确文本的元素的主要内容,如果未能解决你的问题,请参考以下文章
具有显式默认命名空间的 XML 文档的 XPath 和命名空间规范
XPATH 帮助:使用 XPathNodeIterator 在命名空间中查找 XML 节点