为什么download()在我的脚本中不起作用?
下载失败,即使详细也没有显示错误。
var casper = require('casper').create({
verbose: true,
logLevel: "debug",
pageSettings: {
webSecurityEnabled: false
}
});
casper.start('https://developer.android.com/sdk/index.html', function() {
var url = this.evaluate(function() {
var selector = '#win-tools';
return __utils__.findOne(selector).getAttribute('href');
});
this.download(url, 'apps/android-sdk.exe');
});
casper.run();
应该有用,我不明白。
答案 0 :(得分:4)
使用内置的casper.download()函数时,我也遇到了麻烦。
具体来说,casper.download()似乎随机地无法将检索到的内容写入磁盘。我在尝试下载作为附件发送的XML文件时遇到过这种情况(Content-Disposition:attachment)
这可能与问题有关:https://github.com/n1k0/casperjs/issues/255
以下是我的工作。我改变了
casper.download(downlUrl, downlFileName);
要:
fs.write(downlFileName, this.base64encode(downlUrl)), 'w');
现在,您最终将在文件系统上保存base64编码的文件。您可以使用bash base64(http://linux.die.net/man/1/base64)等工具轻松将其转换回格式。
答案 1 :(得分:1)
确保您设置了userAgent。我还在评估中使用了Javascript而不是__utils__
。我测试过,这有效:
var casper = require("casper").create ({
waitTimeout: 5000,
stepTimeout: 5000,
verbose: true,
viewportSize: {
width: 1400,
height: 768
},
pageSettings: {
webSecurityEnabled: false
},
onWaitTimeout: function() {
this.echo('** Wait-TimeOut **');
},
onStepTimeout: function() {
this.echo('** Step-TimeOut **');
}
});
casper.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');
casper.start('https://developer.android.com/sdk/index.html');
casper.then(function() {
var url = this.evaluate(function() {
var selector = document.getElementById('win-tools');
return selector.getAttribute('href');
});
this.echo('URL: ' + url);
this.download(url, 'apps/android-sdk.exe');
});
casper.run(function() {
this.echo('Done.').exit();
});