CasperJS viene chiamato da PHP utilizzando un comando exec()
. Dopo che CasperJS fa il suo lavoro come recuperare parti di una pagina web, come possono essere restituiti i dati recuperati a PHP?CasperJS che passa dati a PHP
9
A
risposta
8
È possibile reindirizzare l'output da stdout a un array.
Su this pagina che dice che si può fare:
string exec (string $command [, array &$output [, int &$return_var ]])
E continua dicendo:
Se l'argomento di uscita è presente, allora la matrice specificata sarà riempito con ogni linea di uscita dal comando.
Quindi in pratica si può eseguire exec ('comando casperjs qui, $ array_here);
24
Penso che il modo migliore per trasferire i dati da CasperJS a un'altra lingua come PHP sia eseguire lo script CasperJS come servizio. Poiché CasperJS è stato scritto su PhantomJS, CasperJS può utilizzare un modulo server Web incorporato di PhantomJS denominato Mongoose.
Per informazioni su come funziona il server Web incorporato vedere here
Ecco un esempio di come uno script CasperJS può avviare un server 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+'/');
Problemi correlati
- 1. Passa dati da jQuery a PHP per un post ajax
- 2. Passa i dati del modulo a un'altra pagina con php
- 3. Sviluppatore PHP-MySQL che passa a PostgreSQL. Cosa devo sapere?
- 4. Nodo EJS che passa i dati a un inclusione
- 5. jQuery: passa le variabili a php
- 6. passa variabile da ajax a php
- 7. MSBuild che passa i parametri a CallTarget
- 8. PHP che passa una variabile con reindirizzamento di intestazione
- 9. jQuery Ajax che passa valore su php stessa pagina
- 10. router ui angolare che passa dati tra stati senza URL
- 11. AngularJS che passa i dati al bootstrap modale
- 12. Jquery che passa i dati alla funzione jax
- 13. CasperJS Non riesci a trovare variabile $
- 14. Storyboard iOS che passa i dati di navigazioneViewController
- 15. Laravel che passa i dati utilizzando ajax al controller
- 16. call_user_func_array che passa gli argomenti a un costruttore
- 17. Come passare i dati dai metodi "allora" in CasperJS?
- 18. passa il valore dell'opzione selezionata da select a php
- 19. Ottenere dati remoti per una pagina utilizzando AJAX in CasperJS
- 20. passa a crontab una variabile e la leggi da PHP?
- 21. Android Intent che passa oggetto parcelable e passa stringa Json
- 22. Swift: passa i dati a una chiusura che cattura il contesto
- 23. Richieste simultanee CasperJS
- 24. Passa la variabile javascript al codice php?
- 25. node.js che passa le variabili
- 26. Parametro che passa con initWithNibName:
- 27. Attendi che un elemento abbia un testo specifico con CasperJS
- 28. CasperJS - download del file generato senza URL
- 29. Che cosa significa la funzione "test.begin()" in CasperJS?
- 30. Passa array di dati da $ $ POST angolare
Mentre sono d'accordo che si tratta di una buona tecnica, in teoria, in pratica casper non liberare phantomjs risorse, non sembra essere in aumento in modo lineare l'utilizzo di memoria con ogni richiesta. Ho provato ad aggiungere '' 'casper.clear()' '' e anche a hacking clear() a '' 'chiama this.page.close()' '' (dalla pagina clear()). Mentre chiamare close sembra aiutarlo a non risolvere il problema. – danmux