我正在尝试使用open-uri获取网站的html页面。但是,问题是网站需要几秒钟才能加载它以正确拥有正确的代码。我现在拥有的是:
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中做到这一点?如果红宝石不是你的专业知识,我也可以使用另一种语言的解决方案!
答案 0 :(得分:3)
作为一个例子,我最近使用watir-webdriver来完成类似的任务。您将能够在执行javascript后查询DOM并提取您想要的任何内容。如果你想让它无头,我就是用无头宝石。
如果您想坚持使用'open-uri',那么您将不得不使用类似httpfox的内容来观看哪些ajax请求javascript。您也可以使用许多不同的工具来完成此操作。但是在这种情况下,在你访问网址之前你会启动httpfox。等到你看到你想要抓取的信息出现,然后停止httpfox并检查每个请求,检查每个响应是否与你正在抓取的内容有关。一旦确定了正确的请求,您就可以使用open-uri。虽然最简单,但这种解决方案并不能保证,因为Web应用程序与服务器交互和操作dom的方式差异很大。