使用Celerity下载文件

时间:2010-11-03 22:20:04

标签: javascript ruby jruby htmlunit celerity

我在JRuby中使用Celerity自动从某些网站下载某些.csv文件。对于其中一个网站(LinkShare),我已经非常接近,但无法弄清楚最后一步。

网站使用javascript和“隐藏的iframe”方法推送文件下载 - 在常规浏览期间,当您点击下载按钮时,它会调用javascript来创建包含下载内容的隐藏iframe,浏览器选择了提示用户保存文件。

显然在Celerity中的工作方式不一样。点击链接后我可以在jirb中看到新的iframe,但无法调用任何方法,收到如下错误:

NoMethodError: undefined method `getDocumentElement' for #<Java::ComGargoylesoftwareHtmlunit::TextPage:0x184e6efc>

任何人都有足够的经验与Celerity / Htmlunit / Javascript / Jruby,他们可以指出我正确的方向?我只想检索下载内容(.csv文件)。

或者,是否有人知道(无头)浏览器自动化工具哪个更适合该任务?如果有的话?

3 个答案:

答案 0 :(得分:0)

机械化可能对你有用,它意味着更接近普通人对浏览器的使用,同时保持无头。

http://mechanize.rubyforge.org/

答案 1 :(得分:0)

正如ehsanul所说,机械化可能是一个很好的起点。您需要确定要访问的URL以检索文件。此外,查找标识与主机会话的cookie或会话ID。机械化应该抓住它并将其作为它的一部分返回。

答案 2 :(得分:0)

我要做的第一件事就是检查你是否正在导航到框架。框架(甚至是iframe)被视为完全独立的窗口,您必须先在那里导航。检查Celerity :: Frames类。

如果不这样做,您可能想尝试一个控制浏览器的库,而不是模拟它。模拟浏览器的库(例如htmlunit和mechanize)有其限制,您可能已经找到了一个。为此,我建议使用watir / firewatir。