如何使用 XPath 访问在 JavaScript 中呈现的 HTML 元素? [英] How do I access HTML elements that are rendered in JavaScript using XPath?

查看:41
本文介绍了如何使用 XPath 访问在 JavaScript 中呈现的 HTML 元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何使用 XPath 和 Nokogiri 获得具有特定类名的 ?表是嵌套的,其中一些没有 ID 或类,所以我不能嵌套这样的东西:

How do I get a <td> with a specific class name using XPath and Nokogiri? Tables are nested and some of them don't have IDs or classes, so I can't nest stuff like this:

//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> 很少,我想获得所有这些.

Any ideas? There are few <td>s with that class name and I want to get all of them.

推荐答案

使用 gem "capybara-webkit" 是在完整的 JavaScript 渲染视图中操作本网站的可行方法.

Using gem "capybara-webkit" is a viable way of manipulating this website in full javascript rendered view.

这是一个关于 capybara-webkit 脚本可能是什么样子的草稿示例.

Here is a scratch example of what a capybara-webkit script might look like.

#!/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 网络驱动引擎.

What is required to find the example xpath in this case (due to the page being created dynamically), is a fully functional javascript webdriving engine.

这篇关于如何使用 XPath 访问在 JavaScript 中呈现的 HTML 元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆