错误:gpu_process_transport_factory.cc(1007)-丢失的UI共享上下文:在无头模式下通



当我尝试在 3 台计算机中的 2 台上运行代码时,我收到此错误:

[0502/155335.565:ERROR:gpu_process_transport_factory.cc(1007)] Lost UI shared context.

这是代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=1920x1080")
chrome_driver = os.getcwd() + "\chromedriver.exe"
print "chrome driver:" + chrome_driver
driver = webdriver.Chrome(chrome_options=chrome_options, 
executable_path=chrome_driver)
driver.get("http://www.google.com")
luck_button = driver.find_element_by_css_selector("[name=btnI")
luck_button.click()
driver.get_screenshot_as_file("capture.png")

现在我已经检查了所有系统,它们运行的是 Windows 10 64 位,谷歌浏览器 64 位 版本: 66.0.3359.139, python 2.7 32 位, 铬驱动程序.exe 32 位, pycharm 2018.1.1

有趣的是,如果我在没有无头选项的情况下运行它,那么一切正常。浏览器弹出,按下I'm feeling lucky按钮,然后截取屏幕截图。只有当我添加无头位时,才会发生此错误。

我不确定当其他系统运行相同的软件时,在一个允许它工作的系统上会有什么不同。

当 GoogleTeam首次将Headless Chrome作为GA(正式发布(发布时,文章Getting Started with Headless Chrome提到:

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

添加了一条注释:

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

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

LinuxMac OSX上不再需要--disable-gpu标志。一旦修复了错误SwiftShader fails an assert on Windows in headless mode,它也将在 Windows 上变得不必要。

引擎盖下发生了什么?

根据讨论headless: Switch from osmesa to SwiftShader,当Google/Chromium团队决定将SwiftShaderChrome一起发布时,团队认为开始使用它以无头模式渲染GL内容。这需要进行以下一些更改:

  • 无头模式下跳过 GPU 数据收集,因为该代码不认为SwiftShader是软件实现,当我们尝试从窗口系统检索信息时会导致失败。
  • 如果我们打算使用osmesa,则仅在InitializeStaticEGLIternal中跳过GL 初始化SwiftShader需要像其他非软件实现一样进行初始化。
  • Mac OSX目前不支持SwiftShader,因此团队决定继续在该平台上以无头模式使用物理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

结论

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

我遇到了同样的问题。尝试将这些标志添加到 Chrome 驱动程序选项中:

options.add_arguments("--proxy-server='direct://'");
options.add_arguments("--proxy-bypass-list=*");

有关详细信息,请参阅此链接。

相关内容

  • 没有找到相关文章

最新更新