Python:Selenium xpath查找不区分大小写字符的元素?

blpfk2vs  于 2022-11-21  发布在  Python
关注(0)|答案(2)|浏览(120)

我能够做到这一点

search = "View List"
driver.find_elements_by_xpath("//*/text()[normalize-space(.)='%s']/parent::*" % search)

但我需要它忽略并匹配所有带有如下文本的元素:“查看列表”或“查看列表”

search = "View List"
driver.find_elements_by_xpath("//*/lower-case(text())[normalize-space(.)='%s']/parent::*" % search.lower())

以上似乎不起作用。lower-case()在XPATH 1.0中

0wi1tuuw

0wi1tuuw1#

只有XPath 2.0才支持lower-case()函数。对于XPath 1.0,必须使用translate()
示例代码在此stackoverflow答案中给出。
编辑:Selenium Python绑定站点有一个常见问题解答-Selenium 2支持XPath 2.0吗?:
参考:http://seleniumhq.org/docs/03_webdriver.html#how-xpath-works-in-webdriver
Selenium将XPath查询委托给浏览器自己的XPath引擎,因此Selenium支持XPath支持浏览器支持的任何内容。在没有本机XPath引擎的浏览器(IE 6、7、8)中,Selenium仅支持XPath 1.0。

w6lpcovy

w6lpcovy2#

由于lower-case()仅在2.0中受支持,因此我使用translate()提出了此解决方案,这样我就不需要每次都手动键入整个函数

translate = "translate({value},'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"

driver.find_elements(By.XPATH, f"//*/{translate.format(value='text()')}[normalize-space(.)='{search.lower()}']/parent::*")

其计算结果为:

>>> print(f"//*/{translate.format(value='text()')}[normalize-space(.)='{search.lower()}']/parent::*")
"//*/translate(text(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')[normalize-space(.)='view list']/parent::*"

相关问题