2013-12-15 24 views
3

我有一個提交表單並刪除響應的casper腳本。與PhantomJS網絡服務器一起使用CasperJS

我試圖設置一個「按需按需」環境,我可以使用PhatomJS網絡服務器將表單值發佈到一個URL,然後在我的Casper腳本中使用該數據來刮頁面,然後打印出響應網頁。我看不到我如何將post變量傳遞給casper,然後將響應傳遞迴Phantom。

我的繼承人基本幻影/卡斯帕結構:

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

有沒有辦法從幻象訪問卡斯帕的變量,然後將數據傳遞回來一次我做完刮?

回答

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+'/'); 
+0

有該頁面,即提出用這種方法記憶問題的答案在下面留言。你有沒有體驗過這個? –

+0

我之前使用的這個項目從來沒有真正實現過它的實驗階段 - 所以我無法驗證它。 –