4

我正在尝试创建一个节点服务器来生成 phantomjs 进程以创建屏幕截图。Grab.js 脚本在执行时工作正常,我已经确认它写入标准输出。问题是产生进程的节点代码只是挂起。我已经确认 phantomjs 在路径中。任何人都知道这里可能发生了什么或我如何解决这个问题?

这是渲染页面并将数据写入标准输出的 phantomjs 代码 (grab.js):

var page = require('webpage').create(),
  system = require('system'),
  fs = require('fs');

var url = system.args[1] || 'google.com';

page.viewportSize = {
  width: 1024,
  height: 1200
};

page.open(url, function() {
  var b64 = page.renderBase64('png');
  fs.write('/dev/stdout', b64, 'w');
  phantom.exit();
});

这是产生幻影进度并打印结果(挂起)的节点代码:

var http = require('http'),
  exec = require('child_process').exec,
  fs = require('fs');

exec('phantomjs grab.js google.com', function(error, stdout, stderr) {
  console.log(error, stdout, stderr);
});
4

2 回答 2

1

我在 exec 上遇到过类似的问题,然后改用 spawn 并且它起作用了。根据这篇文章当您希望子进程向 Node 返回巨大的二进制数据时使用 spawn,当您希望子进程返回简单的状态消息时使用 exec。 hth

于 2013-01-09T20:03:51.603 回答
0

我有同样的问题,就我而言,它不在nodejs中,而是在phantomjs(v2.1)中。

当 phantom 的 open 方法挂起时,这是一个已知问题。

此外,找到第二个链接(我猜是同一个人写的),其中作者指出 requestAnimationFrame 不适用于 tweenJs,这会导致冻结。PhantomJS 返回 unixtimestamp 但 tweenjs 期望它是 DOMHighResTimeStamp,等等......

技巧是注入 request-animation-frame.js (该文章中也提供了)

于 2019-04-11T06:47:28.360 回答