3

有没有办法在不指定下载 URL 的情况下使用 casperjs 下载 CSV 文件?我正在尝试下载单击下载按钮时动态生成其 URL 的 CSV 文件。因此,在这种情况下,我可能无法很好地使用 download()。

4

4 回答 4

2

作为记录,已经可以使用“resource.received”事件。如果您收到这样的标题:

内容处置:附件;文件名="导出数据.csv"

可以使用以下事件侦听器下载生成的文件:

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');
    }
});
于 2014-10-13T06:22:01.993 回答
1

我已经找到了解决方案。它不是很干净,但它有效:

您需要构建一个全局数组,它将每个 resource.received 关联一个附加的文件名。

fileInfos[url]= parse_filename_from_responseHeader(resource)

如果 url 是您要下载的资源,请先尝试 open(url)。这将触发 resiyrce.received 事件,解析头部并更新全局数组。

现在,在启动之前casper.download(url),寻找fileInfos[url].

您将在 fileInfos 数组中找到与 url 对应的文件名。如果需要,我可以详细说明解决方案,但由于这个问题已经存在几年了,

我会等待下一次戳详细说明。

于 2015-05-14T15:24:04.760 回答
0

在解决这个 phantomjs 问题之前,这是不可能的http://code.google.com/p/phantomjs/issues/detail?id=52

于 2012-09-18T06:05:13.043 回答
0

我会做的是这样的事情,但我知道我将收到的文件名:

this.waitForResource(function check(resource){
            res = resource;    
            // regular expression to test
            return /thefilename/.test(resource.url);
        }, function(){
            this.echo("Resource found: " + res.url);
            // download the file
            this.download(res.url, path);
        }, null, 10000);
于 2017-09-06T15:50:51.627 回答