我是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文件。
答案 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');
}