9

CasperJS 正在由 PHP 使用exec()命令调用。在 CasperJS 完成检索网页部分等工作后,如何将检索到的数据返回给 PHP?

4

2 回答 2

26

我认为将数据从 CasperJS 传输到另一种语言(如 PHP)的最佳方式是将 CasperJS 脚本作为服务运行。因为 CasperJS 是基于 PhantomJS 编写的,所以 CasperJS 可以使用 PhantomJS 的嵌入式 Web 服务器模块,称为 Mongoose。

有关嵌入式 Web 服务器如何工作的信息,请参见此处

这是一个关于 CasperJS 脚本如何启动 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+'/');
于 2013-05-10T20:00:04.013 回答
9

您可以将输出从标准输出重定向到数组。

页面上,它说您可以执行以下操作:

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

它接着说:

如果存在输出参数,则指定的数组将填充命令的每一行输出。

所以基本上你可以执行 exec('casperjs command here, $array_here);

于 2013-04-10T04:47:54.857 回答