簡體   English   中英

如何在 python 的 selenium 中的 xpath 1.0 中轉義單引號

[英]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 中已修復)。 這張海報提到了一些解決方法,其中包括:

  • 首先,確保您了解在 Python 中轉義(這是可能的)與在 XPath 表達式中轉義之間的區別
  • 然后,如果你只需要一個單引號,用雙引號括起來,反之亦然
  • 然后,如果一個字符串字面量同時包含雙引號和單引號,請使用類似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.

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