如何使用phantomjs / casperjs处理下载?

维塞洛

是否可以将文件下载到文件夹并使用panthomjs / casperjs为其指定特定名称?

例如,如何下载此页面底部的.csv:http : //www.nasdaq.com/symbol/aapl/historical并将其命名为aapl.txt?

下载链接是:

<a href="javascript:getQuotes(true);" id="lnkDownLoad">
                Download this file in Excel Format
            </a>

它的目标是调用一个javascript函数,其目的是混淆直接下载链接(我认为),但是当您单击它时,它会发出经典的下载提示。我希望phantomjs能够正常处理该下载(更改文件名并选择将其保存在驱动器磁盘上的位置)

编辑:此代码应该单击下载链接并侦听传入的资源:

var casper = require('casper').create();

var x = require('casper').selectXPath;

casper.userAgent("Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36")

casper.start('http://www.nasdaq.com/symbol/aapl/historical', function () {
    //this.echo(this.getTitle());
    console.log('TITLE : ' + this.getTitle());

});

casper.wait(5000, function() {
    casper.on('resource.received', function (resource) {
        casper.echo("LISTENING");
        casper.echo(resource.url);
    });
});

casper.thenClick(x('//*[@id="lnkDownLoad"]'), function() {
    console.log('CLICKED');
});



casper.run();

但是由于某些原因,与普通浏览器不同,我没有收到任何文件。控制台日志为:b'TITLE : (AAPL) Historical Prices & Data - NASDAQ.com\r\nCLICKED\r\nLISTENING\r\nhttp://www.nasdaq.com/symbol/aapl/historical\r\n'

任何的想法 ?

Artjom B.

查看代码时,您会发现它并没有真正被混淆。通过单击下载链接,该文件实际上是通过casper下载的,但无法轻松访问。罪魁祸首是PhantomJS,因为PhantomJS不公开请求和响应内容(请参阅参考资料page.onResourceReceived),而仅公开元数据。

这意味着您需要通过download函数重复请求当您在浏览器的开发人员工具中查看页面源代码时,会看到getQuotes(true)单击即被调用。通过搜索getQuotesChrome中的Ctrl+ Shift+ F),您可以找到相关功能。

通过分析功能,您可以得出结论,$("#getFile").submit();即实际下载只是来自具有很多隐藏值的表单的POST请求。如果仔细查看getQuotes,您会发现该函数还将隐藏值之一添加到表单中。这意味着您需要getQuotes在伪造表单提交之前致电

实际的伪造是相对容易的。第一件事是从POST请求中使用的表单生成请求对象,第二件事是找到请求的URL。这是完整的代码:

var casper = require('casper').create();
var x = require('casper').selectXPath;

casper.userAgent("Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36")

casper.start('http://www.nasdaq.com/symbol/aapl/historical');
casper.wait(5000); // probably not necessary
casper.thenClick('#lnkDownLoad');
casper.then(function(){
    var parameters = this.evaluate(function(){
        // from http://stackoverflow.com/a/2403206
        var paramObj = {};
        $.each($('#getFile').serializeArray(), function(_, kv) {
            paramObj[kv.name] = kv.value;
        });
        return paramObj;
    });
    var url = this.getElementAttribute('#getFile', 'action');
    this.download(url, 'aapl.csv', 'POST', parameters);
});
casper.run();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用casperjs / phantomjs保存当前网页?

来自分类Dev

如何从PhantomJS / CasperJS在Windows上使用子进程模块

来自分类Dev

使用CasperJS单击链接后下载CSV

来自分类Dev

如何使用Python,Selenium和PhantomJS下载文件

来自分类Dev

登录后如何使用Casperjs下载CSV文件

来自分类Dev

重定向URL时如何使用CasperJS下载

来自分类Dev

如何使用WebDriver处理/接受PhantomJS中的JS警报?

来自分类Dev

如何使用PhantomJS的sendEvent函数在CasperJS中键入数字或小写字母

来自分类Dev

如何使用casperjs从XHR响应中捕获和处理数据?

来自分类Dev

AssertionError:在文档主体casperJS / phantomJS中查找文本,以及如何使用casperJS计算具有特定类名的Li的总数

来自分类Dev

如何使用angularjs处理文件下载错误?

来自分类Dev

如何使用angularjs处理文件下载错误?

来自分类Dev

如何使用CasperJS通过自定义POST请求下载文件

来自分类Dev

如何使用CasperJS通过自定义POST请求下载文件

来自分类Dev

如何在CasperJS中处理浏览器提示

来自分类Dev

如何使CasperJS和PhantomJS在优胜美地上正常播放?

来自分类Dev

使用casperjs / phantomjs登录到Amazon Developer Web页面

来自分类Dev

casperjs找不到phantomjs

来自分类Dev

CasperJS / PhantomJS分段错误

来自分类Dev

使用PhantomJS + Selenium处理重定向

来自分类Dev

如何使用Java处理失败的下载文件

来自分类Dev

如何使用批处理文件下载 MSI

来自分类Dev

如何下载网络库进行处理?

来自分类Dev

使用NSURLSession处理顺序下载

来自分类Dev

单击一个按钮以使用CasperJS下载文件

来自分类Dev

在使用Selenium Webdriver下载excel的同时,如何处理firefox中的下载弹出窗口

来自分类Dev

我们如何访问PhantomJS下载的文件?

来自分类Dev

我们如何访问PhantomJS下载的文件?

来自分类Dev

casperjs下载CSV文件

Related 相关文章

  1. 1

    如何使用casperjs / phantomjs保存当前网页?

  2. 2

    如何从PhantomJS / CasperJS在Windows上使用子进程模块

  3. 3

    使用CasperJS单击链接后下载CSV

  4. 4

    如何使用Python,Selenium和PhantomJS下载文件

  5. 5

    登录后如何使用Casperjs下载CSV文件

  6. 6

    重定向URL时如何使用CasperJS下载

  7. 7

    如何使用WebDriver处理/接受PhantomJS中的JS警报?

  8. 8

    如何使用PhantomJS的sendEvent函数在CasperJS中键入数字或小写字母

  9. 9

    如何使用casperjs从XHR响应中捕获和处理数据?

  10. 10

    AssertionError:在文档主体casperJS / phantomJS中查找文本,以及如何使用casperJS计算具有特定类名的Li的总数

  11. 11

    如何使用angularjs处理文件下载错误?

  12. 12

    如何使用angularjs处理文件下载错误?

  13. 13

    如何使用CasperJS通过自定义POST请求下载文件

  14. 14

    如何使用CasperJS通过自定义POST请求下载文件

  15. 15

    如何在CasperJS中处理浏览器提示

  16. 16

    如何使CasperJS和PhantomJS在优胜美地上正常播放?

  17. 17

    使用casperjs / phantomjs登录到Amazon Developer Web页面

  18. 18

    casperjs找不到phantomjs

  19. 19

    CasperJS / PhantomJS分段错误

  20. 20

    使用PhantomJS + Selenium处理重定向

  21. 21

    如何使用Java处理失败的下载文件

  22. 22

    如何使用批处理文件下载 MSI

  23. 23

    如何下载网络库进行处理?

  24. 24

    使用NSURLSession处理顺序下载

  25. 25

    单击一个按钮以使用CasperJS下载文件

  26. 26

    在使用Selenium Webdriver下载excel的同时,如何处理firefox中的下载弹出窗口

  27. 27

    我们如何访问PhantomJS下载的文件?

  28. 28

    我们如何访问PhantomJS下载的文件?

  29. 29

    casperjs下载CSV文件

热门标签

归档