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

Python 如何通过使用Xpath传递动态输入名称来获取输入值?,python,python-2.7,xpath,python-requests,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] 但是,我尝试将该输入名称作为参数传递到函数中,这样我可以执行以下操作: csrf = list(set(htmls.xpath("//inpu

工作代码如下所示:

csrf = list(set(htmls.xpath("//input[@name='whatever']/@value")))[0]
tokenname = sys.argv[2]
csrf = list(set(htmls.xpath("//input[@name="+tokenname+"]/@value")))[0] 
但是,我尝试将该输入名称作为参数传递到函数中,这样我可以执行以下操作:

csrf = list(set(htmls.xpath("//input[@name='whatever']/@value")))[0]
tokenname = sys.argv[2]
csrf = list(set(htmls.xpath("//input[@name="+tokenname+"]/@value")))[0] 
它给出了值“whatever”,我想这样传递它:

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
编辑

根据讨论,看起来你和越狱者之间有问题。 使用下列内容

csrf = list(set(htmls.xpath("//input[@name=\"{}\"]/@value".format(tokenname))))[0]
旧的 您可以使用如下格式

str.format*args,**kwargs

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


您的意思是:csrf=listsethtmls.xpath//input[@name={}]/@value.formattokenname?我是这样做的:csrf=listsethtmls.xpath//input[@name={}]/@value.formattokenname[0]仍然不起作用。与string35 Indexer之前的错误相同错误:列表索引超出范围错误可能在整个字符串中的某个位置。如果没有更多详细信息,我可以说是尝试在没有[0]的情况下打印整个列表,以查看是否收到任何值。或者试着在你的问题中添加更详细的代码。你可以试着像你前面的陈述中所说的@name=+{}+试着给出你在{}处的确切值,但实际值除外。.format只执行字符串替换。让我们来看看。