2011-08-18 36 views
28

是否有任何node.js的无头浏览器支持将渲染后的页面转储到文件中?我知道phantomjs支持渲染到文件,但它不能在node.js上运行。我知道zombie.js是一个node.js无头浏览器,但它不支持对文件进行渲染。无头node.js javascript浏览器的截图功能?

+0

您是否在寻找使用jsdom的项目?我知道有一些这样做,只是忘了名字 – wesbos

+2

这里有一个新的幻影节点包装,可以让你从节点运行phantomjs ..还没有尝试过,但它看起来很有前途:https://github.com/sgentle/phantomjs-node – ZimSystem

+2

Wes,jsdom创建和操作文档对象模型,它们完全是非图形内存数据结构。这个问题是关于完全呈现一个图形网页,这完全是另一回事。 –

回答

3

这可能看起来像一点点开销的解决方案......

您可以使用Mozilla Firefox浏览器与MozRepl插件。基本上这个插件为您提供了一个到您的Firefox的telnet端口,它允许您从外部控制浏览器。您可以打开网址,截屏等。 使用Xvfb服务器运行Firefox将以无头模式运行它。

现在,你只需要控制从node.js中的浏览器之外我见过一些例子,其中有人在Fi​​refox的chrome.js中实现了一个类似http的接口。所以你可以运行一个http命令来获取屏幕截图。然后您可以使用node.js中的http调用。这可能看起来很奇怪,但实际上却可能适合你。

我在异步模式下运行在生产中稍作修改的版本使用Perl Mojolicious触发截图。但是,有一个小问题。当需要插件时,它们可以工作,但是Flash通常在可见区域时被激活,这不会发生,所以电影/闪光灯事件可能不会被初始化。

12

我怀疑你会发现什么,是要工作以及phantomjs。我只会将渲染视为异步后端进程,并在您的主要node.js进程的子进程中执行phantom并称之为一天。渲染一个网页很难,因为幻影是基于WebKit的,它实际上可以做到。我不认为会有一个节点库能够将网页渲染到不是基于现有浏览器渲染引擎构建的图形文件。但是也许有一天,phantomjs将更加无缝地与节点集成。

+32

挑战接受 –

+6

我完全期待后续链接@David Murdoch。 – NateDSaint

+0

今天我砍了一下,并没有达到我所希望的那么远。我正在计划将jsdom,node-canvas和html2canvas混合在一起。我没有意识到jsdom没有实现尺寸。 :-( –

3

您可能会发现这是很有帮助的,但它不是特定的JavaScript。

有一个称为“wkhtmltopdf”我理解包括使用QT webkit的部件JavaScript支持基于Webkit的工具。它以PDF格式输出可视化表示(如果您愿意,可以截图)。

FWIW,也有在这里讨论PHP绑定:php-wkthmltox

+0

如果“渲染到文件”的意思是“截图“,我认为这是作者的意图,这是一个体面的答案。:) –

1

有一个叫做节点奇美拉项目。虽然它不像Phantomjs那样成熟,但它具有您提到的所有功能:它在本机Nodej上运行,并允许您将页面呈现为文件。存储库位于:https://github.com/deanmao/node-chimera。它有一些例子可以满足你的需求。

+4

看起来这个项目不再被维护了 –

5

尝试nightmare,它使用的电子,它比phantomjs方式速度更快,它的API方便,采用现代ES6的JavaScript。

1

的Chrome浏览器开发团队已经发布了Puppeteer可以在节点使用。它使用Chrome与无头选项。