使用唯一键从js GET请求返回的下载文件

时间:2014-10-12 22:26:53

标签: javascript casperjs

我是CasperJS的新手。试图从我的银行下载一个cvs文件。在标准浏览器中,您可以单击“确定”按钮,然后接收下载。按钮的html是:

<input type="button" id="dialogOk" class="yDialogOk" onclick="handleYes()" style="width:50px" value="OK">

单击该按钮时,函数会发出以下GET请求:

https://allmyaccounts.mybank.com/apps/export.obfbank.do?actionType=AllTransaction&c=csit_key%3A5L6bKL6bJaHY4ISx9AMG6yZY%2BSg%3D&l=u%3As

对该请求的响应具有以下属性:

Content-Disposition: Attachment; Filename="ExportData.csv"

我不知道如何下载ExportData.csv。我找到的下载方法要求您拥有目标URL。我看到的问题是我需要定位的URL需要动态生成的csit_key属性。当前会话结束后,密钥停止工作。我查看了整个页面源和资源,但在单击按钮之前找不到对csit_key(甚至是其他名称)的引用。看起来我必须单击该按钮才能启动下载。

我相信casper / phantom无法下载它没有特别请求的文件。如果我错了,请告诉我。如果在点击之后/之前运行,我发现以下我希望可以捕获下载,但它永远不会触发。我从未见过那些console.logs。

casper.on('page.resource.received', function(resource) {
    if (resource.stage !== "end") {
        console.log("resource.stage !== 'end'");
        return;
    }
    if (resource.url.indexOf('ExportData.csv') > -1) {
        console.log("Downloading csv file");
        this.download(resource.url, 'ExportData.csv');
    }
});

我的下一个猜测是尝试在点击后捕获生成的GET,以便提取csit_key。我只能找到如何查看响应标头,而不是请求标头。

我希望有人可以直接告诉我如何下载该csv文件。

2 个答案:

答案 0 :(得分:0)

根据casperjs documentation,你应该听一下这个事件&nbsp; resource.received&#39;相反,&#39; page.resource.received&#39;。所以代码应如下所示:

casper.on('resource.received', function(resource) {
    if (resource.stage !== "end") {
        console.log("resource.stage !== 'end'");
        return;
    }
    if (resource.url.indexOf('ExportData.csv') > -1) {
        console.log("Downloading csv file");
        this.download(resource.url, 'ExportData.csv');
    }
});

答案 1 :(得分:0)

我的事件监听器出现问题。我正在测试resource.url有“ExportData.csv”。当我检查所有收到的资源时,我看到了网址并更正了测试。最终的测试看起来像这样:

if (resource.url.indexOf('export.bofapfm.do') > -1) {
  console.log("Downloading csv file");
  this.download(resource.url, 'ExportData.csv');
}