Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用XPath访问JavaScript中呈现的HTML元素?_Ruby_Xpath_Nokogiri - Fatal编程技术网

Ruby 如何使用XPath访问JavaScript中呈现的HTML元素?

Ruby 如何使用XPath访问JavaScript中呈现的HTML元素?,ruby,xpath,nokogiri,Ruby,Xpath,Nokogiri,如何使用XPath和Nokogiri获得具有特定类名的?表是嵌套的,其中一些没有ID或类,因此我不能嵌套如下内容: //table/tbody/tr/td 以下是我到目前为止的情况: doc = Nokogiri::HTML(open("http://www.goalzz.com/default.aspx?c=8358")) doc.xpath('//td[@class="m_g"]').each do |node| pp node.to_s end 有什么想法吗?很少有具有该类名,

如何使用XPath和Nokogiri获得具有特定类名的
?表是嵌套的,其中一些没有ID或类,因此我不能嵌套如下内容:

//table/tbody/tr/td
以下是我到目前为止的情况:

doc = Nokogiri::HTML(open("http://www.goalzz.com/default.aspx?c=8358"))
  doc.xpath('//td[@class="m_g"]').each do |node|
  pp node.to_s
end

有什么想法吗?很少有
具有该类名,我希望获得所有这些类名

这些
td
s上的类属性是否完全是“m_g”,或者它们在单个
td
上是否有多个类?如果是后者,则此XPath可能会起作用:

//td[contains(@class, "m_g")]
使用gem“capybarawebkit”是在完整javascript呈现视图中操作该网站的一种可行方法

下面是一个从头开始的例子,说明了水豚webkit脚本可能是什么样子

#!/usr/bin/env ruby
require "rubygems"
require "pp"
require "bundler/setup"
require "capybara"
require "capybara/dsl"
require "capybara-webkit"

Capybara.run_server = false
Capybara.current_driver = :webkit
Capybara.app_host = "http://www.goalzz.com/"

module Test
  class Goalzz
    include Capybara::DSL

    def get_results
      visit('/default.aspx?c=8358')
      all(:xpath, '//td[@class="m_g"]').each { |node| pp node.to_s }

    end
  end
end

spider = Test::Goalzz.new
spider.get_results

在这种情况下(由于页面是动态创建的),查找示例xpath所需的是一个功能齐全的javascript webdriving引擎

示例web页面是使用javascript动态构建的。Nokogiri不是这个页面的好候选人。如果要强制此页面,可以将“var comp_pointsbox”的脚本值加载到Nokogiri对象中。由于JS.Ok,标准的Nokogiri::HTML(open)将无法正常工作。我以为不管它是如何生成的,Nokogiri都可以抓取该页面。我现在明白你的意思了。我认为搞乱JS对象是不值得的。谢谢你的回答。类属性正是我指定的。你的建议不会产生任何效果,就像我的建议一样。我刚刚意识到我实际上可以进入那个URL并查看页面。我也像shadowbq一样,发现页面是动态生成的,我甚至在JavaScript.Yep中也找不到值
m_g
,我也是这样。我相信这个页面是静态生成的。我的错。哇,这看起来是个不错的解决方案。我现在正在安装qt(这需要一些时间)。完成后我会回复你的。回答得太棒了@shadowbq。像沙姆一样工作。:)唯一可行的方法?您忘记了watir、celerity和其他一些功能。是的,watir WebDriver可以正常工作。根据我的理解,快速是Jruby。我想硒也能起作用。这是一个你希望你的无头刮削有多复杂/健壮的问题。有一篇关于三个并排使用基准的有趣文章。答案已更新。