如何访问正在使用XPath在JavaScript渲染HTML元素?(How do I access

2019-07-18 01:58发布

我如何获得一个<td>使用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的那类的名字,我想所有的人。

Answer 1:

使用宝石“水豚 - WebKit的”操作是本网站的完整的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。



Answer 2:

在类的这些属性td如果正好“m_g”,还是他们有一个以上的类更上了一个单一的td ? 如果是后者,这个XPath可能工作:

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


文章来源: How do I access HTML elements that are rendered in JavaScript using XPath?