ChromeDriver显示丢失的UI共享上下文

Tia*_*ago 9 c# selenium selenium-chromedriver selenium-webdriver chrome-web-driver

我有一台运行Windows 7虚拟机的Windows 10笔记本电脑.在虚拟机内部,当我启动WebDriver时,它在启动时给出错误gpu_process_transport_factory.cc <1009>丢失的UI共享上下文:

IWebDriver driver = new ChromeDriver() //This causes the 1009 Error
Run Code Online (Sandbox Code Playgroud)

错误

然后因查询立体声录音失败 而无法发送GpuChannelMsg_CreateCommandBuffer 和 command_buffer_proxy_impll.cc <115>共享内存句柄无效.

这已经工作了几个月并且没有进行任何更改(此WebDriver是虚拟机的唯一目的),运行它的笔记本电脑运行正常(即没有GPU问题).WebDriver仍会浏览页面,但会产生更多错误并且速度会慢10倍.

编辑:更新到ChromeDriver到2.35仍然是相同的行为.

Deb*_*anB 7

无头Chrome由谷歌团队在Chrome 59中发布,它引入了在无头环境中运行Chrome浏览器的方法.

添加了一条注释:

Headless mode has been available on Mac and Linux since Chrome 59. Windows support came in Chrome 60.
Run Code Online (Sandbox Code Playgroud)

文章Getting Started with Headless Chrome提到:

--disable-gpu \                # Temporarily needed if running on Windows.
Run Code Online (Sandbox Code Playgroud)

添加了一条注释:

现在,--disable-gpu如果您在Windows上运行,您还需要包含该标志.

根据讨论Headless: make --disable-gpu flag unnecessary,很明显:

Linux或Mac OSX--disable-gpu上不再需要该标志.一旦修复了bug,它也将在Windows上变得不必要.SwiftShader fails an assert on Windows in headless mode

引擎盖下发生了什么?

根据headless: Switch from osmesa to SwiftShaderGoogle/Chromium团队决定通过Chrome发布SwiftShader的讨论,该团队考虑开始使用它来在无头模式下渲染GL内容.这需要进行以下几项更改:

  • 在无头模式下跳过GPU数据收集,因为SwiftShader不被该代码视为软件实现,当我们尝试从Window系统检索信息时导致失败.
  • 只有跳过GL初始化在InitializeStaticEGLInternal如果我们打算使用osmesa.SwiftShader需要像其他非软件实现一样进行初始化.
  • SwiftShader目前不支持在Mac OSX上,所以球队决定继续使用物理GPU在无头模式在该平台上(不像这里的一切是软件渲染其他平台).
  • 因此,要在无头模式下禁用WebGL支持,他们决定使用--disable-gpu和--disable-software-rasterizer

这个想法Support WebGL in headless仍在讨论中,但SwiftShader fails an assert on Windows in headless mode错误如下:

[0117/125830.649194:ERROR:gpu_process_transport_factory.cc(1043)] Lost UI shared context.
DevTools listening on ws://127.0.0.1:37429/devtools/browser/1f0b2bf7-dfdd-44ac-9da7-f2659d352f0d
Run Code Online (Sandbox Code Playgroud)

结论

此错误不会影响您@Test,您可以暂时忽略该错误.


Tim*_*tha 3

这似乎是最新版本 Chrome (65.0.3325.146) 的问题。通过回滚到早期版本的 Chrome (64.0.3282.186),这个问题对我来说消失了。

如果我找到更多信息,将进一步调查并在此处更新,但作为临时解决方法,您可以卸载 chrome 并安装版本 64.0.3282.186。