4

我正在尝试使用 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​​ 不是您的专长,我也可以使用另一种语言的解决方案!

4

1 回答 1

3

例如,我最近使用了 watir-webdriver来完成类似的任务。您将能够在 javascript 执行后查询 DOM 并提取您想要的任何内容。如果您希望它是无头的,就我而言,我使用了无头宝石。

如果您想坚持使用“open-uri”,则必须使用httpfox 之类的东西来查看 javascript 发出的 ajax 请求。您也可以使用许多不同的工具来做到这一点。但是在这种情况下,您会在访问 url 之前启动 httpfox。等到您看到您尝试抓取的信息出现,然后停止 httpfox 并检查每个请求,检查每个响应是否与您正在抓取的内容相关。一旦您确定了正确的请求,您就可以将其与 open-uri 一起使用。虽然是最简单的,但这个解决方案并不能保证,因为 Web 应用程序在与服务器交互和操作 dom 的方式上存在很大差异。

于 2013-12-16T22:05:36.900 回答