错误:gpu_process_transport_factory.cc(1007)-丢失的用户界面共享上下文:在无头模式下通过ChromeDriver初始化Chrome浏览器时 [英] ERROR:gpu_process_transport_factory.cc(1007)-Lost UI shared context : while initializing Chrome browser through ChromeDriver in Headless mode

查看:638
本文介绍了错误:gpu_process_transport_factory.cc(1007)-丢失的用户界面共享上下文:在无头模式下通过ChromeDriver初始化Chrome浏览器时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试在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位,google chrome 64位版本:66.0.3359.139,python 2.7 32位,chromedriver.exe 32位,pycharm 2018.1.1

有趣的是,如果我在没有无头选项的情况下运行此程序,则一切正常.弹出浏览器,按下I'm feeling lucky按钮,并进行屏幕截图.仅当我添加无头位时,才会发生此错误.

我不确定在1个系统上可能有什么不同之处,以使其在其他系统运行相同软件时可以正常工作.

解决方案

Google团队 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 很明显:

Linux Mac OSX 上不再需要--disable-gpu标志.错误 是固定的.

引擎盖下发生了什么?

根据讨论 headless: Switch from osmesa to SwiftShader ,因为Google/Chromium小组决定将 SwiftShader Chrome 一起交付,该小组认为开始使用它来呈现 GL内容 >无头模式.这需要进行以下几处更改:

  • Headless模式跳过GPU数据收集,因为该代码未将 SwiftShader 视为软件实现,当我们尝试从窗口系统.
  • 如果我们打算使用 osmesa ,请
  • 仅跳过 InitializeStaticEGLInternal 中的 GL初始化. SwiftShader 需要像其他非软件实现一样进行初始化.
  • Mac OSX 当前不支持
  • SwiftShader ,因此团队决定在 Headless模式下继续使用物理GPU 在该平台上(不同于在其他平台上所有由软件呈现的平台).
  • 因此,为了禁用 Headless模式中的 WebGL 支持,他们决定使用-disable-gpu -disable-软件光栅化器

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

I am getting this error when I attempt to run code on 2 of 3 computers:

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

Here is the code:

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")

Now I have checked all of the systems, they are running windows 10 64-bit, google chrome 64 bit Version: 66.0.3359.139, python 2.7 32-bit, chromedriver.exe 32-bit, pycharm 2018.1.1

funny thing is if I run this without the headless options then everything works. The browser pops up, the I'm feeling lucky button is pressed, and a screen shot is taken. Only if I add in the headless bit does this error occur.

I am not sure what could be different on 1 system that would allow this to work when the other systems are running the same software.

解决方案

When Headless Chrome was first released as GA (General Availability) by Google Team the article Getting Started with Headless Chrome mentioned that :

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

A note was added as :

Right now, you'll also want to include the --disable-gpu flag if you're running on Windows.

As per the discussion Headless: make --disable-gpu flag unnecessary it was clear that :

The --disable-gpu flag is no longer necessary on Linux or Mac OSX. It will also become unnecessary on Windows as soon as the bug SwiftShader fails an assert on Windows in headless mode is fixed.

What happened under the hood?

As per the discussion headless: Switch from osmesa to SwiftShader as Google/Chromium team decided to ship SwiftShader with Chrome the team thought to start using it to render GL content in Headless Mode. This required a couple of changes as follows :

  • Skip GPU data collection in Headless Mode since SwiftShader isn't considered a software implementation by that code which lead to a failure when we tried to retrieve information from the Window System.
  • Only skip GL initialization in InitializeStaticEGLInternal if we intend to use osmesa. SwiftShader requires initialization like the other non-software implementations.
  • SwiftShader is currently not supported on Mac OSX, so the team decided to continue to use the physical GPU in Headless Mode on that platform (unlike on other platforms where everything is software rendered).
  • So, to disable WebGL support in Headless Mode they decided to use --disable-gpu and --disable-software-rasterizer

The idea to Support WebGL in headless is still under discussion but SwiftShader fails an assert on Windows in headless mode with an error as :

[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

Conclusion

This error doesn't impact your @Test and you can ignore the error for the time being.

这篇关于错误:gpu_process_transport_factory.cc(1007)-丢失的用户界面共享上下文:在无头模式下通过ChromeDriver初始化Chrome浏览器时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆