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

Я получаю эту ошибку при попытке запустить код на 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")

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

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

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

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

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

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

См. Эту ссылку для получения дополнительной информации.

0 голосов
/ 03 мая 2018

Когда Headless Chrome был впервые выпущен как GA (Общая доступность) от Google Team статья 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 будет исправлена.

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

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

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

Заключение

Эта ошибка не влияет на @Test, и вы можете пока ее игнорировать.

...