【问题标题】:ERROR:gpu_process_transport_factory.cc(1007)-Lost UI shared context : while initializing Chrome browser through ChromeDriver in Headless mode错误:gpu_process_transport_factory.cc(1007)-丢失 UI 共享上下文:在无头模式下通过 ChromeDriver 初始化 Chrome 浏览器时
【发布时间】:2018-10-13 01:56:54
【问题描述】:

当我尝试在 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 个系统上会有什么不同之处才能使其正常工作。

【问题讨论】:

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


    【解决方案1】:

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

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

    See this link for more information.

    【讨论】:

      【解决方案2】:

      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 的讨论,很明显:

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

      幕后发生了什么?

      根据headless: Switch from osmesa to SwiftShader 的讨论,由于 Google/Chromium 团队决定将 SwiftShaderChrome 一起发布,该团队考虑开始使用它来渲染 GL 内容 处于无头模式。这需要进行如下更改:

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

      【讨论】:

      • 我们正在使用ember exam 运行我们的测试,但由于此错误而完全停止。有没有办法解决这个问题
      • @xbmono 如果没有相关的html代码试验错误堆栈跟踪ember exam /i>。然而,根据 Chromium Team 的文档,错误 Lost UI shared context 看起来无害,并且很容易在 Windows10 操作系统 上重现,这不是 b>拦截器问题。
      • 它在 Win 中可能不是阻塞器,但我们使用的是 Debian 和 Jenkins Pipeline。由于这个问题,我们所有的测试都失败并停止。我们现在决定暂时禁用不好的测试
      • 我有这些设置:module.exports = { "test_page": "tests/index.html?hidepassed", "disable_watching": true, "parallel": 6, "launch_in_ci": [ "Chrome" ], "launch_in_dev": [ "Chrome" ], "browser_start_timeout": 80, "browser_args": { "Chrome": [ '--no-sandbox', '--disable-gpu', '--headless', '--window-size=1440,900' ] } };
      • @xbmono 在您使用 Debian 时,--disable-gpu 不是所需的参数。见讨论Lost UI Shared Context Error - Running protractor tests in headless chrome
      猜你喜欢
      • 2019-03-14
      • 2019-01-18
      • 2018-10-17
      • 2020-09-25
      • 2013-07-04
      • 2019-12-27
      相关资源
      最近更新 更多