将CasperJS与PhantomJS webserver一起使用

时间:2013-12-15 22:46:14

标签: scope web-scraping phantomjs casperjs

我有一个casper脚本提交表单并擦除响应。

我试图建立一个“按需抓取”环境,我可以使用PhatomJS网络服务器将表单值发布到网址,然后在我的Casper脚本中使用该数据来抓取页面,然后在网页上打印出响应。我不知道如何将post变量传递给casper,然后将响应传递给Phantom。

继承我的基本Phantom / Casper结构:

var server = require('webserver').create();

server.listen(8080, function(request, response) {

phantom.casperPath = '/source/casper/casperjs';
phantom.injectJs('/source/casper/casperjs/bin/bootstrap.js');

var address = request.post.address;

var casper = require('casper').create();

    casper.start();

casper.then(function(){
        address = // want to access global address here
    result = begin(this, address);  //Contians Casper scrape code
});

casper.run(function(){
        this.exit();
});

response.statusCode = 200;
response.write(result);  // from casper
    response.close();
});

有没有办法从casper中的幻像访问变量,然后在我完成抓取后将数据传回?

1 个答案:

答案 0 :(得分:4)

除非你在PhantomJS中做了一些无法在CasperJS中完成的事情,否则你可能最好在CasperJS中启动服务器并在那里响应你的Casper函数的结果。

基于:https://stackoverflow.com/a/16489950/1096083

//includes web server modules
var server = require('webserver').create();


//start web server
var service = server.listen(ip_server, function(request, response) {

    var results;

    var address = request.post.address; // this is not working the way you would expect, needs a little help
    var casper = require('casper').create();

     casper.start(address, function() {
        // do some stuff with casper
        // store it in results
     });

     casper.then(function() {
        // do some more stuff with casper
        // store that in results too
     });

     casper.run(function() {
        response.statusCode = 200;
        response.write(results);
        response.close();              
     });

});

console.log('Server running at http://localhost:' + ip_server+'/');