簡體   English   中英

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

[英]Python: Selenium xpath to find element with case insensitive characters?

我能做到

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

但我需要它忽略所有元素並將其與文本匹配,例如:“VieW LiSt”或“view LIST”

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

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

只有XPath 2.0支持lower-case()函數。 對於XPath 1.0,您將不得不使用translate()

stackoverflow答案中給出了示例代碼。

編輯:selenium python綁定站點有一個FAQ - 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。

由於lower-case()僅在 2.0 中受支持,因此我使用translate()想出了這個解決方案,因此我不需要每次都手動輸入整個 function

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::*"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM