是否有任何 node.js 的无头浏览器支持将呈现的页面转储到文件中?我知道phantomjs支持渲染到文件,但它不在 node.js 上运行。我知道zombie.js是一个node.js 无头浏览器,但它不支持渲染到文件。
6 回答
我怀疑你会发现任何能像 phantomjs 一样工作的东西。我只是将渲染视为异步后端进程,并在您的主 node.js 进程的子进程中执行幻像,并称之为一天。渲染网页是困难的,而且由于 phantom 是基于 WebKit 的,它实际上可以做到。我认为永远不会有一个节点库可以将网页渲染为不是基于现有浏览器渲染引擎构建的图形文件。但也许有一天 phantomjs 会更无缝地与 node.js 集成。
试试nightmare,它使用电子,它比 phantomjs 快得多,而且它的 API 很简单并且使用现代 ES6 javascript。
您可能会发现这很有帮助,尽管它不是特定于 javascript 的。
有一个名为“ wkhtmltopdf ”的基于 webkit 的工具,据我了解,它包括使用 QT web-kit 小部件的 javascript 支持。它以 PDF 格式输出页面的可视化表示(“屏幕截图”,如果您愿意的话)。
FWIW,这里也有 PHP 绑定:php-wkthmltox
这可能看起来像一个有点开销的解决方案......
您可以将 Mozilla Firefox 与 MozRepl 插件一起使用。基本上这个插件给你一个 telnet 端口到你的 Firefox,它允许你从外部控制浏览器。您可以打开 URL、截屏等。使用 Xvfb 服务器运行 Firefox 将以无头模式运行。
现在您只需使用 node.js 从外部控制浏览器。我见过一些例子,其中有人在 Firefox 的 chrome.js 中实现了类似 http 的接口。因此,您可以运行 http 命令来获取屏幕截图。然后,您可以使用来自 node.js 的 http 调用。这可能看起来很奇怪,但实际上可能对您有用。
我正在使用 Perl Mojolicious 在异步模式下运行一个稍微修改过的版本来触发屏幕截图。但是,有一个小问题。当需要插件时,它们确实可以工作,但是 Flash 通常会在它位于可见区域时被激活,这不会发生,因此电影/flash 的东西可能不会被初始化。
有一个名为 Node-Chimera 的项目。虽然它不如 Phantomjs 成熟,但它具有您提到的所有功能:它运行在本机 Nodejs 上,并允许您将页面呈现到文件中。存储库在这里:https ://github.com/deanmao/node-chimera 。它有一些例子可以完全满足你的需要。
Chrome 开发团队已经发布了可以在 node.js 中使用的Puppeteer 。它使用带有无头选项的 Chrome。