webentwicklung-frage-antwort-db.com.de

FEHLER: gpu_process_transport_factory.cc (1007) -Lost freigegebener Kontext der Benutzeroberfläche: Beim Initialisieren des Chrome-Browsers über ChromeDriver im Headless-Modus

Ich erhalte diese Fehlermeldung, wenn ich versuche, Code auf 2 von 3 Computern auszuführen:

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

Hier ist der 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")

Jetzt habe ich alle Systeme überprüft, sie laufen unter Windows 10 64-Bit, Google Chrome 64 Bit Version: 66.0.3359.139, Python 2.7 32-Bit, chromedriver.exe 32-Bit, pycharm 2018.1.1

komisch ist, wenn ich das ohne die kopflosen Optionen durchführe, dann funktioniert alles. Der Browser wird geöffnet, die I'm feeling lucky-Taste wird gedrückt und ein Screenshot wird erstellt. Nur wenn ich das Headless-Bit hinzufüge, tritt dieser Fehler auf.

Ich bin mir nicht sicher, was auf einem System anders sein könnte, damit dies funktioniert, wenn die anderen Systeme dieselbe Software ausführen.

5
user3259863

Als Headless Chrome erstmals als GA (Allgemeine Verfügbarkeit) von Google Team veröffentlicht wurde, wurde im Artikel Getting Started with Headless Chrome Folgendes erwähnt:

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

Eine Notiz wurde hinzugefügt als:

Im Moment sollten Sie auch das --disable-gpu-Flag einschließen, wenn Sie unter Windows laufen.

Gemäß der Diskussion Headless: make --disable-gpu flag unnecessary war klar, dass:

Das --disable-gpu-Flag ist unter Linux oder Mac OSX nicht mehr erforderlich. Es wird auch unter Windows unnötig, sobald der Fehler SwiftShader fails an assert on Windows in headless mode behoben wurde.

Was ist unter der Haube passiert?

Wie in der Diskussion headless: Switch from osmesa to SwiftShader als das Google/Chromium-Team beschlossen hat, SwiftShader mit Chrome zu versenden, dachte das Team daran, es zu verwenden, um GL) - Inhalt zu rendern in Headless-Modus. Dies erforderte einige Änderungen wie folgt:

  • Überspringen Sie die GPU-Datenerfassung in Headless Mode, da SwiftShader von diesem Code nicht als Softwareimplementierung betrachtet wird, die zu einem Fehler führt, wenn wir versuchen, Informationen aus dem Window-System abzurufen.
  • Überspringen Sie GL -Initialisierung in InitializeStaticEGLInternal, wenn Sie osmesa verwenden möchten. SwiftShader erfordert eine Initialisierung wie die anderen Nicht-Software-Implementierungen.
  • SwiftShader wird derzeit nicht von Mac OSX unterstützt. Daher entschied sich das Team, die physische GPU in Headless Mode auf dieser Plattform (anders als.) Zu verwenden auf anderen Plattformen, auf denen alles Software ist).
  • Um die Unterstützung von WebGL in Headless Modezu deaktivieren, entschieden sie sich für --disable-gpu und --disable-software-rasterizer.

Die Idee zu Support WebGL in headless ist noch in Diskussion, aber SwiftShader fails an assert on Windows in headless mode mit einem Fehler als:

[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

Fazit

Dieser Fehler wirkt sich nicht auf Ihren @Test aus und Sie können den Fehler vorerst ignorieren.

7
DebanjanB

Ich hatte das gleiche Problem. Versuchen Sie, diese Markierungen den Chrome-Treiberoptionen hinzuzufügen:

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

Siehe diesen Link für weitere Informationen.

0
HalloFriend