为什么casperjs download()函数不起作用?

时间:2013-12-22 12:43:49

标签: javascript phantomjs casperjs

为什么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();

应该有用,我不明白。

2 个答案:

答案 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();
});