7

我正在使用 selenium-docker 项目在 docker 容器中运行 chrome,没有XVFBSTART_XVFB=false)。

我想使用 webgl 支持。使用 chrome v95 及更低版本 ( https://github.com/SeleniumHQ/docker-selenium/releases/tag/4.1.0-prerelease-20211105 ),启用 webgl (检查https://get.webgl.org/ ) .

但是,当使用 chrome v96 或更高版本时,它不起作用(https://github.com/SeleniumHQ/docker-selenium/releases/tag/4.1.2-20220131)。我可以看到gpu 进程--use-gl=disabled参数,这不会发生在 chrome v95 上。

seluser@6e0bab2896f2:/$ ps aux|grep chrome
seluser      136  0.0  0.0 16875056 16500 ?      Sl   22:36   0:00 /opt/selenium/chromedriver-97.0.4692.71 --port=48167
seluser      153  0.7  0.0 17181620 99736 ?      Sl   22:36   0:00 /opt/google/chrome/chrome --no-sandbox --allow-pre-commit-input --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-automation --enable-blink-features=ShadowDOMV0 --enable-logging --headless --log-level=0 --no-first-run --no-service-autorun --password-store=basic --remote-debugging-port=0 --test-type=webdriver --use-mock-keychain --user-data-dir=/tmp/.com.google.Chrome.RBwolw data:,
seluser      160  0.0  0.0 17022544 54552 ?      S    22:36   0:00 /opt/google/chrome/chrome --type=zygote --no-zygote-sandbox --no-sandbox --enable-logging --headless --log-level=0 --headless --enable-crash-reporter
seluser      161  0.0  0.0 17022544 54628 ?      S    22:36   0:00 /opt/google/chrome/chrome --type=zygote --no-sandbox --enable-logging --headless --log-level=0 --headless --enable-crash-reporter
seluser      177  0.2  0.0 17088440 81444 ?      Sl   22:36   0:00 /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --field-trial-handle=10249259231085024426,2441013785441743208,131072 --disable-features=PaintHolding --lang=en-US --service-sandbox-type=none --no-sandbox --enable-logging --log-level=0 --use-angle=swiftshader-webgl --use-gl=angle --headless --enable-crash-reporter --enable-logging --log-level=0 --shared-files=v8_context_snapshot_data:100
seluser      206  0.0  0.0 17064708 47756 ?      Sl   22:36   0:00 /opt/google/chrome/chrome --type=gpu-process --field-trial-handle=10249259231085024426,2441013785441743208,131072 --disable-features=PaintHolding --no-sandbox --enable-logging --headless --log-level=0 --ozone-platform=headless --use-angle=swiftshader-webgl --headless --enable-crash-reporter --gpu-preferences=UAAAAAAAAAAgAAAYAAAAAAAAAAAAAAAAAABgAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAA= --use-gl=disabled --override-use-software-gl-for-headless --enable-logging --log-level=0 --shared-files
seluser      240  0.4  0.0 25521252 86756 ?      Sl   22:36   0:00 /opt/google/chrome/chrome --type=renderer --headless --enable-crash-reporter --lang=en-US --no-sandbox --enable-automation --enable-logging --log-level=0 --remote-debugging-port=0 --test-type=webdriver --allow-pre-commit-input --ozone-platform=headless --field-trial-handle=10249259231085024426,2441013785441743208,131072 --disable-features=PaintHolding --disable-gpu-compositing --enable-blink-features=ShadowDOMV0 --lang=en-US --num-raster-threads=4 --enable-main-frame-before-activation --renderer-client-id=7 --launch-time-ticks=2093974944 --shared-files=v8_context_snapshot_data:100
seluser      265  0.0  0.0   9040   720 pts/0    S+   22:36   0:00 grep --color=auto chrome

我尝试将参数传递给 chrome,但它们不起作用。我相信硒图像与这种行为无关,它在 chrome v96 中发生了变化。

启用XVFB对我来说不是一个选项,性能不一样。

如何避免将此--use-gl=disabled参数传递给 chrome gpu 进程?

这是带有 chrome 94 的 ps 输出,这里选择了 swiftshader:

seluser     35  0.0  3.6 5418392 146164 ?      Sl   Feb16   2:40 java -Dselenium.LOGGER.level=WARNING -cp /opt/selenium/*:. org.openqa.grid.selenium.GridLauncherV3 -role node -hub http://selenium-hub:4444/grid/register -remoteHost http://chrome-node:5555 -nodeConfig /opt/selenium/config.json
seluser    353  0.3  0.3 16874900 15128 ?      Sl   08:45   0:00 /opt/selenium/chromedriver-94.0.4606.61 --port=13828
seluser    363  1.2  2.3 17163152 96028 ?      Sl   08:45   0:00 /opt/google/chrome/chrome --no-sandbox --allow-pre-commit-input --autoplay-policy=no-user-gesture-required --blink-settings=imagesEnabled=false --disable-background-network
ing --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-default-apps --disable-extensio
ns --disable-features=TranslateUI --disable-hang-monitor --disable-ipc-flooding-protection --disable-notifications --disable-permissions-api --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-s
ync --disable-translate --enable-blink-features=ShadowDOMV0 --enable-logging --force-color-profile=srgb --headless --hide-scrollbars --ignore-certificate-errors --log-level=0 --metrics-recording-only --mute-audio --no-first-run --no-serv
ice-autorun --password-store=basic --remote-debugging-port=0 --safebrowsing-disable-auto-update --test-type=webdriver --use-mock-keychain --user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 --user-data-dir=/tmp/.com.google.Chrome.H8QetU --window-size=1280,1280 data:,
seluser    371  0.2  1.3 17020192 54600 ?      S    08:45   0:00 /opt/google/chrome/chrome --type=zygote --no-zygote-sandbox --no-sandbox --enable-logging --headless --log-level=0 --headless --user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36
seluser    372  0.2  1.3 17020192 54700 ?      S    08:45   0:00 /opt/google/chrome/chrome --type=zygote --no-sandbox --enable-logging --headless --log-level=0 --headless --user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36
seluser    387 11.6  2.9 17134132 119824 ?     Sl   08:45   0:01 /opt/google/chrome/chrome --type=gpu-process --field-trial-handle=5673360104449051270,16628090171661640812,131072 --disable-features=PaintHolding,TranslateUI --no-sandbox -
-disable-breakpad --enable-logging --headless --log-level=0 --ozone-platform=headless --headless --user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 --gpu-prefer
ences=UAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAABgAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAA= --use-gl=swiftshader-webgl --override-use-software-gl-for-headless --enable-logging --log-level=0 --shared-files
seluser    388  0.3  1.9 17086024 79308 ?      Sl   08:45   0:00 /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --field-trial-handle=5673360104449051270,16628090171661640812,131072 --disable-feat
ures=PaintHolding,TranslateUI --lang=en-US --service-sandbox-type=none --no-sandbox --enable-logging --ignore-certificate-errors --log-level=0 --use-gl=swiftshader-webgl --mute-audio --ignore-certificate-errors --headless --user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 --enable-logging --log-level=0 --shared-files=v8_context_snapshot_data:100
seluser    418  8.3  2.3 25521800 93096 ?      Sl   08:45   0:00 /opt/google/chrome/chrome --type=renderer --headless --user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safar
i/537.36 --lang=en-US --no-sandbox --autoplay-policy=no-user-gesture-required --disable-background-timer-throttling --disable-breakpad --disable-notifications --disable-permissions-api --enable-logging --force-color-profile=srgb --log-le
vel=0 --remote-debugging-port=0 --test-type=webdriver --allow-pre-commit-input --blink-settings=imagesEnabled=false --ozone-platform=headless --field-trial-handle=5673360104449051270,16628090171661640812,131072 --disable-features=PaintHolding,TranslateUI --disable-gpu-compositing --enable-blink-features=ShadowDOMV0 --lang=en-US --num-raster-threads=4 --enable-main-frame-before-activation --renderer-client-id=5 --shared-files=v8_context_snapshot_data:100
4

1 回答 1

0

使用-gl

--use-gl选择 GPU 进程应使用的 GL 实现。可用的选项有:

  • desktop:用户安装的任何桌面 OpenGL(Linux 和 Mac 默认)。
  • egl:用户安装的任何 EGL / GLES2(Windows 默认 - 实际上是 ANGLE)。
  • swiftshader : SwiftShader 软件渲染器。

根据讨论问题 617551:在无头模式下支持 WebGL 无头模式下的 WebGL 已经通过 osmesa 实现得到支持。

允许 Mesa llvmpipe 驱动程序的WebGL 回读:允许 Mesa llvmpipe 驱动程序的 WebGL 回读。目前来自 Mesa 的 llvmpipe 驱动程序被列入黑名单。它足够快速和稳定,可以使用 gpu 进程。但是只启用了WebGL,其他功能仍然不会使用gpu进程。例如,2D 合成 Skia 比在软件 GL 驱动程序上合成的 gpu 更快。

这次修订是从 osmesa 切换到 SwiftShader:

无头:从 osmesa 切换到 SwiftShader

现在 SwiftShader 随 Chrome 一起提供,我们可以开始使用它以无头模式渲染 GL 内容。这需要进行一些更改:

  1. 在无头模式下跳过 GPU 数据收集,因为 SwiftShader 不被该代码视为软件实现,导致
    我们尝试从窗口系统检索信息时失败。

  2. 如果我们使用 osmesa,只在 InitializeStaticEGLInternal 中跳过 GL 初始化。SwiftShader 像其他
    非软件实现一样需要初始化。

我们还修复了用户指定的任何 --use-gl 标志在内部被覆盖的错误。

请注意,macOS 目前不支持 SwiftShader,因此我们将继续在该平台上以无头模式使用物理 GPU(与其他一切都是软件渲染的平台不同)。

要从现在开始在无头模式下禁用 WebGL 支持,请使用 --disable-gpu --disable-software-rasterizer。

此外,引入此版本是为了在 Linux 的无头 Chromium 中添加对 GPU 加速的支持。通过这个修复,预计 WebGL 应该可以在无头模式下与 SwiftShader 一起工作。

但是,来自 docker 最小设置(alpine)的无头测试仍然失败,因为无论使用何种选项(swiftshader / osmesa),使用 MapboxMap 的内容都无法正确呈现。问题 765284:在无头模式下支持 GPU 硬件中跟踪了特定平台上的这些离散问题


通过 osmesa 启用 WebGL

要安装和启用 osmesa,您需要执行以下步骤:

sudo apt-get install libosmesa
sudo ln -s /usr/lib/x86_64-linux-gnu/libOSMesa.so.6 /opt/google/chrome/libosmesa.so
google-chrome --no-first-run --user-data-dir=~/chrome-stuff --use-gl=osmesa

注意:当使用 osmesa 运行时,整个页面都是使用 osmesa 渲染的,因此速度很慢。因此,如果您有可以在没有 WebGL 的情况下运行的测试,您可能希望在没有 osmesa 的情况下运行它们。


tl; 博士

参考

于 2022-02-17T21:29:04.407 回答