2013-05-14 47 views
4

我试图使用open-uri来获取网站的html页面。然而,问题在于网站需要几秒钟的时间才能正确加载正确的代码。我现在所拥有的是:Ruby Open-URI with Dynamic Website

require 'open-uri' 

html = open('http://hiddencode.me/dribbbucket/embed.html?key=MY_API_KEY&bucket=56024-Glassboard&delay=5000') 
response = html.read 
puts response 

如果我现在运行这个权利,我得到:

<div id="slam-dunk"> 
    <div id="loading">Loading..</div> 
</div> 

不过,该网站需要正确地首先加载开幕前得到正确的响应。任何想法如何在ruby中做到这一点?如果ruby不是您的专业知识,我也可以使用另一种语言的解决方案!

+5

您需要一个无头浏览器或可以执行JavaScript的煨。有很多选择。 –

+1

您应该打开AJAX使用的网址。 – DmitryR

回答

3

作为一个例子,我最近使用watir-webdriver来完成一个类似的任务。你可以在javascript执行后查询DOM,并拉出任何你想要的东西。如果你希望它是无头的,在我的情况下,我使用无头的宝石。

如果你想坚持'open-uri',那么你将不得不使用像httpfox这样的东西来观察哪个ajax请求javascript。你也可以用许多不同的工具来做到这一点。但是在你访问这个url之前,你需要启动httpfox。等到你看到你想要抓取的信息出现时,然后停止httpfox,并通过每个请求检查每个响应与你正在抓取的东西相关的事情。一旦你确定了正确的请求,你就可以在open-uri中使用它。尽管是最简单的,但是这种解决方案并不能保证,因为Web应用程序在与服务器交互以及操作dom方面差异很大。

+0

谢谢!当我这样做时,我确实最终使用watir来完成任务。 –