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

ChromeDriver showing Lost UI Shared Context

提问人:Tiago 提问时间:3/4/2018 最后编辑:undetected SeleniumTiago 更新时间:1/23/2019 访问量:19125

问:

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

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

ERROR

此外,对于“无法查询立体声录制”和“无法发送GpuChannelMsg_CreateCommandBuffer command_buffer_proxy_impll.cc<115>共享内存句柄无效

这已经工作了几个月没有进行任何更改(此 WebDriver 是虚拟机的唯一用途),运行它的笔记本电脑运行良好(即没有 GPU 问题)。WebDriver 仍然在页面中导航,但会产生更多错误,速度会慢 10 倍。

编辑:更新到ChromeDriver到2.35,但行为仍然相同。

C# 硒 webdriver selenium-chromedriver chrome-web-driver

评论

0赞 kerl 3/8/2018
您的机器使用的是哪个版本的 Chrome?我最近才开始遇到这个问题,并注意到出现错误的机器在版本 65 上,而工作的机器在版本 64 上。
0赞 WEFX 4/21/2018
这是否会影响执行鼠标相关控件的能力?即 - mouseButtonDown、moveTo 等?

答:

3赞 Tim Trewartha 3/8/2018 #1

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

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

评论

0赞 Tim Trewartha 3/27/2018
@rebecca火花 只需卸载 Chrome 并安装旧版本即可。您可以在此处下载旧版本的 chrome: slimjet.com/chrome/google-chrome-old-version.php
8赞 undetected Selenium 5/3/2018 #2

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

添加了注释:

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

Headless Chrome入门一文提到:

--disable-gpu \                # Temporarily needed if running on Windows.

添加了注释:

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

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

LinuxMac OSX 上不再需要该标志。一旦 SwiftShader 在无头模式下的 Windows 上的断言失败,它也将在 Windows 上变得没有必要。--disable-gpu

引擎盖下发生了什么?

根据讨论 Headless: Switch from osmesa to SwiftShader As Google/Chromium 团队决定将 SwiftShaderChrome 一起发布,该团队考虑开始使用它在无头模式下渲染 GL 内容。这需要进行以下几项更改:

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

在无头模式下支持 WebGL 的想法仍在讨论中,但 SwiftShader 在无头模式下在 Windows 上无法断言,并出现错误:

[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

3赞 Sajuuk 1/23/2019 #3

“丢失的 UI 共享上下文”被误认为是错误,而它实际上是日志记录输出。

自 Chrome 72.0 起,此问题已修复。不需要多余的参数。