Headless 浏览器图像质量 - Headless chrome、phantom js、slimmer js

Bru*_*one 13 javascript webautomation node.js google-chrome-headless puppeteer

我正在寻找有关无头浏览器中发生的事情的更多信息。过去我一直在使用不同的无头浏览器,例如slimmerJSPhantom.jsHeadless Chrome,目的是在不同的站点上截取屏幕截图。

我从来没有生成过与您在浏览器中看到的相似的真实、清晰质量的图像,它看起来像是一种工具限制,例如,这是您可以从中获得的最高质量,但我想了解为什么,以及可能如何使它变得更好。

请比较下面的例子。

  1. 在这个网站https://en.wikipedia.org/wiki/Main_Page 中,在左上角找到维基百科标志。
  2. 这是无头 chrome 通过 puppeteer 截取的那个标志的截图:

在此处输入图片说明

如果将真实网站与屏幕截图进行比较,您可以看到图像是如何模糊的。在这个例子中,它只是一个图像,但这也发生在 HTML 文本中。

现在,如果我要使用我的计算机截取屏幕截图,无论是 windows、mac 还是 linux,我都会得到一个质量非常好的屏幕截图,看起来完全像真正的交易。

那么为什么会发生这种情况呢?我尝试了所有标准的事情,例如在每个库中设置最高质量的屏幕截图,并设置一个足够大的视口,以便屏幕截图具有合适的分辨率。这真的是您可以从无头浏览器屏幕截图中获得的最高质量吗?

对这方面的任何启示将不胜感激。谢谢!

har*_*ded 13

将 deviceScaleFactor 设置为 2(又名模拟视网膜),您将获得更好的结果:

(async () => {
    const browser = await puppeteer.launch({ headless: false })
    const page = await browser.newPage();
    await page.setViewport({width: 800, height: 800, deviceScaleFactor: 2});
    await page.goto('https://en.wikipedia.org/wiki/Main_Page')

    await page.screenshot({ fullPage: true, path: 'test.png' })
})();
Run Code Online (Sandbox Code Playgroud)

如您所见,您可以获得非常不错的结果:

在此处输入图片说明

来源:https : //github.com/puppeteer/puppeteer/issues/571