[英]How to escape single quote in xpath 1.0 in selenium for python
我在 selenium python 腳本中使用了以下代碼行:
from selenium import webdriver
driver.find_element_by_xpath(u"//span[text()='" + cat2 + "']").click()
cat2 是來自我這樣得到的數據庫列表的變量:
db = Database()
sql = "SELECT * FROM missing
listeproduit = db.select(sql)
for record in listeproduit:
cat2 = record[6]
問題是當變量包含這樣的文本時:
cat2 = Debimetre d'air
然后腳本不起作用,因為它是非法的 xpath 表達式。
從我的搜索中,我了解到在我的變量 cat2 中轉義單引號是一個問題
從這個答案: 使用 Nokogiri 在 XPath 中轉義單引號?
他們建議使用 concat() xpath 函數,但在我的情況下如何使用它? 謝謝你的幫助。
干杯
在瀏覽器和 Selenium 使用的 XPath 1.0 中,沒有轉義字符串文字的本機方法(在 XPath 2.0 中已修復)。 這張海報提到了一些解決方法,其中包括:
concat('"', "Here's Johnny", '"', ", said Johnny.")
,它與字面量: "Here's Johnny", said Johnny.
.在您的情況下,這將起作用:
driver.find_element_by_xpath(u"//span[text()=\"" + cat2 + "\"]").click()
解決此問題的另一種方法是設置一個 XPath 變量以包含字符串文字的值,這有助於提高可讀性。 但是我找不到如何使用 Selenium 的網絡驅動程序來做到這一點,這通常意味着沒有這樣的方法可用。
這是我剛剛編寫的一個 Python 函數,它使用@Abel 的回答中描述的技巧來轉義字符串以在 XPath 1.0 表達式中使用:
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 + ']')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.