我该选择哪一种无头浏览器?

问题描述 投票:0回答:2

前几天我们使用phantomjs通过服务器端prince工具生成pdf。现在我们喜欢将无头浏览器从 phantomjs 更改为另一个。

我研究了哪一个可以快速渲染 phantomjs 和 puppeteer。在我的案例中,报告应用程序生成 PDF,只有我使用 puppeteer 和 phantomjs 对其进行测试。与 puppeteer 相比,phantomjs 可以快速处理 HTML。

然后我学习 google-chrome-headless 选项来生成 PDF。它看起来像一个 Chrome 浏览器 GUI 应用程序的内置模块。我正在使用 Node.js 应用程序。我在命令行中使用以下命令

chrome --headless --disable-gpu --print-to-pdf <src_url>

我注意到 --disable-gpu 选项,其他工具没有它。

  • 此选项与其他两个无头浏览器工具(phantomjs、puppeteer)有何不同?
  • 我可以使用哪个工具来生成 pdf?
node.js phantomjs pdf-generation puppeteer google-chrome-headless
2个回答
10
投票

以下是这些工具的作用,

  • phantomJS 是一个可编写脚本的 Headless WebKit。类似于 Chromium 浏览器。 已弃用,项目已存档。
  • chromium:Chromium 是 Google 的开源网络浏览器项目。它本身就是一个功能齐全的浏览器,并为 Google Chrome 浏览器提供了绝大多数代码。
  • chromium-headless:Headless Chrome 在 Chrome 59 中发布。这是一种在无头环境中运行 Chrome 浏览器的方法。本质上,无需 Chrome 即可运行 Chrome!它将 Chromium 和 Blink 渲染引擎提供的所有现代 Web 平台功能引入命令行。
  • Puppeteer:Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chrome 或 Chromium。 Puppeteer 默认情况下运行无头,但可以配置为运行完整(非无头)Chrome 或 Chromium。

您可以使用 puppeteer 控制 chromium 和无头 chromium 的实例。当然,它允许您提供参数并使用该 API 生成 PDF。

您可以使用 Chrome CLI 和 Puppeteer 控制相同的 API。

以下是如何使用 chromium headless 生成网站的 pdf。

chrome --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/

这里使用 puppeteer 也是一样的,

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.chromestatus.com/');
  await page.pdf({path: 'chromestatus.pdf', format: 'A4'});
  await browser.close();
})();

0
投票

我使用 PhantomJS 很长一段时间来生成我的 wiki 的屏幕截图以在 VR 中使用。不幸的是,正如前面提到的,该项目不再维护,也没有过渡。

正如其他人提到的,chrome 是一个很好的选择,但在编程的情况下,我自己的偏好是通过使用容器来最小化对运行环境的假设。对于

alpine-chrome
描述为“基于 alpine 官方镜像构建的 Chrome Headless docker 镜像” https://github.com/Zenika/alpine-chrome?tab=readme-ov-file#print-a-pdf 是一个很棒的解决方案,相对较小、清晰的示例,包括您可能需要的示例。

© www.soinside.com 2019 - 2024. All rights reserved.