错误:gpu_process_transport_factory.cc(1007) - 失去用户界面共享上下文:在无头模式下通过ChromeDriver初始化Chrome浏览器

use*_*863 6 python selenium selenium-chromedriver selenium-webdriver google-chrome-headless

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

[0502/155335.565:ERROR:gpu_process_transport_factory.cc(1007)] Lost UI shared context.
Run Code Online (Sandbox Code Playgroud)

这是代码:

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")
Run Code Online (Sandbox Code Playgroud)

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

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

我不确定在其他系统运行相同软件的情况下,1系统可能有什么不同.

Deb*_*anB 8

Headless Chrome首次由Google Team作为GA(一般可用性)发布时,文章提到: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,很明显:

LinuxMac 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,您可以暂时忽略该错误.