Javascript 为什么casperjs download()函数没有';不行?

Javascript 为什么casperjs download()函数没有';不行?,javascript,phantomjs,casperjs,Javascript,Phantomjs,Casperjs,为什么下载()在我的脚本中不起作用 下载失败,即使是冗长的,也不会显示错误 var casper = require('casper').create({ verbose: true, logLevel: "debug", pageSettings: { webSecurityEnabled: false } }); casper.start('https://developer.android.com/sdk/index.html', func

为什么下载()在我的脚本中不起作用

下载失败,即使是冗长的,也不会显示错误

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();

我不明白,它应该可以工作。

确保设置了userAgent。我还在evaluate中使用了Javascript,而不是
\uuuuutils\uuuuu
。我进行了测试,结果如下:

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

确保设置了userAgent。我还在evaluate中使用了Javascript,而不是
\uuuuutils\uuuuu
。我进行了测试,结果如下:

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

使用内置的casper.download()函数时,我也遇到了问题

具体来说,casper.download()似乎无法将检索到的内容随机写入磁盘。我在尝试下载作为附件发送的XML文件时遇到过这种情况(内容处置:附件)

这可能与以下问题有关:

以下是我的解决方法。我变了

casper.download(downlUrl, downlFileName);
致:


现在,您将在文件系统上保存一个base64编码的文件。您可以使用bash base64()等工具轻松地将其转换回其格式

使用内置的casper.download()函数时,我也遇到了问题

具体来说,casper.download()似乎无法将检索到的内容随机写入磁盘。我在尝试下载作为附件发送的XML文件时遇到过这种情况(内容处置:附件)

这可能与以下问题有关:

以下是我的解决方法。我变了

casper.download(downlUrl, downlFileName);
致:


现在,您将在文件系统上保存一个base64编码的文件。您可以使用bash base64()等工具轻松地将其转换回其格式

抱歉耽搁了。这对我不起作用。你试过下载更大的文件吗?我认为phantomjs的下载时间不能超过x秒。由于我的连接速度可能比你的慢,我无法使用,但你可以使用。你要下载的文件有多大?如果脚本超时,可以更改和。尽可能多地提供细节。抱歉耽搁了。这对我不起作用。你试过下载更大的文件吗?我认为phantomjs的下载时间不能超过x秒。由于我的连接速度可能比你的慢,我无法使用,但你可以使用。你要下载的文件有多大?如果脚本超时,可以更改和。尽可能多地提供细节。这是如何写入文件内容的?它不是只写字符串URL吗?@SeanClark,直接来自base64encode函数的文档:“使用客户端XMLHttpRequest同步地使用base64算法对资源进行编码。”(来源)它无论如何都不起作用。对于phantomJS,文件不能太大>2MB。这是一个狗屎problem@simonemainardi你有一个额外的
在你的
downlur
上。这对我来说很有用。大文件成功率从20%提高到90%以上。这是如何写入文件内容的?它不是只写字符串URL吗?@SeanClark,直接来自base64encode函数的文档:“使用客户端XMLHttpRequest同步地使用base64算法对资源进行编码。”(来源)它无论如何都不起作用。对于phantomJS,文件不能太大>2MB。这是一个狗屎problem@simonemainardi你有一个额外的
在你的
downlur
上。这对我来说很有用。使用大型文件的成功率从20%提高到90%以上。