【发布时间】:2015-11-24 20:43:09
【问题描述】:
我几乎可以完成这项工作,但当它出现时,我似乎无法下载该文件。我在这里做错了什么?单击“下载销售报告”按钮时,我的 console.log() 应该下载一个 CSV 文件,甚至永远不会触发。
var casper = require('casper').create();
casper.start('http://www.waynecountyauditor.org/Reports.aspx?ActiveTab=Sales')
.waitForText("Accept")
.thenClick('#ctl00_ContentPlaceHolder1_btnDisclaimerAccept')
.waitForText("View Sales")
.thenClick('#ctl00_ContentPlaceHolder1_WeeklySales_fvSalesReport_btnViewSales')
.waitForText("Download Sales Report")
.thenClick(x('//*[@id="ctl00_blSearchLinks"]/li[4]/a'))
.wait(1000)
.on('page.resource.received', function(resource) {
console.log('here');
if (resource.stage !== "end") {
return;
}
if (resource.url.indexOf('results.csv') > -1) {
this.download(resource.url, 'D:\Jobs\Currency\testing\ExportData.csv');
}
});
casper.run();
【问题讨论】:
-
您是否尝试在最后一个
thenClick之前或在thenClick回调中注册到“page.resource.received”? -
我猜你是这个意思?不,这也不起作用。
.thenClick(x('//*[@id="ctl00_blSearchLinks"]/li[4]/a'),function(){ casper.on('page.resource.received', function(resource) { console.log('here'); if (resource.stage !== "end") { return; } if (resource.url.indexOf('results.csv') > -1) { this.download(resource.url, 'D:\Jobs\Currency\testing\ExportData.csv'); } }); }) -
@Adam 我运行了您的脚本并注意到
resource.url不包含字符串“results.csv”,而是包含您下载页面的地址。所以最好这样做:` if (resource.contentType.indexOf('text/csv') > -1) { this.download(resource.url, './ExportData.csv'); } ` 但它也不起作用,因为要接收文件,您必须 POST 表单并且 casper.download 默认获取它。我试图调整this answer 以使用 POST 下载,但由于某种原因它不起作用:请求只会重新加载页面。正在进行的工作:pastebin.com/974wF4WR -
如果我们能从 CasperJS/PhantomJS 获得原始响应体就好了。
-
感谢您调查 Vaviloff。我已经尝试适应几乎所有我能找到的答案,而且我一直在用头撞墙。希望我们能有所收获。