我必须使用以下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>'
我的问题是如何解决上述问题,现在解决了感谢@alecxe – shubhamgupta0122
仅仅因为Firebug或任何其他基于浏览器的插件可以看到某些东西并不意味着存在节点。浏览器做了很多事情,包括HTML修正和处理JavaScript,解析器不会或不能做,因为它们是非常不同的野兽。像Firefox这样的插件依赖于浏览器提供的HTML源代码,在它与源代码混淆之后,解析器无需修正或DHTML即可实现。 –