CasperJS übergibt die Daten zurück an PHP

CasperJS wird von PHP mit einem exec() Befehl aufgerufen. Nachdem CasperJS seine Arbeit erledigt hat, beispielsweise Teile einer Webseite abzurufen, wie können die abgerufenen Daten an PHP zurückgegeben werden?

Sie können die Ausgabe von stdout an ein Array redirect.

Auf dieser Seite können Sie Folgendes tun:

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

Es fährt fort zu sagen:

Wenn das Ausgabeargument vorhanden ist, wird das angegebene Array mit jeder Ausgabezeile des Befehls gefüllt.

Also im Grunde können Sie exec (‘Casperjs Befehl hier, $ array_here);

Ich denke, der beste Weg, um Daten von CasperJS in eine andere Sprache wie PHP zu übertragen, ist die Ausführung von CasperJS-Skripten als Service. Da CasperJS über PhantomJS geschrieben wurde, kann CasperJS ein eingebettetes Webserver-Modul von PhantomJS namens Mongoose verwenden.

Informationen darüber, wie der eingebettete Webserver funktioniert, finden Sie hier

Hier ein Beispiel, wie ein CasperJS-Skript einen Webserver starten kann.

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