web-dev-qa-db-fra.com

ERREUR: gpu_process_transport_factory.cc (1007) - Contexte partagé avec l'interface perdue: lors de l'initialisation du navigateur Chrome via ChromeDriver en mode Headless

Je reçois cette erreur lorsque j'essaie d'exécuter du code sur 2 ordinateurs sur 3:

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

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

Maintenant, j'ai vérifié tous les systèmes, ils exécutent Windows 10 64 bits, Google Chrome 64 bits Version: 66.0.3359.139, python 2.7 32 bits, chromedriver.exe 32 bits, pycharm 2018.1.1

ce qui est drôle, c’est que si je lance ceci sans les options sans tête, alors tout fonctionne. Le navigateur apparaît, le bouton I'm feeling lucky est enfoncé et une capture d'écran est prise. Cette erreur ne survient que si j'ajoute le bit sans tête.

Je ne suis pas sûr de ce qui pourrait être différent sur un système qui permettrait à cela de fonctionner lorsque les autres systèmes exécutent le même logiciel.

5
user3259863

Lorsque Headless Chrome a été publié pour la première fois sous le nom GA (Disponibilité générale) de Google Team l'article Getting Started with Headless Chrome mentionnait que:

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

Une note a été ajoutée en tant que:

À l'heure actuelle, vous voudrez également inclure l'indicateur --disable-gpu si vous utilisez Windows.

Selon la discussion Headless: make --disable-gpu flag unnecessary , il était clair que:

L'indicateur --disable-gpu n'est plus nécessaire sur Linux ou Mac OSX. Cela deviendra également inutile sous Windows dès que le bogue SwiftShader fails an assert on Windows in headless mode sera corrigé.

Que s'est-il passé sous le capot?

Selon la discussion headless: Switch from osmesa to SwiftShader comme Google/l'équipe Chromium a décidé d'expédier SwiftShader avec Chrome, l'équipe a pensé commencer à l'utiliser pour restituer GL content en mode sans tête. Cela a nécessité quelques modifications, comme suit:

  • Ignorer la collecte de données GPU en mode sans tête puisque SwiftShader n'est pas considéré comme une implémentation logicielle par ce code, ce qui entraîne un échec lorsque nous avons tenté d'extraire des informations du système Window.
  • Ignorer uniquement GL initialisation dans InitializeStaticEGLInternal si nous avons l'intention d'utiliser osmesa. SwiftShader nécessite une initialisation comme les autres implémentations non logicielles.
  • SwiftShader n'est actuellement pas pris en charge sur Mac OSX. L'équipe a donc décidé de continuer à utiliser le GPU physique en Mode sans tête sur cette plate-forme (contrairement à sur d'autres plates-formes où tout est rendu logiciel).
  • Donc, pour désactiver le support de WebGL en mode sans tête, ils ont décidé d'utiliser --disable-gpu et --disable-software-rasterizer.

L'idée de Support WebGL in headless est toujours en discussion mais SwiftShader fails an assert on Windows in headless mode avec une erreur telle que:

[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

Cette erreur n'a pas d'incidence sur votre @Test et vous pouvez l'ignorer pour le moment.

7
DebanjanB

J'ai eu le même problème. Essayez d’ajouter ces indicateurs aux options du pilote Chrome:

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

Voir ce lien pour plus d'informations.

0
HalloFriend