我一直在尝试使用 casperjs 从网站下载 .zip 文件,但它不会让我这样做。
1)如果我用 casper.thenOpen() 打开网址,它会显示典型的下载对话框“你想打开还是保存这个文件?”,问题是我找不到选择“的方法”下载它”(这是我需要的)而不是用 casperjs “打开它”。
2)现在我正在使用 casper.download() 但它只是下载一个 0 字节的文件,我认为这是一个更好的选择,因为我可以指定一个文件将被下载到的地址,它不会要求我下载文件,它只是下载它,这是我需要的。
这是我正在运行的脚本:
var casper = require('casper').create({
verbose: true,
logLevel: 'debug',
pageSettings: {
loadImages: true, // The WebPage instance used by Casper will
loadPlugins: false, // use these settings
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4'
}
});
// print out all the messages in the headless browser context
casper.on('remote.message', function(msg) {
this.echo('remote message caught: ' + msg);
});
// print out all the messages in the headless browser context
casper.on("page.error", function(msg, trace) {
this.echo("Page Error: " + msg, "ERROR");
});
var url = 'http://website.com/';
casper.start(url, function() {
// search for 'casperjs' from google form
console.log("page loaded");
this.then(function(){
this.test.assertExists('form', 'form is found');
});
casper.then(function(){
this.fill('form', {
u: 'username',
p: 'password'
}, true);
this.click("#submitButton");
});
this.wait(5000);
});
casper.page.settings.webSecurityEnabled = false;
casper.waitForUrl(/affiliates/, function(){
this.echo ("start downloading");
var url = 'http://website.com/affiliates/s.ashx?c=1977';
this.download(url, '/home/enmanuel/Desktop/1977.zip');
this.echo("finish download");
});
casper.then(function(){this.wait(5000);});
casper.run();
我正在运行这样的脚本:
casperjs UnionSquare.js --engine=slimerjs --disk-cache=no
现在我收到这个错误:
[错误] [远程] getBinary():获取时出错:[异常...“失败”nsresult:“0x80004005(NS_ERROR_FAILURE)”位置:“JS 框架 :: /usr/local/lib/node_modules/casperjs/modules/ clientutils.js :: sendAJAX :: line 894" 数据:无]
更新
一段时间寻找答案后,我发现这不是 casper 限制,而是引擎限制,这里是问题的当前状态
如果你想做类似的东西,我最终用纯 nodejs 和一些模块来做这就是我是怎么做的