Quellcode und Links aus dem Chrome Browser auslesen

  • Das Wiki verlinkt auf einen Thread mit Beispielen. Siehe dort.

    Oder WD_Demo das mit der UDF mitkommt.

    ich habe da nur das gefunden:

    Code
    _WD_DeleteSession($sSession)
    _WD_Shutdown()

    und das Killt mir den kompletten Chrome Browser.... und wenn ich ihn dann wieder öffne, kommt die Meldung, dass ich Chrome unsachgemäß geschlossen habe.

    ich würde gerne einzelne Tabs schließen und zum Schluss auch das letzte Chrome-Fenster, ohne dass Chrome mit mir schimpft... :)

    Gruß

  • Das ist die korrekte Vorgangsweise - zumindest in meinem FF Skript funktioniert das perfekt.


    P.S. Wenn man Dir bei einem Problem helfen soll, dann musst Du möglichst vollständige Informationen zur Verfügung stellen. "Geht nicht" oder "Es kommt eine Fehlermeldung" genügt nicht.

  • Das ist die korrekte Vorgangsweise - zumindest in meinem FF Skript funktioniert das perfekt.

    ok.... Chrome mag das offensichtlich nicht so...


    P.S. Wenn man Dir bei einem Problem helfen soll, dann musst Du möglichst vollständige Informationen zur Verfügung stellen. "Geht nicht" oder "Es kommt eine Fehlermeldung" genügt nicht.

    ich bemühe mich....







    Und warum funktioniert eigentlich das "_WD_Loadwait($sSession)" nicht?


    Code
    Local $sUrl = "https://www.Google.com" ; Url
    _WD_Navigate($sSession,$sUrl)
    _WD_Loadwait($sSession)
    $sSource = _WD_GetSource($sSession)

    der Code läuft immer weiter, obwohl die Seite noch nicht geladen ist. Deshalb ist im "$sSource" am Ende der falsche oder zumindest nicht der Vollständige Quell-Code... :/


    Gibt es in einem Quell-Code einen Bereich/Zeichenfolge, die auf allen Seiten gleich ist und zum Schluss geladen wir, nach der man suchen kann, ob die Seite fertig geladen ist.


    Gruß

  • ok.... Chrome mag das offensichtlich nicht so...

    Schau mal in die WD_Demo.au3 rein. Da wird Chrome genau so beendet:

    Code
    _WD_DeleteSession($sSession)
    _WD_Shutdown()


    Schreib mal vor und nach WD_Loadwait die Zeit auf die Konsole. So sieht man, wie lange die Funktion wartet.

  • Schau mal in die WD_Demo.au3 rein. Da wird Chrome genau so beendet:

    ja... ich habe es gesehen... hatte gehofft, dass es eine bessere Lösung gibt....




    Schreib mal vor und nach WD_Loadwait die Zeit auf die Konsole. So sieht man, wie lange die Funktion wartet.

    So? oder gibt es da eine schönere Lösung?

    Code
    Local $sUrl = "https://www.Google.com" ; Url
    _WD_Navigate($sSession,$sUrl) ; Navigate to the designated URL
    Local $hTimer = TimerInit()
    _WD_Loadwait($sSession)
    MsgBox(0, "", Round(TimerDiff($hTimer)/ 1000,3))

    mit diesem versuch, wartet er 0,008 Sekunden also praktisch nicht.... aber ich habe es auch mal nur mit "_WD_Loadwait($sSession)" versucht, und das Internet ausgeschalten, es konnte also nicht fertig laden, und der Code lief einfach durch....


    Mein Problem ist nämlich, dass ich nach etwas auf der Seite suche, das noch nicht geladen ist, obwohl ich "_WD_Loadwait($sSession)" verwende.... er wartet auf jeden fall nicht, bis alles geladen ist.


    Gruß

  • TimerDiff gibt den Wert in Millisekunden zurück.

    Wenn Du den Wert durch 1000 dividierst, erhältst Du Sekunden.

    Wie willst Du dann ein Ergebnis von 0,008 erhalten?

  • TimerDiff gibt den Wert in Millisekunden zurück.

    Wenn Du den Wert durch 1000 dividierst, erhältst Du Sekunden.

    Wie willst Du dann ein Ergebnis von 0,008 erhalten?

    na 0,008 Sekunden gehe ich mal davon aus. Ich hatte ja das Gefühl, dass "_WD_Loadwait($sSession)" nicht funktioniert.... Die 0,008 Sekunden würden das bestätigen...

    Die Frage ist, warum funktioniert sie nicht und habt Ihr die gleiche Erfahrung gemacht?

  • Ich hatte ja das Gefühl, dass "_WD_Loadwait($sSession)" nicht funktioniert...

    Kontrolliere doch einfach, was _WD_Loadwait zurückgibt:

    AutoIt
    Local $hTimer = TimerInit()
    Local $iLoadWait = _WD_Loadwait($sSession)
    ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & " var: $iLoadWait --> " & $iLoadWait & @LF & "!@ " & @TAB & "#Error: " & @error & @LF) ; 1 (Success)
    ConsoleWrite('! ********************************************************* DiffTime --> ' & TimerDiff($hTimer) & @CRLF) ; 16.6406 ms
  • wd_loadwait scheint tatsächlich manchmal nicht auszureichen. Da gebe ich dann noch ein Sleep(3000) dazu. Ausprobieren!

    Mein erstes Programm bestand aus ca. 2.000 Lochkarten und nachdem sie mir das erste mal runtergefallen sind, habe ich die letzten beiden der 80 Byte für eine Numerierung benutzt :rofl:

  • wd_loadwait scheint tatsächlich manchmal nicht auszureichen. Da gebe ich dann noch ein Sleep(3000) dazu. Ausprobieren!

    Ich habe eine Funktion geschrieben, die in einer Schleife auf ein bestimmten String im Quell-Code wartet, bevor es weiter geht.... läuft wesentlich zuverlässiger...



    ich habe das Gefühl, dass Chrome, die Automatisierungssoftware verwendet, etwas anders ist als der normale Chrome-Browser... zumindest sind die Einstellungen nicht identisch und auch die Seiten sind teilweise geringfügig unterschiedlich.... Warum ist das so und wie kann man diese automatisierungs-Variante abschalten?

    Gruß

  • Solltet Du hier keine Antwort auf Deine Fragen erhalten, dann schlage ich vor, dass Du DIch mal im engl. Forum umsiehst. Dort beantwortet der Entwickler der WebDriver UDF (Danp2) Fragen.

  • An der Stelle scheint sich Dan auch nicht so ganz sicher zu sein. Bei WD_Loadwait() wartet er auf "complete" vom Webdriver, beim Öffnen einer Seite wartet(e) er, bis ein neues Handle erscheint (finde das in der aktuellen Release allerdings nicht mehr auf Anhieb). Das "complete" scheint nicht immer "complete" zu sein.

    Die Browser sehen anders aus aufgrund der Parameter, die Du mit Desiredcapabilities übergibst. Dazu müsstest Du mal tiefer beim Chromedriver einsteigen.

    Mein erstes Programm bestand aus ca. 2.000 Lochkarten und nachdem sie mir das erste mal runtergefallen sind, habe ich die letzten beiden der 80 Byte für eine Numerierung benutzt :rofl:

  • Die Browser sehen anders aus aufgrund der Parameter, die Du mit Desiredcapabilities übergibst. Dazu müsstest Du mal tiefer beim Chromedriver einsteigen.

    ok.... ich möchte es einfach identisch zum normalen Chrome haben... Das sollte doch eigentlich der Standard sein...

  • Ist es aber nicht, das hatte ich doch schon einmal geschrieben. Die Webdriver (=Chromedriver)-Entwickler haben das Projekt vorgesehen zum automatisierten Testen von Webseiten und nicht für das, was wir damit machen. Du kannst sehr viel über die Parameter des Chromedrivers einstellen, aber auch die können von einem auf den anderen Tag geändert oder abgeschaltet werden.


    Ich habe übrigens den Balken "Chrome wird von automatisierter Testsoftware gesteuert"



    unkonventionell wegbekommen: Send("{Tab} ") und weg ist er. Beim Edge muss man allerdings 6 Tabs schicken.

    Mein erstes Programm bestand aus ca. 2.000 Lochkarten und nachdem sie mir das erste mal runtergefallen sind, habe ich die letzten beiden der 80 Byte für eine Numerierung benutzt :rofl:

  • Hallo...

    der "Switch" Befehl geht mir ein bisschen auf die Nerven, weil er nicht nur das Tab im Chrome nach vorne holt, sondern er es komplett nach vorne holt. Wenn ich also gerade im Firefox oder Excel etwas anderes arbeiten will, ploppt mir der "Switch" Befehl immer in meine Arbeit, indem er das Chrome nach vorne auf den Desktop holt... gibt es da noch eine Möglichkeit um das zu verhindern??

    so habe ich es versucht, dass ich den "Switch" Befehl gar nicht verwenden muss, hat aber nicht geklappt.

    Hatte gehofft, so nicht Switchen zu müssen und das entsprechende Tab direkt ansteuern zu können, ohne ihn in den Vordergrund holen zu müssen



    Wenn ich das mit Firefox mal versuchen will, was benötige ich dafür und wo finde ich das? Soll ich dann dafür ein neues Thema auf machen oder bekomme ich dann wieder den Hinweis, dass ich meine Themen der letzten Jahre anschauen soll?


    Gruß

  • Kein neues Thema ;)

    Firefox und Edge kannst Du genau so benutzen wie Chrome, Dan's Webdriver UDF ist für alle ausgelegt. Du musst Dir nur neben SetupChrome noch SetupEdge und SetupFirefox dazu nehmen. Die Driver findest Du über die Hinweisseiten und sie heißen geckodriver.exe für Firefox und msedgedriver.exe für Edge (den neuen Edge).

    Heißt: Driver downloaden, statt SetupChrome den anderen Setup aufrufen und der Rest vom Script bleibt in fast allen Fällen gleich.


    Ansonsten gegen das Poppen: Demo und Wiki anschauen, mal in WD_Core und WD_Helper und beim Webdriver stöbern: es gibt Parameter für minimized, hidden usw. Wenn Du eine vernünftige Lösung gefunden hast, hier veröffentlichen. Ich brauche aktuell nur das Gegenteil, also Fenster nach vorne holen. Aber vielleicht irgendwann auch mal das Gegenteil?


    Was programmierst Du überhaupt, würde vielleicht helfen, Ideen zu finden.

    Mein erstes Programm bestand aus ca. 2.000 Lochkarten und nachdem sie mir das erste mal runtergefallen sind, habe ich die letzten beiden der 80 Byte für eine Numerierung benutzt :rofl:

  • Hallo...

    Wie würden hier denn die Anderungen aussehen, wenn man auch mit Firefox die Einstellungen im Browser speichern will?


    Code
    Func SetupGecko()
    _WD_Option('Driver', 'geckodriver.exe')
    _WD_Option('Port', 4444)
    _WD_Option('DriverParams', '--log trace')
    $sDesiredCapabilities = '{"desiredCapabilities":{"javascriptEnabled":true,"nativeEvents":true,"acceptInsecureCerts":true}}'
    EndFunc


    Und woher kommt das ständige Piepen, während Firefox aufgeführt wird? kann es sein, dass Firefox das macht, wenn man Elemente im Code zum klicken hat, die im Browser nicht verfügbar sind? irgendwie extrem nervig.


    Gruß Faultier

  • Hallo...

    kann ich eigentlich alle Dateien, außer die Cromdriver.exe, die ich zu beginn für den Chrome-Browser runter laden musste auch für den Firefox-Browser nutzen oder brauche ich da ein anderes Dateien.

    Ich habe die geckodriver.exe Version 71.0.0.7222 ist das die aktuelle? Mein Firefox hat die Version 77.0.1 (64Bit). ich vermute, dass ich nicht die richtige Datei gefunden habe... wo finde ich denn die richtige Datei?

    Gruß

  • Du brauchst chromedriver.exe für Chrome, geckodriver.exe für Firefox und msedgedriver.exe für den neuen Edge Chromium. Bis auf das Setup im Programm ist alles gleich, keine weiteren Dateien, keine Änderung im Programm (sollte zumindest - es sei denn, die Webseite verhält sich bei einem der Browser anders als bei einem anderen).

    Bedeutet, dass Du ein Programm für alle drei Browser schreiben kannst und über den Aufruf vom Setup bestimmst Du den Browser.


    Wenn Du gemäß Anleitung nach den Webdrivern suchst, findest Du die richtigen: z.B. Geckodriver


    Und wenn Du dann das hier gefunden hast, liegst Du richtig:


    Mein erstes Programm bestand aus ca. 2.000 Lochkarten und nachdem sie mir das erste mal runtergefallen sind, habe ich die letzten beiden der 80 Byte für eine Numerierung benutzt :rofl:

  • Wenn Du gemäß Anleitung nach den Webdrivern suchst, findest Du die richtigen: z.B. Geckodriver


    Und wenn Du dann das hier gefunden hast, liegst Du richtig:

    Ja... dann habe ich da bis jetzt alles richtig gemacht vielen Dank...



    Was das Piepen angeht.... Ich habe mal ein Beispiel-Code erstellt, in dem bei mir das Piepen vorkommt.... Vielleicht erkennt jemand das Problem

    Wenn ich diese Zeile deaktivieren ist das Piepen zwar weg aber für meinen Code natürlich schlecht.... :D



    Gruß Faultier