[英]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.