使用Playwright启用无头Chromium的硬件加速

3
我目前正在使用Github Actions、Playwright和无头Chromium组合进行一些端对端测试。现在,我的测试需要相当长的时间(简单测试需要几十秒),这不是理想的情况,特别是考虑到我的用例需要经常运行许多这样的测试。经过一些研究,我发现了这个链接,很多人似乎都在参考它:https://michelkraemer.com/enable-gpu-for-slow-playwright-tests-in-headless-mode/ 它提供了如何在无头模式下启用GPU硬件加速以加快Playwright测试速度的说明。然而,无论我做什么,硬件加速都无法在无头模式下启用。在有头模式下,它实际上是默认启用的,一切都更加流畅。以下是我的代码:
(async () => {
    let browser = await chromium.launch({
        args: ['--use-gl=desktop', '--use-angle=default'],
    });
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto('chrome://gpu');
    await page.pdf({
        path: 'page.pdf',
    });
})();

我已经尝试了--use-gl=egl,但无济于事。每次,pdf都显示仅软件,硬件加速不可用。此时我怀疑可能是我的笔记本电脑硬件出了问题,但我不知道如何找出确切的原因。我还确认了我的命令行参数实际上是通过Playwright传递的,因为使用--window-size确实改变了窗口大小,--disable-software-rasterization似乎也确实禁用了一些东西。
更新:对我来说,--use-gl=swiftshader没有任何区别。另外,我认为我的问题在于--ignore-gpu-blocklist,因为即使我包含它,该标志仍然保持禁用,这让我相信某些东西正在强制我的GPU不提供硬件加速。如果有帮助的话,我的笔记本电脑的GPU是Nvidia 2060,尽管我的代码在通过GitHub Action远程运行时也无法工作。
这里是chrome://gpu的结果的pastebin:https://pastebin.com/U6m0pcjY
这里是添加--disable-software-rasterization后的结果的pastebin:https://pastebin.com/uDfQuqQq
非常感谢您的帮助!
2个回答

2
你可以尝试以下代码-
    // @ts-check
const playwright = require('playwright');
(async () => {
  // Try to add 'playwright.firefox' to the list ↓
  for (const browserType of [playwright.chromium]) {
    const browser = await browserType.launch({
      args: ['--use-gl=swiftshader'],
     } );
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto('chrome://gpu');
    await page.screenshot({ path: `example-${browserType.name()}.png` });
    await browser.close();
  }
})();

我检查过了,这对我有效,以下是截图。 https://istack.dev59.com/1kUrG.webp 输入图像描述

是的,不幸的是 --use-gl=swiftshader 对我没有任何影响。 - WubbaLubbaDubbDubb
一个重要的更新,我认为我的问题与 --ignore-gpu-blocklist 相关。不知何故,在命令行上提供它时,chrome://flags 中的标志仍然被禁用。 - WubbaLubbaDubbDubb

0

这个问题已经有一段时间了,但对于任何面临类似问题的人来说,我相信有很多人都会遇到。

最近,我与Remotion.dev开源社区合作解决了同样的问题,并使其正常工作。我们成功地在无头模式下运行了Remotion,并启用了硬件加速。

我在一篇文章中总结了我的发现如何在AWS上的无头模式中启用Chrome、Chromium和Puppeteer的硬件加速。我相信这将为使Chrome在无头模式下正常工作并启用硬件加速提供帮助和指导。

免责声明:本指南的作者是我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接