CasperJS передает данные обратно в PHP


CasperJS вызывается PHP с помощью команды exec(). После того, как CasperJS выполнит свою работу, такую как извлечение частей веб-страницы, как можно вернуть полученные данные обратно в PHP?

Author: Nyxynyx, 2013-04-06

2 answers

Вы можете перенаправить вывод из стандартного вывода в массив.

На этой странице говорится, что вы можете сделать:

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

Далее говорится:

Если выходной аргумент присутствует, то указанный массив будет заполнен каждой строкой выходных данных команды.

Таким образом, в принципе вы можете выполнить exec ('команда casperjs здесь, $array_here);

 9
Author: thealexbaron, 2013-04-10 04:47:54

Я думаю, что лучший способ перенести данные с CasperJS на другой язык, такой как PHP, - это запустить скрипт CasperJS в качестве сервиса. Поскольку CasperJS был написан поверх PhantomJS, CasperJS может использовать встроенный модуль веб-сервера PhantomJS, называемый Мангустом.

Для получения информации о том, как работает встроенный веб-сервер, см. здесь

Вот пример того, как скрипт 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+'/');
 25
Author: Hemerson Varela, 2014-08-25 15:46:48