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
9
A
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+'/');
Powiązane problemy
- 1. Ajax przekazuje dane do skryptu php
- 2. Przekaż dane z powrotem do poprzedniego kontrolera.
- 3. PHP przekazuje dodatkowe parametry do funkcji zwrotnej
- 4. CasperJs ładuje dane json z lokalnego pliku
- 5. Dane w tabeli z powrotem karetki?
- 6. bezpiecznie przekształcić dane z powrotem w dane.frame
- 7. Android - Jak wysłać dane z powrotem do aktywności wywołującej
- 8. angular2 dane karmienia powrotem do `<template>` z `[ngTemplateOutlet]`
- 9. Odległość Levenshteina z powrotem śledzenia w PHP
- 10. przesyłaj dane do skryptu PHP z iOS
- 11. Alternatywa CasperJS do użytku z Cucumber.js
- 12. Spark Scala uzyskać dane z powrotem z rdd.foreachPartition
- 13. PHP dopasowują dane do tablicy
- 14. Django przekazuje obiekt z widoku do następnego do przetwarzania
- 15. casperJS nie zalogowaniu do konsoli
- 16. Iteracja na siatce z CasperJS
- 17. Jak wysłać dane z powrotem przez popViewControllerAnimated dla Swift?
- 18. Sinatra przekazuje zmienne do erbu
- 19. MSBuild przekazuje parametry do CallTarget
- 20. Wysyłanie zmiennych PHP tam iz powrotem między stronami
- 21. Node.js przekazuje zmienną do trasy
- 22. Magento przekazuje bieżący identyfikator produktu do modułu
- 23. Jak przekazywać dane z webview z powrotem do macierzystej aplikacji na Androida
- 24. Jak prawidłowo odkażać dane otrzymane z obszaru tekstowego, po wyprowadzeniu go z powrotem do obszaru tekstowego?
- 25. Java ajax przekazuje wartości z jsp do servletu
- 26. Załaduj ponownie UITableView podczas nawigacji z powrotem?
- 27. Jak przekazać dane POST do PHP-CGI?
- 28. Migracja serializacji PHP z PHP 5.3 do PHP 5.6
- 29. Node.js url.parse z powrotem do ciągu znaków
- 30. CTE, aby przejść z powrotem do hierarchii?
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