代码之家  ›  专栏  ›  技术社区  ›  Nathan123

如何将字符串传递给xpath?

  •  -1
  • Nathan123  · 技术社区  · 6 年前

    我有一个xpath,格式如下

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

    我想给第一个 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'

    下面是我正在处理的全部代码

    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)")
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   natn2323    6 年前

    我无法用如此微妙(少于6个字符)的变化来更新@Steven的答案,所以我创建了自己的答案。

    你需要的是:

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

    div XPATH的一部分。出于您的目的,在字符串中放置逗号是不必要的,也是无效的。逗号通常用于 print 语句以防止将换行符追加到输出。

    编辑:对于对原始文章及其注释的更改,将列表连接到字符串也是无效的。只需使用解释器并尝试编译代码,然后 TypeError: must be str, not list list 直接给 str ;但是,如果 列表 here 有关Python中字符串表示的解释。

        2
  •  2
  •   Steven    6 年前

    你错过了第二个 + . 试试这样的。

    xpath='//*[@id="peoplegrid"]/div['+str(i)+']/div[1]/a'
    
        3
  •  1
  •   Michael Kay    6 年前

    最好避免通过字符串连接来构造XPath表达式。缺点:

    (b) 如果有人恶意插入坏字符串(XPath注入攻击),您需要真正担心它

    (c) 每次使用表达式时都必须编译它。

    我不知道您正在使用的Python API,但是大多数XPath API允许您编译包含变量的表达式(例如。 '//[@id="peoplegrid"]/div[$param]/div[1]/a'