3

我有一个股票交易网站,只有在登录该网站后才能访问。登录后,我正在尝试提取一个股票价值。该号码并不容易获得,并且需要一段时间才能加载,因为它正在从公司的数据库中更新。

我正在尝试用 Ruby 编写一个脚本,它可以让我提取数字然后在我的程序中使用它。

在萤火虫中,标签看起来像这样,但只有在数字加载后:

<span id="ContentPlaceHolderTodaysStock">10,747</span>

我探索了诸如 hpricot 和 nokogiri 之类的库,并尝试了类似于以下的代码:

require "nokogiri"
require "open-uri"
doc = Nokogiri::HTML(open("website.com/stocks"))
puts doc.xpath("//span/text()")

我遇到的问题是 1)它只从登录页面“website.com”而不是“website.com/stocks”读取 html 2)一旦我通过登录,我如何使用 html 代码之后javascript已加载?

我也尝试过 Watir,这样可以让我解决问题 #1,但随后执行以下操作对问题 #2 没有帮助,因为它提供了原始的 html 源...

require 'net/http'
source = Net::HTTP.get("website.com/stocks", '/')

任何解决此问题的帮助将不胜感激。谢谢!

4

2 回答 2

2

由于您可以使用 Watir 登录,因此您也可以使用它来获取页面上的文本。Watir 具有等待异步组件加载的内置方法 - 请参阅http://watirwebdriver.com/waiting/

要获取文本,您将需要以下内容:

puts browser.span(:id => 'element_id').when_present.text
于 2013-03-12T19:28:00.473 回答
0

如果它是事后加载的,则 Nokogiri 看不到它。你需要使用像 Watir 这样的东西。


一旦我通过登录,在加载 javascript 后如何使用 html 代码?

你不能和 Nokogiri 一起去那里。添加的 HTML 在 Nokogiri 的世界中不存在,因为它是通过 OpenURI 提供的基本 HTML。Nokogiri 不执行 JavaScript。

另一方面,Watir 可以做到所有这些,因此它是您唯一的选择。你必须弄清楚如何浏览登录页面,请求股票页面,然后循环,等到文本出现,然后抓住它并用它做任何你想做的事情。

于 2013-03-12T19:08:23.393 回答