Webdriver für Chrome

  • Hallo Zusammen,

    ich nutze jetzt schon länger den Webdriver für die Google Chrome Automatisierung.

    Leider wurde bei uns jetzt per GPO eine Startseite "Intranet" gesetzt und das _WD_Navigate($sSession, $url) zur eigentlichen URL dauert dadurch viel länger.

    Beim Google Chrome kann ich ja per Parameter direkt eine URL übergeben. Funktioniert sowas auch bei dem Webdriver?

    Beispiel: "C:\Program Files\Google\Chrome\Application\chrome.exe" http://www.google.de Hier kommt die per GPO hinterlegte Seite nicht.

    Danke

    Gruß gmmg

  • Hi gmmg ,

    _WD_Navigate($sSession, $url) zur eigentlichen URL dauert dadurch viel länger

    Dies wundert mich etwas, denn der Chromedriver kommt "eigentlich" frisch/leer/ohne GPO spezifische Einstellungen bzw. ziehen die nicht direkt.
    Oder klingst du dich direkt in den vorhanden Chrome Browser (in deine persönliche Session) ein? Also wird ein extra Fenster => Chromedriver.exe geöffnet oder passiert die Ausführung in deinem Chrome Browser?

    Beim Google Chrome kann ich ja per Parameter direkt eine URL übergeben. Funktioniert sowas auch bei dem Webdriver?

    Beispiel: "C:\Program Files\Google\Chrome\Application\chrome.exe" http://www.google.de Hier kommt die per GPO hinterlegte Seite nicht.

    Wenn das von mir oben geschriebene zutreffen sollte, das der Chromedriver.exe frisch ist (je nachdem was du an Capabilities übergibst), dann ist dies so nicht nötig sondern du gehst "ganz normal" über _WD_Navigate(), ja.

    • Kannst du deine eingestellten Capabilities teilen?
    • Kannst du den Output teilen, der erzeugt wird (also zumindest bis die Navigation (der Seitenaufruf)) durch ist?

    Viele Grüße
    Sven

  • Hallo Sven,

    beim Ausführen des Scriptes ist der der Google Chrome Browser geschlossen. Von daher sollte keine alte Session offen sein.

    Wenn ich das Script mit den folgenden sDesiredCapabilities ausführe, kommt die Standard Webseite und danach die Navigation zur gewünschten Webseite.

    AutoIt
    	$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _
        '"goog:chromeOptions": {"w3c": true, "excludeSwitches": ["enable-automation"], "useAutomationExtension": false, ' & _
        '"prefs": {"credentials_enable_service": false},' & _
    	'"args": ["--user-data-dir=C:\\Users\\' & @UserName & '\\AppData\\Local\\Google\\Chrome\\User Data\\chromedriver\\meinTool\\", "--profile-directory=Default"] }}}}'

    Wenn ich das so nutze wird für jedes der Autologin Tools ein entsprechender Ordner im AppData Pfad erstellt. Inhalt des Ordners siehe Bild unten.

    Wenn ich die sDesiredCapabilities wie folgt nutze, wird scheinbar die Standard Webseite nicht vorher geöffnet oder es geht einfach schneller.

    Es scheint aber dennoch eine Unterschied zu dem Parameteraufruf zu geben.

    "C:\Program Files\Google\Chrome\Application\chrome.exe" http://www.google.de

    AutoIt
    	$sDesiredCapabilities = '{"capabilities": {"alwaysMatch": {"unhandledPromptBehavior": "ignore", ' & _
        '"goog:chromeOptions": {"w3c": true, "excludeSwitches": ["enable-automation"], "useAutomationExtension": false, ' & _
        '"prefs": {"credentials_enable_service": false},' & _
    	'"args": ["start-maximized"] }}}}'

    Kann man das eventuell besser Lösen oder wird das nicht benötigt ?

    Gruß Marcel

    3 Mal editiert, zuletzt von gmmg (17. April 2024 um 15:24)

  • Also das ...

    ... wo nicht das "profile-directory" angegeben ist und gut funktioniert (schnell), versus ...

    ... in dem der Standardpfad von C:\Users\<username>\AppData\Local\Google\Chrome\User Data nach C:\Users\<username>\AppData\Local\Google\Chrome\User Data\chromedriver\meinTool\ gesetzt wird und daher erst die GPO Intranet Website aufgerufen wird und dann deine eigentliche Webseite. Hmmmm 🤔 ... .

    Also die Ordner welche im Screenshot abgebildet sind, sind einfach im "User Data" Verzeichnis und nicht in "meinTool". Daher stelle ich mal die Frage ob dies überhaupt noch so nötig ist, gebraucht wird oder ggf. ein Überbleibsel ist? Ich persönlich habe es noch nie gebraucht und Browser Automation begleitet mich nun schon einige Jahre lang.

    ⚠ Bitte beachte auch die Kommentare // im Json Snippet.

    Kann man das eventuell besser Lösen oder wird das nicht benötigt ?

    Was genau meinst du damit Marcel? Also anstatt den Capabilities-String (das JSON) auszuschreiben kannst du einfacher die wd_capabilities.au3 nutzen, welche auch im Projekt au3WebDriver liegt.
    Dann kannst du deine Werte in folgender Form angeben:

    Somit musst du auch nicht genau wissen wo welcher Wert in der Json-Struktur sein muss, da die Zuordnung durch die UDF gemacht wird.
    Allerdings, wenn du irgendwelche Sonderfälle hast, dann kann es schon mal sein das du doch den Capability-String schreiben musst.

    💡 Versuche es gern mal so und schaue dir im Output den aufgelösten Capability-String (mit der Variante _WD_CapabilitiesAdd) gern mal an und vergleiche ihn mit deinen String vorher.

    Es scheint aber dennoch eine Unterschied zu dem Parameteraufruf zu geben.

    "C:\Program Files\Google\Chrome\Application\chrome.exe" http://www.google.de

    Ja das kann sein, doch worin siehst du da ein Problem? Ich denke --user-data-dir und --profile-directory kannst du getrost weglassen. Außer du weißt sicher das du dies benötigst - ich denke nicht.
    Hoffe dies hilft dir ein wenig und verwirrt nicht noch zusätzlich 😅 .

    Viele Grüße
    Sven

  • Beitrag von SOLVE-SMART (17. April 2024 um 16:37)

    Dieser Beitrag wurde vom Autor gelöscht (17. April 2024 um 16:37).
  • Guten Morgen Sven,

    danke für deine Antwort. Ich schaue mir das an und teste nochmal.

    Die Umstellung auf Webdriver musste damals erfolgen, weil die IE Automation nicht mehr funktioniert hat.

    Vieles wurde da aus Beispielen übernommen.

    Gruß Marcel

  • Guten Morgen Marcel 👋 ,

    Vieles wurde da aus Beispielen übernommen.

    Ja sowas hatte ich mir gedacht/gehofft, denn dies macht die Sache einfacher, denke ich. Erstmal neu strukturieren und falls dann auffällt das etwas fehlt, was doch wichtig war (vielleicht), lieber neu anpassen, neue Optionen der Capabilities hinzufügen usw.

    Hat jemand den Webdriver für die Google Chrome Version 124.x.x.x. Die ist irgendwie nicht verfügbar für die Browserversion 124.x.x.x.

    Lädst du den Chromedriver immer selbst herunter? Oder benutzt du die dafür zu Verfügung stehende Funktion _WD_UpdateDriver?

    💡 Falls manuell, nein mache dir nicht den Aufwand, nutze die Funktion, denn dort kannst du ggf. auch einfach ein downgrade machen lassen. Ansonsten hast du hier die entsprechende Referenz der Google Chromedriver die für das Testing bereit gestellt werden.

    Manchmal sind nicht alle Versionen vorhanden, dann geht es meist nur um ein paar Std. und die nächste Chrome Version (normaler Browser) steht dann zu Verfügung.
    Bspw. 124.0.6367.60 gibt es nicht als Chromedriver (testing version). Entweder etwas warten, dann wird gleich die 125.x.x.x Version (Browser <=> Driver) genutzt oder du lässt downgraden, was wie gesagt über die Funktion gut geht.

    Ansonsten kannst du auch gern dieses Projekt von mir im Auge behalten: au3webdriver-boilerplate 😀 . In dem ich versuche den Einstieg mit dem WebDriver deutlich einfacher zu gestalten (wrapper Funktionen und so'n Kram). Ist immer aktuell, denn bspw. mit au3WebDriver v1.3.1 kam auch die "neue" Download-URL des Chromedrivers mit ins Projekt.
    Also schaue mal bitte ob du auch v1.3.1 nutzt, zu sehen in wd_code.au3 bei dir. Vielleicht hast du das kurze 🎬 Intro dazu noch nicht gesehen.

    Viele Grüße
    Sven

  • Ja, aktuell mache ich das Webdriver Update immer von Hand. Die Scripte + Webdriver liegen bei uns im Netzlaufwerk und der User der das öffnet, hat nur RO Rechte.

    Der Webdriver wird dann einmal heruntergeladen und per CMD auf die verschiedenen Scripte im Netzlaufwerk verteilt, ebenso, wenn es im Script mal eine Anpassung gab.

    Wir müssen diesen Prozess mit dem Netzlaufwerk aber demnächst anpassen, da wir auf Azure Cloud wechseln. Da habe ich aber noch keine richtige Idee, wenn es mal ein Script Update gibt.

    Die Scripte müssten dann ja lokal auf die Clients und brauchte für eventuelle Script Update einen Updater. Die WD_UpdateDriver Funktion wäre da ja schon mal ganz gut.

    Danke

    Gruß Marcel

  • Oh ah, ja dann schaue dir das mal genau an, ja. Ansonsten darauf achten, dass ihr v1.3.1 des au3WebDriver Projektes nutzt.

    Viel Erfolg und melde dich gern, falls es um Details in der Browser Automation gehen sollte 😀 .

    Viele Grüße
    Sven

  • Ja, die v1.3.1 nutze ich schon.

    habe jetzt mal die _WD_UpdateDriver eingebunden.

    AutoIt
    _WD_UpdateDriver('chrome', @ScriptDir & '\data\')

    Danke

    Marcel

  • Hallo Sven,

    hast du vielleicht für den Chrome ein einfachen Beispiel Script, was ich mir bearbeiten kann, also mit dem neuen Aufbau?

    Mein aktuelles Script sieht ja wie folgt aus:

    Wenn ich die DesiredCapabilities ohne --user-data-dir= aufrufe, werden die Cookies nicht gespeichert, deshalb ist der Aufruf hinterlegt.

    Gibt es dazu eine andere Lösung? Eben nochmal mit der heise.de Seite getestet.

    Gruß Marcel

    6 Mal editiert, zuletzt von gmmg (18. April 2024 um 12:37)

  • Hi Marcel,

    hast du vielleicht für den Chrome ein einfachen Beispiel Script, was ich mir bearbeiten kann, also mit dem neuen Aufbau?

    genau solche Beispiele findest du im GitHub Repository au3webdriver-boilerplate . Im post #8 hatte ich dir die Videoerklärung auch verlinkt.
    Allerdings ist dies eine größere Änderung für dich denke ich, da es sehr von deinem Skript abweicht. Dennoch, vielleicht hilft es - denn das Projekt mit POM Struktur (page object model) ist dafür ausgelegt auch mit größeren Browser Automatisierungsaufgaben umgehen zu können - zumindest behaupte ich dies 😅 .

    Schaue dir bitte einfach die README.md an, darin findest du hoffentlich ein paar Anreize.

    Wenn ich die DesiredCapabilities ohne --user-data-dir= aufrufe, werden die Cookies nicht gespeichert, deshalb ist der Aufruf hinterlegt.

    Wozu benötigst du die Cookies denn? Was genau tust du/ihr, in der Browser Automation?

    -----------------------

    Falls dir die Videos nicht zusagen oder du mit der README nicht klar kommst, dann kann ich es auch gern nochmal kurz herunterbrechen und es hier schreiben wie es gedacht ist usw. Doch genau damit ich dies nicht tun muss, habe ich ja die Beschreibung (README) und die Videos erstellt 😇 .

    Viele Grüße
    Sven

  • Guten Morgen,

    das boilerplate habe ich mir schon geladen und einen ersten Blick darauf geworfen. :)

    Bei den Automationen ist es so, dass einige der Webseiten bei jedem Zugriff eine Cookie Auswahl speichern wollen.

    Wenn ich nun in den DesiredCapabilities das --user-data-dir= angebe werden die Cookies nur beim ersten Zugriff abgefragt, beim nächsten Zugriff kommt dann keine Abfrage.

    Danke für deine Mühe mit mir :)

    Gruß Marcel

  • Hi Marcel, ah okay. Du möchtest du Cookie bzw. DSGV-Bestätigung nicht jedes Mal machen müssen, richtig?
    Ich habe dies bisher einfach mit automatisiert, denn so ein Klick am Anfang hat mich nie gestresst, aber okay.

    Das heißt also, wenn du --user-data-dir angibst, wird wieder erst die Intranet-Seite geladen und dann erst deine eigentliche?
    Falls dem so ist und du nicht auf --user-data-dir verzichten willst, dann können wir ggf. noch weitere Capabilities identifizieren welche das Ladeverhalten der "ersten" Seite (Intranet bei dir) ggf. unterbinden. Allerdings nur wenn es wirklich den Bedarf gibt.

    Mit Firefox gibt es bspw. browser.startup.homepage was deine Ziel-Url sein könnte, jedoch ist das Firefox spezifisch und auf die Schnelle habe ich nichts dazu für Chrome gefunden.

    Danke für deine Mühe mit mir :)

    Gerne 🤝 .

    Viele Grüße
    Sven

  • Ja genau, die Cookie Bestätigung soll nicht jedes mal gemacht werden.

    Richtig, wenn ich --user-data-dir angebe, wird wieder erst die Intranet-Seite geladen und dann erst die per _WD_Navigate gesetzte URL.

    Ist das eventuell etwas, was man umsetzen kann?

    Chrome-Einstellungen überschreiben  |  Manifest V2  |  Chrome for Developers
    So überschreiben Sie Chrome-Einstellungen mit einer Chrome-Erweiterung.
    developer.chrome.com

    Mach dir da wegen dem umsetzten keine Arbeit, außer es wird von anderen noch benötigt.

    Im Aufruf chrome://policy/ unter HomepageLocation sehe ich den Website Eintrag der da gesetzt ist.

    Chrome Enterprise Policy List & Management | Documentation
    Chrome Enterprise policies for businesses and organizations to manage Chrome Browser and ChromeOS.
    chromeenterprise.google


    Allen ein schönes Wochenende :)


    Gruß Marcel

    Einmal editiert, zuletzt von gmmg (19. April 2024 um 15:34)

  • Hi Marcel 👋 ,

    mal ein paar Fragen zum Ganzem:

    • Wie häufig läuft die Automatisierung überhaupt und für wie lange?
    • Also stört es wirklich das erst eure Intranet-Seite vorher geladen wird und dann die eigentliche Seite?
    • Geht es hier um 2 Sek. zeitlichen Unterschied zu vorher oder eher um 10 Sek. bspw.?
    • Mit was kannst du besser leben - immer den Cookie Consent zu bestätigen/wegzuklicken (einmal implementiert und fertig) oder die zusätzliche Wartezeit aushalten 😅 ?

    Also ich frage mich ob es ein wirkliches Problem ist oder aus dem Interesse heraus gewachsen ist, das möglichst alles stimmt/verbessert ist (was ich auch nachvollziehen könnte).

    Wie gesagt, bei weiteren Fragen immer gerne 🤝 .

    Viele Grüße
    Sven

  • Guten Morgen Sven,

    die Automatisierung wird von Kollegen (ca. 300) benutzt. Die Automatisierung selbst übergibt nur Login Daten und wird je nach Aufgabengebiet täglich mehrfach benutzt.

    Als Ladezeit hatte ich aktuell 5 Sekunden. Ich schau mir das mit dem Cookie Consent an, vielleicht ist es wirklich besser das darüber zu lösen.

    Danke

    Viele Grüße

    Marcel

  • Die Automatisierung selbst übergibt nur Login Daten

    Was heißt das? Es wird doch nicht nur ein Login automatisiert oder? Also wird dann im Chromedriver durch die 300 Nutzer gearbeitet oder wie und was macht ihr genau?
    Jetzt bin ich neugierig 🤔 😅 .

    Viele Grüße
    Sven

  • Hallo Sven,

    ein kleines Beispiel zu deiner Frage.

    Die Website xyz hat ca. 40 -50 Agenturnummern. Pro Agenturnummer gibt es einen User und ein Passwort. Die MA selbst sollen die Zugangsdaten nicht kennen. Wurde so vom GF festgelegt.

    Diese Daten stehen nun verschlüsselt in einer internen DB. Das Script hat nun eine GUI, und die Agenturnummern werden in einem Dropdown aufgelistet.

    Wählt der User nun die Agenturnummer XYZ-1123, wird per Chromedriver die Website geöffnet und der automatische Login durchgeführt, die Website bleibt offen, der Chromedriver wird beendet.

    Auf der Webseite macht der User entsprechende Eintragungen oder was auch immer und schließt diese wieder. Im nächsten Moment kann es sein, dass der User die Nummer XYZ-456 benötigt.

    Erneuter Login usw.

    In einem anderen Fall wurden für die User Website Zugriffstoken erstellt, diese liegen auch wieder in einer DB und werden anhand des @Username per Website Link übergeben und per Chromedriver wird dann nur der Login durchgeführt. Auch hier wird der Chromedriver danach wieder beendet und die Website bleibt offen.

    Viele Grüße zurück

    Marcel