CasperJS将数据传回给PHP

CasperJS被PHP用exec()命令调用。 在CasperJS完成其工作(如检索网页的某些部分)之后,如何将检索到的数据返回给PHP?

你可以将输出从stdoutredirect到一个数组。

在这个页面上它说你可以这样做:

 string exec ( string $command [, array &$output [, int &$return_var ]] ) 

它继续说:

如果输出参数存在,那么指定的数组将被命令的每一行输出填充。

所以基本上你可以执行exec('casperjs命令在这里,$ array_here);

我认为将数据从CasperJS转移到另一种语言(如PHP)的最佳方式是将CasperJS脚本作为服务运行。 因为CasperJS已经被PhantomJS所编写,所以CasperJS可以使用称为Mongoose的PhantomJSembedded式Web服务器模块。

有关embedded式Web服务器如何工作的信息,请参阅此处

这里有一个关于CasperJS脚本如何启动Web服务器的例子。

 //define ip and port to web service var ip_server = '127.0.0.1:8585'; //includes web server modules var server = require('webserver').create(); //start web server var service = server.listen(ip_server, function(request, response) { var links = []; var casper = require('casper').create(); function getLinks() { var links = document.querySelectorAll('h3.r a'); return Array.prototype.map.call(links, function(e) { return e.getAttribute('href') }); } casper.start('http://google.fr/', function() { // search for 'casperjs' from google form this.fill('form[action="/search"]', { q: 'casperjs' }, true); }); casper.then(function() { // aggregate results for the 'casperjs' search links = this.evaluate(getLinks); // now search for 'phantomjs' by filling the form again this.fill('form[action="/search"]', { q: 'phantomjs' }, true); }); casper.then(function() { // aggregate results for the 'phantomjs' search links = links.concat(this.evaluate(getLinks)); }); // casper.run(function() { response.statusCode = 200; //sends results as JSON object response.write(JSON.stringify(links, null, null)); response.close(); }); }); console.log('Server running at http://' + ip_server+'/');