Python: Selenium Chromedriver mit Chrome Profile im Headless Modus nutzen

FrazeColder

Lt. Commander
Registriert
Okt. 2013
Beiträge
1.718
Hallo zusammen,

ich habe mir ein Python Skript geschrieben, welches auf einer Webseite einige Sachen ausfüllen und herunterladen soll. Dieses Skript würde ich gerne im Hintergrund, also im Headless Modus einmal die Stunde laufen lassen. Das Skript funktioniert auch im Headless Modus so wie es soll. Ich habe allerdings ein Problem: Und zwar bleibt der User im Headless Modus nicht auf der Webseite eingeloggt. Im normalen Modus (also nicht Headless) bleibt das Skript über das verwendete Google Chrome Profile eingeloggt.

Woher weiß ich, dass der "Bot" im Headless Modus nicht eingeloggt bleibt: Der Bot kann identifizieren, ob er eingeloggt ist oder nicht. Im Headless Modus ist das leider nie (!!!) der Fall, im normalen Modus hingegen loggt sich der Bot einmal ein und ist dann immer eingeloggt (über die Session Cookies, die eben im Chrome Profile gespeichert werden).

Das hier sind die Option Arguments die ich in meinem Skript an Selenium übergebe:
Python:
# Browser
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--window-size=1920,1080")
options.add_argument("user-data-dir=/Users/helloworld/Library/Application Support/Google/Chrome/User Data/Profile 1")

s = Service("/Users/helloworld/Desktop/Programmieren/chromedriver")
browser = webdriver.Chrome(service=s, options=options)

Ich habe auch schon ein wenig recharchiert und diesesn Post auf Stackoverflow gefunden. Leider funktioniert diese Lösung aber nicht bei mir..

Könnt ihr mir sagen, wie ich Selenium im Headless Modus mit einem Google Chrome Profile verwende bzw. wo mein Fehler liegt?

Wie gesagt, sobald ich die Zeile zwei auskommentiere, funktioniert alles wie gewollt.

Viele Grüße und Dankeschön!
 
Ich hab leider keine Lösung für dein Problem, aber ich hatte auch unter C# Probleme mit headless.

Meine schmutzige Lösung?
Ich hab via Code das Fenster außerhalb des Monitors geschoben, indem ich die Position beeinflusst habe.
Das war in meinem Fall okay, da der PC nicht durch Menschenhand in Benutzung ist.
 
Schon mal wie folgt ausprobiert? :)

Python:
options.add_argument('--user-data-dir=/Users/helloworld/Library/Application Support/Google/Chrome/User Data')
options.add_argument('--profile-directory=Profile 1')
 
eyedexe schrieb:
Schon mal wie folgt ausprobiert? :)

Python:
options.add_argument('--user-data-dir=/Users/helloworld/Library/Application Support/Google/Chrome/User Data')
options.add_argument('--profile-directory=Profile 1')

Habe ich auch schon ausprobiert. Leider funktioniert headless nicht mit dem Argument "--profile-directory".
Ergänzung ()

Bemme90 schrieb:
Ich hab leider keine Lösung für dein Problem, aber ich hatte auch unter C# Probleme mit headless.

Meine schmutzige Lösung?
Ich hab via Code das Fenster außerhalb des Monitors geschoben, indem ich die Position beeinflusst habe.
Das war in meinem Fall okay, da der PC nicht durch Menschenhand in Benutzung ist.

Kann ich leider nicht machen, da der Computer weiterhin in Benutzung bleiben soll
 
Du könntest versuchen die session cookies manuell zu speichern und wieder zu laden. In diesem Video wird das ganze erklärt:

Edit:
Schau dir auch mal diesen Ansatz an:
https://stackoverflow.com/questions...y-to-load-cookies-in-headless-chrome-selenium
 
Zuletzt bearbeitet:
hYpac0w schrieb:
Du könntest versuchen die session cookies manuell zu speichern und wieder zu laden. In diesem Video wird das ganze erklärt:

Edit:
Schau dir auch mal diesen Ansatz an:
https://stackoverflow.com/questions...y-to-load-cookies-in-headless-chrome-selenium

Der Stack Ansatz ist gut. Werde ich mal probieren. Das in dem Video ist ja das, was ich bereits probiere.
 
Dankeschön, mit dem Ansatz die Cookies in einer txt Datei zu speichern und wieder zu lesen hat geklappt!
 
  • Gefällt mir
Reaktionen: hYpac0w
FrazeColder schrieb:
Das in dem Video ist ja das, was ich bereits probiere.
Sorry, da hätte ich mir das Video besser mal komplett anschauen sollen :D
Aber freut mich zu hören, dass es mit dem manuellen Ansatz geklappt hat.
 
Zurück
Oben