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

时间:2018-05-02 20:53:56

标签: python selenium selenium-webdriver selenium-chromedriver google-chrome-headless

当我尝试在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位,chromedriver.exe 32位,pycharm 2018.1.1

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

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

2 个答案:

答案 0 :(得分:7)

无头Chrome 首次由 Google小组 GA(一般可用性)发布时,文章Getting Started with Headless Chrome提到:< / p>

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

添加了一条注释:

  

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

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

  

Linux Mac OSX 上不再需要--disable-gpu标志。

}修复了错误SwiftShader fails an assert on Windows in headless mode后,在Windows上也没有必要。

引擎盖下发生了什么?

根据讨论headless: Switch from osmesa to SwiftShader,由于Google / Chromium团队决定使用 Chrome 发布 SwiftShader ,团队会开始使用它来渲染 GL 无头模式中的内容。这需要进行以下几项更改:

  • Headless Mode 中跳过GPU数据收集,因为 SwiftShader 不被该代码视为软件实现,导致我们尝试从< strong>窗口系统。
  • 如果我们打算使用 osmesa ,则只跳过 InitializeStaticEGLInternal 中的 GL初始化 SwiftShader 需要像其他非软件实现一样进行初始化。
  • Mac OSX 目前不支持
  • SwiftShader ,因此团队决定继续在无头模式下使用物理GPU 在该平台上(与其他所有软件都呈现的平台不同)。
  • 因此,要禁用无头模式中的 WebGL 支持,他们决定使用 - disable-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,您可以暂时忽略该错误。

答案 1 :(得分:0)

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

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

See this link for more information.