我正在尝试创建一个节点服务器来生成phantomjs进程以创建屏幕截图。 grab.js脚本在执行时工作正常,我已经确认它写入stdout。问题是产生进程的节点代码只是挂起。我已经确认phantomjs正在路上。任何人都知道这里可能会发生什么,或者我如何解决这个问题?
这是渲染页面并将数据写入stdout的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);
});
答案 0 :(得分:1)
我与exec有类似的问题,然后切换到使用spawn而且它工作。 根据这个article,当你希望子进程将巨大的二进制数据返回给Node时使用spawn,当你希望子进程返回简单的状态消息时使用exec。 HTH
答案 1 :(得分:0)
我遇到了同样的问题,就我而言,这不是在nodejs中,而是在phantomjs(v2.1)中。
It's known problem,当幻影的打开方法挂起时。
此外,发现second link(我猜是同一人写的)中,作者指出requestAnimationFrame与tweenJs不能很好地工作,从而导致冻结。 PhantomJS返回unixtimestamp,但tweenjs希望它是DOMHighResTimeStamp,依此类推...
技巧是注入request-animation-frame.js(该文章中也提供了此内容)