casperjs下载文件而不指定url

时间:2012-09-17 14:10:08

标签: casperjs

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

4 个答案:

答案 0 :(得分:2)

为了记录,已经可以使用' resource.received'事件。 如果你收到这样的标题:

  

内容 - 处理:附件;文件名=" ExportData.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');
    }
});

答案 1 :(得分:1)

我找到了解决方法。它不是很干净但是有效:

您需要构建一个全局数组,该数组关联所有附加了文件名的资源。

fileInfos[url]= parse_filename_from_responseHeader(resource)

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

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

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

我等待下一次戳戳。

答案 2 :(得分:0)

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

答案 3 :(得分: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);