无头浏览器图像质量-无头Chrome,phantom js,slimer js

时间:2019-12-27 22:40:00

标签: phantomjs screenshot puppeteer google-chrome-headless headless-browser

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

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

请比较以下示例。

  1. https://en.wikipedia.org/wiki/Main_Page这个网站上,在左上角找到Wikipedia徽标。
  2. 这是无头的chrome通过操纵up拍摄的徽标的屏幕截图:

enter image description here

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

现在,如果我要使用计算机(无论是Windows,Mac,Linux)来截取屏幕截图,我都会得到质量非常好的屏幕快照,完全看起来像是真正的交易。

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

任何对此领域的启示将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:10)

将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' })
})();

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

enter image description here

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