使用 Playwright 为 Headless Chromium 启用硬件加速

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

我目前正在使用 Github Actions、Playwright 和 headless Chromium 的组合进行一些 E2E 测试。现在,目前我的测试需要相当长的时间(简单测试需要几十秒),这并不理想,特别是考虑到我的用例需要经常运行大量这些测试。经过一番研究,我发现很多人似乎都提到了这个链接:https://michelkraemer.com/enable-gpu-for-slow-playwright-tests-in-headless-mode/

它提供了如何在无头模式下为缓慢的 Playwright 测试启用 GPU 硬件加速的说明。但是,无论我做什么,硬件加速都拒绝在无头模式下启用。在 Head 模式下,它实际上是默认启用的,一切都运行得更流畅。这是我的代码:

(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 都会显示
Software only, hardware acceleration unavailable
。此时,我怀疑这可能是我的笔记本电脑硬件的问题,但我不知道如何找出这个问题。我还确认我的命令行参数实际上是由 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
后的结果:https://pastebin.com/uDfQuqQq
非常感谢任何帮助!

chromium google-chrome-headless playwright hardware-acceleration
2个回答
1
投票

你可以尝试下面的代码吗-

    // @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://i.stack.imgur.com/1kUrG.png


0
投票

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

我最近与 Remotion.dev 开源社区合作修复了同样的问题并使其正常工作。我们成功地在无头模式下运行带有硬件加速的远程。

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

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

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