2016-02-28 81 views
0

我必須使用以下XPath:引入nokogiri無法找到的XPath開頭「(」

(//li[@id='result_0']//span[contains(@class,'s-price')])[2] 

我的代碼如下所示:

require 'mechanize' 
agent = Mechanize.new 
page = agent.get(site_url) 
element = page.at("(//li[@id='result_0']//span[contains(@class,'s-price')])[2]") 

Firebug是能夠找到使用的元素同樣的XPath,但是當我在引入nokogiri使用這個XPath,我得到以下錯誤:

Nokogiri::CSS::SyntaxError: unexpected '(' after '' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/css/parser_extras.rb:87:in `on_error' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/2.2.0/racc/parser.rb:258:in `_racc_do_parse_c' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/2.2.0/racc/parser.rb:258:in `do_parse' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/css/parser_extras.rb:62:in `parse' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/css/parser_extras.rb:79:in `xpath_for' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/css.rb:23:in `xpath_for' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/searchable.rb:198:in `block in xpath_query_from_css_rule' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/searchable.rb:197:in `map' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/searchable.rb:197:in `xpath_query_from_css_rule' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/searchable.rb:52:in `block in search' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/searchable.rb:51:in `map' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/searchable.rb:51:in `search' 
from /home/shubham/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.7.2/lib/nokogiri/xml/searchable.rb:67:in `at' 
from (irb):11 
from /home/shubham/.rbenv/versions/2.2.2/bin/irb:11:in `<main>' 
+0

我的問題是如何解決上述問題,現在解決了感謝@alecxe – shubhamgupta0122

+0

僅僅因爲Firebug或任何其他基於瀏覽器的插件可以看到某些東西並不意味着存在節點。瀏覽器做了很多事情,包括HTML修正和處理JavaScript,解析器不會或不能做,因爲它們是非常不同的野獸。像Firefox這樣的插件依賴於瀏覽器提供的HTML源代碼,在它與源代碼混淆之後,解析器無需修正或DHTML即可實現。 –

回答

1

Nokogiri::CSS::SyntaxError:

根據錯誤判斷,您正在嘗試在css方法內使用XPath表達式,該方法需要CSS選擇器。使用xpath()方法。

+1

謝謝,我正在使用'page.at',使用'page.at_xpath'' – shubhamgupta0122

+0

'at'解決了問題,就像通用'search'嘗試使用一些啓發式來確定選擇器是否通過CSS或XPath ,然後他們會調用'at_css','at_xpath','css'或'xpath'的適當的CSS或XPath變體。大部分時間我都依賴泛型'at'或'search',它做的是正確的事情。偶爾它會搞砸,因爲選擇器模糊不清,我必須使用特定的方法。 –