10

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

节点应用:

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

dumper.js(幻影)

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
});
4

2 回答 2

11

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

像这样的例子:

节点.js:

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

幻影JS:

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();
});

这是一些关于如何使用 PhantomJS 进行抓取的样板文件。

于 2012-10-19T17:52:07.140 回答
0

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

于 2015-12-11T03:32:10.260 回答