2016-02-28 2 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, но когда я использую этот XPath в Nokogiri, я получаю следующее сообщение об ошибке:

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:

Судя по ошибке, вы пытаетесь использовать выражение XPath внутри метода css, который вместо этого ожидает селектор CSS. Используйте метод xpath().

+1

спасибо, я использовал 'page.at', проблема была решена при использовании' page_at_xpath' – shubhamgupta0122

+0

'at', так как общий« поиск »пытается использовать некоторые эвристики для определения того, прошел ли селектор в CSS или XPath , то они будут вызывать соответствующий CSS или XPath вариант 'at_css',' at_xpath', 'css' или' xpath'. В большинстве случаев я полагаюсь на общий «at' или« search », и он делает правильные вещи. Иногда это испортится, потому что селектор туманный или запутанный, и мне придется использовать конкретный метод. –

Смежные вопросы