将值从PhantomJS传递到node.js

时间:2012-10-19 17:50:22

标签: node.js phantomjs

我有一个phantomJS脚本,它通过node.js脚本中的exec()调用执行。 现在我需要从PhantomJS脚本返回一个字符串,以便可以在节点中使用它 有没有办法实现这个目标?

节点应用

child = exec('./phantomjs dumper.js',
    function (error, stdout, stderr) {
        console.log(stdout, stderr);      // Always empty
    });

dumper.js(Phantom)

var system = require('system');
var page = require('webpage').create();
page.open( system.args[1], function (status) {
    if (status !== 'success') {
        console.log('Unable to access the network!');
    } else {

        return "String"; // Doesn't work
    }
    phantom.exit('String2'); //Doesn't work either
});

2 个答案:

答案 0 :(得分:10)

是的,只需使用JSON.stringify(result)从PhantomJS输出JSON字符串,并使用JSON.parse(stdout)在node.js中解析它。

就像这样:

<强> Node.js的:

child = exec('./phantomjs dumper.js',
    function (error, stdout, stderr) {
        console.log(stdout, stderr);      // Always empty
        var result = JSON.parse(stdout);
    }
);

<强> PhantomJS:

var system = require('system');
var page = require('webpage').create();
page.open( system.args[1], function (status) {
    if (status !== 'success') {
        console.log('Unable to access the network!');
    } else {

        console.log(JSON.stringify({string:"This is a string", more: []}));
    }
    phantom.exit();
});

Here is some boilerplate了解如何使用PhantomJS进行刮擦。

答案 1 :(得分:0)

更简单的方法(如果你有选择)是使用NPM模块phantom而不是phantomjs。这允许您直接在nodejs中访问浏览器,而不是维护单独的脚本。