【问题标题】:Nokogiri unable to find XPath beginning with "("Nokogiri 找不到以“(”开头的 XPath
【发布时间】:2016-03-01 01:13:00
【问题描述】:

我必须使用以下 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
  • 仅仅因为 Firebug 或任何其他基于浏览器的插件可以看到某些东西并不意味着节点存在。浏览器做了很多事情,包括 HTML 修复和处理 JavaScript,解析器不会或不能做,因为它们是非常不同的野兽。像 Firefox 这样的插件依赖于浏览器提供的 HTML 源,在它弄乱了源之后,解析器在没有修正或 DHTML 的情况下完成它。

标签: ruby-on-rails ruby xml xpath nokogiri


【解决方案1】:

Nokogiri::CSS::SyntaxError:

根据错误判断,您尝试在 css 方法中使用 XPath 表达式,而该方法需要 CSS 选择器。使用xpath()方法。

【讨论】:

  • 谢谢,我用的是page.at,用page.at_xpath解决了这个问题
  • at,就像通用的search 尝试使用一些启发式方法来确定传入的选择器是CSS 还是XPath,然后他们将调用at_css 的适当CSS 或XPath 变体、at_xpathcssxpath。大多数时候,我依赖通用的atsearch,它会做正确的事情。有时它会因为选择器模糊或混乱而搞砸,我必须使用特定的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
相关资源
最近更新 更多