CasperJS вызывается PHP с помощью команды exec()
. После того, как CasperJS выполняет свою работу, например, извлечение частей веб-страницы, как вернуть полученные данные обратно на PHP?CasperJS передаёт данные обратно на PHP
9
A
ответ
8
Вы можете перенаправить вывод из stdout в массив.
На this странице он говорит, что вы можете сделать:
string exec (string $command [, array &$output [, int &$return_var ]])
Он продолжает говорить:
Если выходной аргумент присутствует, то указанный массив будет заполнен каждой линии вывод из команды.
Так что в принципе вы можете выполнить exec ('команда casperjs здесь, $ array_here);
24
Я думаю, что лучший способ передачи данных из CasperJS на другой язык, такой как PHP, запускает скрипт CasperJS в качестве службы. Поскольку CasperJS был написан над PhantomJS, CasperJS может использовать встроенный веб-серверный модуль PhantomJS под названием Mongoose.
Для получения информации о том, как работает встроенный веб-сервер, см here
Вот пример о том, как сценарий CasperJS может запустить веб-сервер.
//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+'/');
Смежные вопросы
- 1. Как отправить данные обратно на узел из casperjs?
- 2. Vue передаёт данные компоненту
- 3. Spring MVC передаёт объект JSP и обратно
- 4. PHP не передаёт переменную
- 5. Vue передаёт данные дочернему компоненту
- 6. PHP не передаёт переменную на другую страницу
- 7. React Redux не передаёт данные
- 8. rsync --sparse передаёт все данные
- 9. iOS передаёт данные через несколько контроллеров
- 10. AsyncHttpClient не передаёт значение php
- 11. Данные CasperJS не отображаются
- 12. ajax не передаёт параметры php
- 13. Передаёт строку в массив PHP
- 14. Matlab передаёт данные другому графическому интерфейсу
- 15. Переадресация Codeigniter не передаёт переменные данные
- 16. MVC передаёт данные из модели для просмотра
- 17. python Очередь не передаёт правильные данные
- 18. EmberJS передаёт переменную на макет
- 19. PHP не возвращает полные данные обратно питона
- 20. Отправить данные с php на python и обратно
- 21. Отправить данные с PHP на VPS и обратно
- 22. Android передаёт данные из фрагмента в фрагмент
- 23. JQuery передаёт данные в функцию ajax
- 24. CakePHP передаёт данные компоненту до создания экземпляра
- 25. Android передаёт данные из MainActivity в фрагменты
- 26. xamarin.forms - центр обмена сообщениями передаёт данные на вход
- 27. Почему мой Ajax передаёт «неопределенные» данные на мой SQL-сервер
- 28. Платеж Навигационная форма php на шлюз оплаты и обратно на php (ответ обратно на страницу php)
- 29. PHP-casperjs получать внутренний текст
- 30. Настройка php-casperjs с композитором
Хотя я согласен, что это хороший метод в теории, на практике Каспер не освобождает phantomjs ресурсов, как представляется, будет линейно увеличивается использование памяти при каждом запросе. Я попытался добавить '' '' casper.clear() '' 'и даже взломать clear() на' '' вызов this.page.close() '' '(со страницы clear()). В то время как вызов close, похоже, помогает ему не решает проблему. – danmux