Ruby 如何使用XPath访问JavaScript中呈现的HTML元素?
如何使用XPath和Nokogiri获得具有特定类名的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 有什么想法吗?很少有具有该类名,
?表是嵌套的,其中一些没有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。我想硒也能起作用。这是一个你希望你的无头刮削有多复杂/健壮的问题。有一篇关于三个并排使用基准的有趣文章。答案已更新。