产生的phantomjs过程挂起

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了产生的phantomjs过程挂起相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个节点服务器,该服务器生成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);
});
答案

我有与exec类似的问题,然后切换到使用spawn而且它工作。根据这个article,当你希望子进程将巨大的二进制数据返回给Node时使用spawn,当你希望子进程返回简单的状态消息时使用exec。心连心

另一答案

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

当幻影的开放方法挂起时,It's known problem

另外,找到second link(我猜同一个人写的),其中作者指出requestAnimationFrame与tweenJs不能很好地工作,这会导致冻结。 PhantomJS返回unixtimestamp但是tweenjs期望它是DOMHighResTimeStamp,依此类推......

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

以上是关于产生的phantomjs过程挂起的主要内容,如果未能解决你的问题,请参考以下文章

多个 PhantomJS 实例挂起

如何在 PhantomJS 中分析 javascript

使用 PhantomJS 嵌入网页的所有图像会产生警告但有效

Python Windrose 挂起大型数据集,不会崩溃或产生结果

用webdriver+phantomjs实现无浏览器的自动化过程

在导航抽屉关闭之前加载片段