1

我在 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 文件)。

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

4

3 回答 3

0

Mechanize 可能对你有用,它更接近于普通人对浏览器的使用,同时保持无头。

http://mechanize.rubyforge.org/

于 2010-11-03T23:40:18.400 回答
0

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

于 2010-11-04T02:18:05.977 回答
0

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

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

于 2010-11-04T02:19:47.943 回答