是否可以从node.js运行PhantomJS作为命令行参数

时间:2012-06-29 10:03:14

标签: node.js phantomjs

我最近将测试从python中运行phantomJS作为命令行参数,我还没有完成它但是已经看到了例子。因为PhantomJS是从命令行运行的,所以这似乎是可能的。 PhantomJS吐出的结果会直接变成变量。

在我走这条路之前,在node.js中进行这项工作对我来说实际上更有用,它让我思考,我可以使用节点运行PhantomJS,因为程序从命令行运行并存储数据结果是PhantomJS通常会吐出变量吗?

我宁愿不使用phantomjs-node,因为它似乎使用了太多的技巧。

所有这一切的原因是能够在程序采取的另一个动作的同时运行PhantomJS,并将其记录的结果数据用于其他一些内容。

简单地说,你可以在python中运行系统命令行东西,我可以在node.js中做同样的事情吗?

干杯:)

编辑:我理解节点和幻像使用不同的js环境,这很酷,因为我只想将幻像作为自己的进程运行并将所有输出数据捕获到node.js变量中(数据将是一个数组对,字符串和浮点。)我不想用幻象“驱动”,我会制作加载的javascript文件,以便我想要的。我想要的只是幻象输出。 :)

3 个答案:

答案 0 :(得分:19)

来自NPM:https://npmjs.org/package/phantomjs

var path = require('path')
var childProcess = require('child_process')
var phantomjs = require('phantomjs')
var binPath = phantomjs.path

var childArgs = [
  path.join(__dirname, 'phantomjs-script.js'),
  'some other argument (passed to phantomjs script)'
]

childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
  // handle results
})

答案 1 :(得分:14)

我想你可以为Node.js创建一个简单的脚本来运行;在该脚本phantomjs脚本将作为子进程运行。您可以看到工作示例(以及某些文档的链接)in this answer。我想this discussion也可能对你有所帮助。

答案 2 :(得分:5)

作为Donald Derek答案的替代方案,您可以使用spawn功能。它允许您在生成后立即读取子进程的输出,而不是将输出缓冲并立即返回给您。

您可以详细了解here

来自the documentation的示例。

var spawn = require('child_process').spawn,
    ls    = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

ls.on('close', function (code) {
  console.log('child process exited with code ' + code);
});