2015-10-16 59 views

回答

3

你尝试:

foo = "bar" 
response.xpath('//*[contains(text(), "'+foo+'")]') 

这是Mathiou的回答和contains的正确XPath表达式的组合。不要忘记,即使在XPath表达式中,你也要处理字符串,并且必须告诉它你有一个字符串。

+0

是的,这是我纠正了在评论中提到的:) – Mathiou

0

这个怎么样:

foo = "bar" 
response.xpath('//*[contains(text(), \''+foo+'\')]') 

+0

它再次返回所有元素! – Navid777

+0

如果这是xpath表达式中的一个问题,您可能需要看看这个:http://stackoverflow.com/questions/2994198/xpath-to-return-only-elements-containing-the-text-and -not-its-parents – Mathiou

+0

也许在字符串之前和之后使用''''? – Mathiou

2

首先

关于你的问题:

但它返回的所有元素!问题是什么?

你的XPath查询将返回“所有”元素,因为XPath的不能串('//*[contains(text(), foo)]')作为一个有效的变量中认出你的“富”,所以它返回空节点集合代替 - >这意味着,它种检查哪些元素包含一个空字符串,这基本上是所有元素=)

解决方案

使用双引号和单引号,你的优势是这样的:

foo = "bar" 
response.xpath("//*[contains(text(), '" + foo + "')]")