我有一台运行 Windows 7 虚拟机的 Windows 10 笔记本电脑。在虚拟机内部,当我启动 WebDriver 时,它在启动时给出错误 gpu_process_transport_factory.cc Lost UI shared context:

IWebDriver driver = new ChromeDriver() //This causes the 1009 Error

c# - ChromeDriver 显示丢失的 UI 共享上下文-LMLPHP

查询立体声录音失败和无法发送 GpuChannelMsg_CreateCommandBuffer command_buffer_proxy_impll.cc 共享内存句柄无效。

这已经 工作了几个月 没有做任何更改 (这个 WebDriver 是运行虚拟机的唯一目的,运行 GPU 的笔记本电脑没有问题)。 WebDriver 仍然可以浏览页面,但会出现更多错误并且速度降低了 10 倍。

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

最佳答案

headless Chrome 由 Google 团队在 Chrome 59 中提供,它引入了一种在 headless 环境中运行 Chrome 浏览器的方法。

添加了一个注释:

Headless mode has been available on Mac and Linux since Chrome 59. Windows support came in Chrome 60.

文章 Getting Started with Headless Chrome 提到:
--disable-gpu \                # Temporarily needed if running on Windows.

添加了一个注释:



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



引擎盖下发生了什么?

根据讨论 headless: Switch from osmesa to SwiftShader ,因为 Google/Chromium 团队决定将 SwiftShader 使用 Headless 模式,以使用 Chrome 0x21421 的方式启动内容。这需要进行一些更改,如下所示:

因为 SwiftShader 在 headless 模式
  • 跳过GPU数据采集不考虑通过代码导致故障,当我们试图从 Window系统检索信息的软件实现。
  • 如果我们打算使用 osmesa ,则仅跳过 InitializeStaticEGLInternal 中的 GL 初始化。 SwiftShader 需要像其他非软件实现一样初始化。
  • SwiftShader 目前在 Mac OSX 上不受支持,因此团队决定在该平台上继续在 Headless 模式下使用物理 GPU(与其他所有软件渲染的平台不同)。
  • 所以,在 headless 模式禁用 WebGL的支持他们决定使用 - 禁用GPU - 禁用软件光栅

  • 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
    

    结论

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

    关于c# - ChromeDriver 显示丢失的 UI 共享上下文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49094399/

    10-13 09:12