Javascript 使用快速下载文件

Javascript 使用快速下载文件,javascript,ruby,jruby,htmlunit,celerity,Javascript,Ruby,Jruby,Htmlunit,Celerity,我正在使用JRuby中的Celerity自动从某些网站下载一些.csv文件。对于其中一个网站(LinkShare),我已经非常接近了,但还不知道最后一步是什么 该网站使用javascript和“隐藏iframe”方法推送文件下载-在常规浏览期间,当您单击“下载”按钮时,它调用javascript创建包含下载内容的隐藏iframe,浏览器将拾取该文件并提示用户保存该文件 显然,在快速性方面并不完全相同。单击链接后,我可以在jirb中看到新的iframe,但无法对其调用任何方法,出现如下错误: No

我正在使用JRuby中的Celerity自动从某些网站下载一些.csv文件。对于其中一个网站(LinkShare),我已经非常接近了,但还不知道最后一步是什么

该网站使用javascript和“隐藏iframe”方法推送文件下载-在常规浏览期间,当您单击“下载”按钮时,它调用javascript创建包含下载内容的隐藏iframe,浏览器将拾取该文件并提示用户保存该文件

显然,在快速性方面并不完全相同。单击链接后,我可以在jirb中看到新的iframe,但无法对其调用任何方法,出现如下错误:

NoMethodError: undefined method `getDocumentElement' for #<Java::ComGargoylesoftwareHtmlunit::TextPage:0x184e6efc>
NoMethodError:未定义的方法“getDocumentElement”#
有没有人有足够的经验来使用Celerity/Htmlunit/Javascript/Jruby,他们可以为我指出正确的方向?我只想检索下载内容(csv文件)


或者,有人知道一种(无头)浏览器自动化工具更适合于此任务吗?如果有的话。

Mechanize可能适合您,它意味着更接近于正常人对浏览器的使用,同时保持无头


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

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


否则,您可能希望尝试控制浏览器的库,而不是模拟它。模拟浏览器的库(如htmlunit和mechanize)有其局限性,您可能已经找到了。为此,我建议使用watir/firewatir。

我最终做了一些基本类似的事情。我不得不在html上使用一些正则表达式来创建一个url,我以前使用过Mechanize,但由于它不支持javascript,所以遇到了麻烦。