我想选择text
包含bar
的元素。我有一个名为foo
的python变量,它的值是"bar"
,我想这样使用它:
foo = "bar"
response.xpath('//*[contains(text(), foo)]')
但它会返回所有元素!有什么问题?
答案 0 :(得分:3)
你有没有尝试过:
foo = "bar"
response.xpath('//*[contains(text(), "'+foo+'")]')
这是Mathiou的答案和contains
的正确XPath表达式的组合。不要忘记即使在XPath表达式中你正在处理字符串,你必须告诉它你有一个字符串。
答案 1 :(得分:2)
关于你的问题:
但它会返回所有元素!有什么问题?
你的xpath-query返回" all"因为xpath无法识别你的" foo"在字符串('//*[contains(text(), foo)]'
)中作为有效变量,因此它返回空节点集而不是 - >这意味着它会检查哪些元素包含空字符串,这基本上就是所有元素=)
使用双引号和单引号对您有利:
foo = "bar"
response.xpath("//*[contains(text(), '" + foo + "')]")
答案 2 :(得分:0)
这个怎么样:
foo = "bar"
response.xpath('//*[contains(text(), \''+foo+'\')]')