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

时间:2013-01-10 17:18:13

标签: ruby xpath nokogiri

如何使用XPath和Nokogiri获取具有特定类名的<td>?表是嵌套的,其中一些没有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>个,我想得到所有这些。

2 个答案:

答案 0 :(得分:1)

这些td上的类属性是“m_g”,还是单个td上有多个类?如果是后者,则此XPath可能有效:

//td[contains(@class, "m_g")]

答案 1 :(得分:1)

使用gem“capybara-webkit”是一种在完整的javascript渲染视图中操作本网站的可行方式。

以下是capybara-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引擎。

相关问题