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

时间:2017-10-19 02:50:09

标签: selenium lambda webgl e2e-testing

我想使用WebGL拍摄网站的屏幕截图。我不必使用GPU来打开该网站。使用仿真对我来说已经足够了。

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

我已经用我所有的策略来克服这个问题。这实际上可以吗? 如果是,请告诉我该怎么做。如果不是,我想知道原因。

感谢。

1 个答案:

答案 0 :(得分:1)

是的,有可能!

您需要以下各项的正确组合:

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

lessserver-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内容仅显示为空白/白色。但是,我也可以使用使用osmesa的早期版本来获取Page.printToPDF(),请参阅https://github.com/adieuadieu/serverless-chrome/issues/108#issuecomment-371199530