ОШИБКА: gpu_process_transport_factory.cc (1007) -Утерянный общий контекст пользовательского интерфейса: при инициализации браузера Chrome через ChromeDriver в режиме Headless

Я получаю эту ошибку, когда пытаюсь запустить код на 2 из 3 компьютеров:

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

Теперь я проверил все системы, они работают под управлением 64-разрядной версии Windows 10, 64-разрядной версии Google Chrome. Версия: 66.0.3359.139, 32-разрядная версия python 2.7, 32-разрядная версия chromedriver.exe, pycharm 2018.1.1.

Забавно, что если я запустил это без параметров без головы, все будет работать. Выскакивает браузер, нажимается кнопка I'm feeling lucky и делается снимок экрана. Эта ошибка возникает только в том случае, если я добавлю бит без головы.

Я не уверен, что могло бы отличаться в одной системе, что позволило бы этому работать, когда другие системы используют то же программное обеспечение.


person user3259863    schedule 02.05.2018    source источник


Ответы (2)


Когда Headless Chrome был впервые выпущен командой Google как GA (общедоступный), в статье Getting Started with Headless Chrome упомянул, что:

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

Заметка была добавлена ​​как:

Прямо сейчас вы также захотите включить флаг --disable-gpu, если вы работаете в Windows.

Согласно обсуждению, Headless: make --disable-gpu flag unnecessary было ясно, что:

Флаг --disable-gpu больше не нужен в Linux или Mac OSX. Это также станет ненужным в Windows, как только появится ошибка SwiftShader fails an assert on Windows in headless mode < / strong> исправлено.

Что случилось под капотом?

Согласно обсуждению headless: Switch from osmesa to SwiftShader как Команда Google / Chromium решила выпустить SwiftShader с Chrome, и команда решила начать использовать его для рендеринга контента GL в Headless Mode . Это потребовало следующих изменений:

  • Пропустить сбор данных GPU в Headless Mode, поскольку SwiftShader не считается программной реализацией этим кодом, что приводит к сбою при попытке получить информацию из окна Система.
  • Пропускайте инициализацию GL в InitializeStaticEGLInternal, только если мы собираемся использовать osmesa. SwiftShader требует инициализации, как и другие непрограммные реализации.
  • SwiftShader в настоящее время не поддерживается в Mac OSX, поэтому команда решила продолжать использовать физический графический процессор в Headless Mode на этой платформе (в отличие от других платформ, где все рендерится программно).
  • Итак, чтобы отключить поддержку WebGL в Headless Mode, они решили использовать --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, и вы можете пока игнорировать ее.

person DebanjanB    schedule 03.05.2018
comment
Мы используем ember exam для запуска наших тестов, и он полностью останавливается из-за этой ошибки. Есть ли способ исправить это? - person xbmono; 12.10.2018
comment
@xbmono Не сможет комментировать ember exam без соответствующего html, пробного кода и трассировки стека ошибок. Однако, согласно документации от Chromium Team, ошибка Потерянный общий контекст пользовательского интерфейса выглядит безвредно и довольно легко воспроизводится в ОС Windows10, которая не является < b> блокировщик. - person DebanjanB; 12.10.2018
comment
Возможно, это не блокировщик в Win, но мы используем Debian и Jenkins Pipeline. Все наши тесты терпят неудачу и останавливаются из-за этой проблемы. Теперь мы решили временно отключить тесты, что не очень хорошо. - person xbmono; 15.10.2018
comment
У меня такие настройки: 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' ] } }; - person xbmono; 15.10.2018
comment
@xbmono Поскольку вы используете Debian, --disable-gpu не является желаемым параметром. См. Обсуждение Ошибка общего контекста потерянного пользовательского интерфейса - Выполняется тесты транспортира в безголовом хроме - person DebanjanB; 15.10.2018
comment
Я получаю это без флага --disable-gpu - person nights; 15.02.2019

У меня такая же проблема. Попробуйте добавить эти флаги в параметры драйвера Chrome:

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

Дополнительную информацию см. по этой ссылке. .

person HalloFriend    schedule 16.10.2018