簡體   English   中英

如何將字符串傳遞給xpath?

[英]how to pass a string to to an xpath?

我有以下格式的xpath

xpath='//*[@id="peoplegrid"]/div[5]/div[1]/a'

我想以以下方式將字符串傳遞給x路徑中的第一個div

x=[1,2,3,4,5]
for i in x:
    xpath='//*[@id="peoplegrid"]/div[',+str(i),']/div[1]/a'
    print(xpath)

但是,當我運行它時,它指出bad operand type for unary +: 'str'

如何將字符串傳遞給此xpath

以下是我正在處理的完整代碼

x=[1,2,3,4]
for i in x:
    python_button=driver.find_element_by_xpath('//*[@id="peoplegrid"]/div,'+[str(x)]+'/div[1]/a')
    python_button.click()
    driver.execute_script("window.history.go(-1)")

您錯過了第二個+ 嘗試這樣的事情。

xpath='//*[@id="peoplegrid"]/div['+str(i)+']/div[1]/a'

我無法通過如此細微的更改(少於6個字符)來更新@Steven的答案,因此我創建了自己的答案。

您需要以下內容:

xpath='//*[@id="peoplegrid"]/div['+str(i)+']/div[1]/a'

如您所知,在我的答案和@Steven的答案之間,我的逗號不包括XPATH的第一個div部分中的逗號。 為了您的目的,將逗號放在字符串中是不必要且無效的。 通常在print語句中使用逗號,以防止將換行符附加到輸出中。

編輯:關於對原始帖子及其中評論的更改,將列表連接到字符串也是無效的。 僅使用解釋器並嘗試編譯代碼,就會出現TypeError: must be str, not list情況。 這是有道理的,因為您不能將list直接附加到str 但是,如果list的內容是字符串,或者可以轉換為字符串,則可以將它們串聯起來。 有關Python中字符串連接的說明,請參見此處

最好避免通過字符串連接構造XPath表達式。 缺點:

(a)您需要擔心轉義包含特殊字符的字符串

(b)如果有人可能惡意插入壞字符串(XPath注入攻擊),則需要真正擔心

(c)您必須在每次使用表達式時對其進行編譯。

我不知道您使用的是Python API,但是大多數XPath API都允許您編譯包含變量的表達式(例如'//[@id="peoplegrid"]/div[$param]/div[1]/a' ),然后將值分別綁定到變量。 如果可以做到這一點,那就更可取了,並且可以避免上述缺點。

暫無
暫無

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

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