我编写了一个脚本,可以单击可以下载 mp3 文件的链接。我面临的问题是当脚本模拟点击该链接时,会弹出一个下载对话框,如下所示:
下载对话框
现在,我想将此文件保存到我选择的某个路径并自动化整个过程。我对如何处理这个对话框一无所知。
Firefox 会生成一个包含内容的临时“downloadfile.extension.part”文件。只需简单地将文件重命名为 ex。myfile.csv.part > myfile.csv
在本地,如果在 Mac 上工作,您应该在 linux /temp/ 文件夹的下载目录中找到 .part 文件
不是最优雅的解决方案,但应该可以解决问题
这是改编自此博客文章的脚本,用于下载文件。
在 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(){
});
您无法控制对话框。SlimerJS 没有用于此操作的 API。