2015-10-16 64 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 + "')]")