2013-03-12 50 views
3

我有一个股票交易网站,只有登录到网站后才能访问。登录后,有一个股票价值,我试图提取。该数字不易获取,并需要一段时间才能从公司数据库中更新。使用Ruby从JavaScript登录可访问的网页提取值-javascript

我想在Ruby中编写一个脚本,这将允许我提取数字,然后在我的程序中使用它。

在Firebug,标签看起来是这样,但之后仅数已加载:

<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”中读取html而不是“website.com/stocks” 2)一旦我通过登录,我该如何使用javascript之后的html代码交锋?

我也曾尝试的Watir,这样可以让我过去的问题#1,但随后做类似下面不与问题#2,因为它提供了原始的HTML源帮助...

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

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

回答

2

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

来获取文本,你会想是这样的:

puts browser.span(:id => 'element_id').when_present.text 
+0

完美!谢谢! – walterfaye 2013-03-12 19:49:05

+0

如果可能,请你加入吗? [聊天](http://chat.stackoverflow.com/rooms/24194/ruby) – 2013-03-12 20:18:17

0

如果事后装入,Nokogiri无法看到它。你需要使用像Watir这样的东西。


一旦我得到过去的登录,我该如何使用HTML代码后的JavaScript加载?

你不能到那里与Nokogiri。 Nokogiri的世界中不存在添加的HTML,因为它通过OpenURI提供基础HTML。 Nokogiri不执行JavaScript。另一方面,Watir可以做到这一切,所以这是您唯一的选择。你必须弄清楚如何浏览登录页面,请求股票页面,然后循环,等待文本出现,然后抓住它并做任何你想做的事情。

+0

谢谢我其实尝试过的Watir太多,但仍然会碰到的问题#2。应该添加到我的文章! – walterfaye 2013-03-12 19:18:49

相关问题