如何在 AWS Lambda 上使用 OESMesa 模拟 WebGL 内容?

How do I emulate WebGL stuff with OESMesa on AWS Lambda?

我想截取使用 WebGL 的网站的屏幕截图。我不必使用 GPU 打开该站点。使用仿真对我来说就足够了。

一开始,我已经尝试过headless-chrome来做到这一点。那可以截取有序的网站。但是,它不适用于 WebGL 画布。 我认为一种可能性是使用 OSMesa 或其他东西来模拟 OpenGL。

我已经使用了我所有的策略来克服这个问题。这真的可以做到吗? 如果是,请告诉我该怎么做。如果没有,我想知道为什么。

谢谢。

是的,这是可能的!

您需要正确的组合:

  1. 无头 chromium 二进制文件
  2. libosmesa.os 二进制文件(在同一目录中)
  3. 使用正确的标志启动 chrome headless,例如(有关详细信息,请参阅 link):['--use-gl=osmesa', '--enable-webgl', '--ignore-gpu-blacklist', '--homedir=/tmp', '--single-process', '--data-path=/tmp/data-path', '--disk-cache-dir=/tmp/cache-dir']

无服务器-chrome github 项目上的这个线程讨论了这个问题并提供了一些二进制文件,我曾使用这些二进制文件使用 Page.captureScreenshot() 在 AWS Lambda 上捕获 WebGL 内容的屏幕截图.

https://github.com/adieuadieu/serverless-chrome/issues/108#issuecomment-416494572

(参见@apalchys 在 8 月 28 日发表的评论)

此特定示例使用 SwiftShader,这似乎是未来的首选。

但是请注意,我无法使用此版本 Page.printToPDF() 创建 PDF - WebGL 内容只显示 blank/white。但是,我也能够使用使用 osmesa 的早期版本获得 Page.printToPDF(),请参阅 https://github.com/adieuadieu/serverless-chrome/issues/108#issuecomment-371199530