2013-04-06 12 views
9

CasperJS jest wywoływane przez PHP za pomocą polecenia exec(). Po tym jak CasperJS wykonuje swoją pracę, np. Pobierając części strony internetowej, w jaki sposób odzyskiwane dane mogą zostać zwrócone z powrotem do PHP?CasperJS przekazuje dane z powrotem do PHP

Odpowiedz

8

Możesz przekierować wyjście ze standardowego wyjścia do tablicy.

Na this stronie jest napisane można zrobić:

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

To mówi dalej:

Jeśli argument wyjściowy jest obecny, wówczas określona tablica będzie wypełniona każdym wierszu wyjście z polecenia.

Zasadniczo można więc wykonać exec (polecenie "casperjs tutaj, $ array_here);

24

Myślę, że najlepszym sposobem przesyłania danych z CasperJS do innego języka, takiego jak PHP, jest uruchamianie skryptu CasperJS jako usługi. Ponieważ CasperJS został napisany przez PhantomJS, CasperJS może używać wbudowanego modułu serwera WWW PhantomJS o nazwie Mongoose.

Aby uzyskać informacje o tym, jak działa wbudowany serwer internetowy zobaczyć here

Oto przykład o tym, jak można uruchomić skrypt CasperJS serwera WWW.

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

Choć zgadzam się, że jest to dobra technika w teorii, w praktyce Casper nie uwolni phantomjs zasobów, wydaje się być liniowo zwiększenie wykorzystania pamięci z każdego żądania. Próbowałem dodać '' 'casper.clear()' '' i nawet hackowanie clear() do '' 'call this.page.close()' '' (od wewnątrz strony clear()). Podczas wywołania close pojawia się, aby pomóc mu nie rozwiązuje problemu. – danmux

Powiązane problemy