CasperJS est appelé par PHP à l'aide d'un exec() de commande. Après CasperJS fait son travail comme récupérer des parties d'une page web, comment les données récupérées être retourné PHP?
Je pense que la meilleure façon de transférer des données à partir de CasperJS à un autre langage comme le PHP est en cours d'exécution CasperJS script en tant que service. Parce que CasperJS a été écrit sur PhantomJS, CasperJS pouvez utiliser un serveur web intégré module de PhantomJS appelé Mangouste.
Pour plus d'informations sur comment fonctionne le serveur web incorporé, voir ici
Ici un exemple sur la façon dont un CasperJS script peut démarrer un serveur web.
//define ip and port to web servicevar ip_server ='127.0.0.1:8585';//includes web server modulesvar server =require('webserver').create();//start web servervar service = server.listen(ip_server,function(request, response){var links =[];var casper =require('casper').create();function getLinks(){var links = document.querySelectorAll('h3.r a');returnArray.prototype.map.call(links,function(e){return e.getAttribute('href')});}
casper.start('http://google.fr/',function(){//search for 'casperjs' from google formthis.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 againthis.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+'/');
Que je suis d'accord que c'est une bonne technique dans la théorie, dans la pratique, casper ne libère pas phantomjs de ressources, il semble être linéaire de l'augmentation de l'utilisation de la mémoire avec chaque demande. J'ai essayé d'ajouter casper.clear() et même le piratage clear() pour call this.page.close() (de l'intérieur clear()) de la page. Tout en appelant à proximité apparaît et ça ne résout pas le problème.
Vous pouvez rediriger la sortie de la sortie standard vers un tableau.
Sur cette page il est dit que vous pouvez faire:
Il continue à dire:
Donc, fondamentalement, vous pouvez le faire exec('casperjs commande ici, $array_here);
OriginalL'auteur thealexbaron
Je pense que la meilleure façon de transférer des données à partir de CasperJS à un autre langage comme le PHP est en cours d'exécution CasperJS script en tant que service. Parce que CasperJS a été écrit sur PhantomJS, CasperJS pouvez utiliser un serveur web intégré module de PhantomJS appelé Mangouste.
Pour plus d'informations sur comment fonctionne le serveur web incorporé, voir ici
Ici un exemple sur la façon dont un CasperJS script peut démarrer un serveur web.
casper.clear()
et même le piratage clear() pourcall this.page.close()
(de l'intérieur clear()) de la page. Tout en appelant à proximité apparaît et ça ne résout pas le problème.OriginalL'auteur Hemerson Varela