如何通过使用Xpath传递动态输入名称来获取输入的值?

时间:2017-03-17 05:13:50

标签: python python-2.7 xpath python-requests

工作代码是这样的:

csrf = list(set(htmls.xpath("//input[@name='whatever']/@value")))[0]

但是,我试图将输入名称作为传递给函数的参数,这样我会做这样的事情:

tokenname = sys.argv[2]

给出了值'无论是什么'我希望传递这样的东西:

csrf = list(set(htmls.xpath("//input[@name="+tokenname+"]/@value")))[0] 

但它无法以这种方式工作,无论如何传递@name值中的变量?

完整的代码在这里:

import requests
from lxml import html
import json
import sys

session_requests = requests.session()
login_url = sys.argv[1]
tokenname = sys.argv[2]
result = session_requests.get(login_url)
htmls = html.fromstring(result.text)

csrf = list(set(htmls.xpath("//input[@name={}]/@value".format(tokenname))))[0]

print csrf

1 个答案:

答案 0 :(得分:1)

编辑

根据讨论,看起来你遇到了"和逃脱charcaters的问题。 使用以下

csrf = list(set(htmls.xpath("//input[@name=\"{}\"]/@value".format(tokenname))))[0]

<强>旧
您可以使用format,如下所示

"//input[@name={}]/@value".format('whatever')

来自python doc site

str.format(* args,** kwargs)

  

执行字符串格式化操作。调用此方法的字符串可以包含由大括号{}分隔的文字文本或替换字段。每个替换字段都包含位置参数的数字索引或关键字参数的名称。返回字符串的副本,其中每个替换字段都替换为相应参数的字符串值。

>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'