javascript – 使用CasperJS提交表单并下载文件

注意我已经看过这些链接:

CasperJS and downloading a file via iFrame and JavaScript

Submitting a form with casperjs

我认为他们对我想要完成的事情是完美的,但我的努力没有结果.

我试图通过https://www.youtube2mp3.cc/#conversion下载一个mp3到我的文件系统,我一直试图通过CasperJS实现这个无头.

这是我的代码:

var casper = require('casper').create({verbose: true , logLevel: "debug" });
var fs = require('fs');
casper.start('http://www.video2mp3.de/');
casper.waitForSelector("#converter > form");
casper.fill('#converter > form', { video: 'https://www.youtube.com/watch?v=VoaUYcwEpSw' }, true);
casper.waitForSelector("#file");
var url = casper.getElementAttribute('#file','href');
var mp3 = fs.absolute("unstoppable.mp3");
casper.then(function() { this.download(url, mp3); });
casper.run();

我想我有点天真,认为这将是这么简单,但我找不到我的错误.调试器不是很有帮助.我一直在我的终端中使用以下命令运行我的文件:

casperjs –web-security = no sample.js

任何帮助,将不胜感激.

最佳答案 回答:

我设法通过使用屏幕捕获来调试我的代码.如果有人有兴趣,这是最终结果:

var casper = require('casper').create({verbose: true , logLevel: "debug" });
var fs = require('fs');
var url = "https://www.youtube2mp3.cc/"
casper.start(url);
casper.then(function(){
    this.fill('#converter > form', { 'video': 'https://www.youtube.com/watch?v=VoaUYcwEpSw' }, true);
});
casper.wait(2000);//this is probably what I was missing, 
                //a screen capture showed that I wasn't waiting long enough
casper.then(function(){
    this.waitForSelector("#file", function(){
        var url = casper.getElementAttribute('#file','href');
        var mp3 = fs.absolute("unstoppable.mp3");
        casper.then(function() { this.download( url, mp3); });
    });
});
casper.run();

下载的文件将位于脚本的任何位置.
我在用:

> CasperJS 1.1.2
> PhantomJS 2.1.1

在MacOSX上运行El Capitan 10.11.6(15G1108)

点赞