我有以下格式的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)")
答案 0 :(得分:2)
您缺少第二个SortedList
。尝试这样的事情。
+
答案 1 :(得分:1)
我无法通过如此细微的更改(少于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中字符串连接的说明,请参见here。
答案 2 :(得分:1)
最好避免通过字符串连接构造XPath表达式。缺点:
(a)您需要担心转义包含特殊字符的字符串
(b)如果人们可能有恶意插入坏字符串(XPath注入攻击)的可能性,您就必须真正担心它
(c)您必须在每次使用表达式时对其进行编译。
我不知道您正在使用的Python API,但是大多数XPath API允许您编译包含变量的表达式(例如'//[@id="peoplegrid"]/div[$param]/div[1]/a'
),然后将值分别绑定到变量。如果可以做到这一点,那就更可取了,并且可以避免上述缺点。