在SlimerJS中处理下载对话框

时间:2016-02-16 13:00:56

标签: phantomjs slimerjs

我编写了一个脚本,点击可以下载mp3文件的链接。我面临的问题是,当脚本模拟该链接上的点击时,会弹出一个下载对话框,如下所示:
Download Dialog Box

现在,我想将此文件保存到我选择的某个路径并自动完成整个过程。我对如何处理这个对话框毫无头绪。

3 个答案:

答案 0 :(得分:0)

这是一个改编自this blog post以下载文件的脚本。

  

在SlimerJS中,可以在onResourceReceived处理程序中使用response.body。但是,为防止使用太多内存,默认情况下不会获得任何内容。你必须首先设置page.captureContent来说出你想要的东西。您将一组正则表达式分配给page.captureContent以说明要接收哪些文件。正则表达式应用于mime类型。在下面的示例代码中,我使用/.*/表示"获取所有内容"。使用[/^image/.+$/]应该只是获取图像等。

var fs=require('fs');
var page = require('webpage').create();

fs.makeTree('contents');

page.captureContent = [ /.*/ ];

page.onResourceReceived = function(response) {

    if(response.stage!="end" || !response.bodySize)
    {
        return;
    }

    var matches = response.url.match(/[/]([^/]+)$/);
    var fname = "contents/"+matches[1];

    console.log("Saving "+response.bodySize+" bytes to "+fname);
    fs.write(fname,response.body);

    phantom.exit();
};

page.onResourceRequested = function(requestData, networkRequest) {
    //console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData));
};

page.open("http://....mp3", function(){

});

答案 1 :(得分:0)

您无法控制对话框。 SlimerJS没有此操作的API。

答案 2 :(得分:0)

Firefox生成一个包含内容的临时“downloadfile.extension.part”文件。只需简单地重命名文件ex。 myfile.csv.part> myfile.csv

本地如果在mac上工作,你应该在下载目录中的linux / temp /文件夹中找到.part文件

不是最优雅的解决方案,但应该做到这一点