工作代码是这样的:
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
答案 0 :(得分:1)
编辑
根据讨论,看起来你遇到了"
和逃脱charcaters的问题。
使用以下
csrf = list(set(htmls.xpath("//input[@name=\"{}\"]/@value".format(tokenname))))[0]
<强>旧强>
您可以使用format
,如下所示
"//input[@name={}]/@value".format('whatever')
str.format(* args,** kwargs)
执行字符串格式化操作。调用此方法的字符串可以包含由大括号{}分隔的文字文本或替换字段。每个替换字段都包含位置参数的数字索引或关键字参数的名称。返回字符串的副本,其中每个替换字段都替换为相应参数的字符串值。
>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'