NEWBI: WebsiteEingabe mit wd_core.au3 / _WD_ClickElement undefined function Fehler

  • Hallo zusammen,

    bin neu hier. Hab schon mal früher ein wenig mit AutoIt gearbeitet, daher ist mir das System nicht neu. Hab damals AutoIt verwendet, um Formulare auf einer DOS-ähnlichen Seite auszufüllen. Da hab ich die Fähigkeiten von ImageSearch verwendet.

    Jetzt habe ich folgendes Problem: Mein Arbeitgeber hat jetzt so ein Buchungssystem für unsere Büroarbeitsplätze eingefügt. Alles hübsch webbasiert.

    Meine Idee war jetzt, dass ich die Seite aufrufe und dann Datum anklicken lasse.
    In späteren Schritten soll dann eben auch das Datum automatisch ausgewählt werden etc

    Das ist der Code:


    #include "C:\Apps\AutoIt3\Include\wd_core.au3" ; ist die auWebdriver.1.3. , msedgedriver.exe gestartet
    #include "C:\Apps\AutoIt3\Include\Json.au3"
    #include "C:\Apps\AutoIt3\Include\WinHttp.au3"

    _WD_Startup()

    $hSession = _WD_CreateSession()

    _WD_Navigate($hSession, "https://meinefirma.flexopus.com/book/select-bo…Europe%2FBerlin")

    ; Versuche das Element zu finden
    $hElement = _WD_FindElement($hSession, $_WD_LOCATOR_ByXPath, "//span[@tabindex='0'][contains(.,'12')]")
    If @error Then
    MsgBox(0, "Fehler", "Element nicht gefunden.")
    Else
    _WD_ClickElement($hSession, $hElement)
    EndIf

    _WD_CloseSession($hSession)
    _WD_Shutdown()


    Das ist die Konsolenausgabe:
    >"C:\Apps\AutoIt3\SciTE4AutoIt3\..\AutoIt3.exe" "C:\Apps\AutoIt3\SciTE4AutoIt3\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "C:\Apps\AutoIt3\AutoIt_Projekte\test2\test2.au3" /UserParams
    +>23:20:37 Starting AutoIt3Wrapper (21.316.1639.1) from:SciTE.exe (4.4.6.0) Keyboard:00010407 OS:WIN_10/2009 CPU:X64 OS:X64 Environment(Language:0407) CodePage:0 utf8.auto.check:4
    +> SciTEDir => C:\Apps\AutoIt3\SciTE4AutoIt3 UserDir => C:\Apps\AutoIt3\SciTE4AutoIt3\AutoIt3Wrapper
    >Running AU3Check (3.3.16.1) from:C:\Apps\AutoIt3 input:C:\Apps\AutoIt3\AutoIt_Projekte\test2\test2.au3
    "C:\Apps\AutoIt3\AutoIt_Projekte\test2\test2.au3"(16,43) : error: _WD_ClickElement(): undefined function.
    _WD_ClickElement($hSession, $hElement)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    "C:\Apps\AutoIt3\AutoIt_Projekte\test2\test2.au3"(19,28) : error: _WD_CloseSession(): undefined function.
    _WD_CloseSession($hSession)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Apps\AutoIt3\AutoIt_Projekte\test2\test2.au3 - 2 error(s), 0 warning(s)
    !>23:20:38 AU3Check ended. Press F4 to jump to next error.rc:2
    +>23:20:38 AutoIt3Wrapper Finished.
    >Exit code: 2 Time: 0.9591

    Wie man erkennen kann laufen 2 Teile auf Fehler.


    Hat jemand von euch ne Idee, was ich falsch mache.

    Wäre über jeden Hinweis dankbar.


    LG

    Markus

  • Erste Frage: Welchen Browser willst Du automatisieren?
    Zweite Frage: Bist Du für die Installation vorgegangen wie im engl. Wiki beschrieben?

    Der WebDriver ist noch heftig in Entwicklung.
    Prüfe daher, ob Du die aktuellste Version verwendest, denn lt. Beispiel im Wiki sollte so "geklickt" werden:

    AutoIt
    ; click the element
    _WD_ElementAction($WD_SESSION, $sElement, 'click')
  • mloew

    Hay Willkommen im Forum,
    Ich habe da was für dich, ich habe bereits einen Code den du verwenden könntest.

    Es sind einige Browser mit intrigiert.

    Ursprünglich habe ich den Code geschrieben damit ich das Fenster ins Menu einbinden kann und ich somit bei der Einrichtung direkt einen Test durchführen kann um zu sehen ob auch der Browser aufgerufen wird.
    Und damit ich die Einstellung auch flexibel wieder wechseln kann.

    Du kannst natürlich auch die mitgelieferte Demo von der udf anschauen.

    bekannte Probleme bei meinem Skript.:
    - chrome_legecy, öffnet fälschlicher weiße den edgebrowser wenn keine alte Version von Google Chrome installiert ist.
    - $sLogPath ist nicht richtig eingebunden
    - msedgeie bin ich mir nicht sicher ob da wirklich der ie-modus ist was ich da sehe wenn ich es starte. (die webdriver exe exsiert auch nicht zum runterladen in der udf, hatte mir diesen per hand runtergeladen.)

    Damit kannst du etwas rumspielen wenn du möchstet :

    5 Mal editiert, zuletzt von MojoeB (9. Januar 2024 um 21:58) aus folgendem Grund: versehentlich den alten code rein kopiert. codeedit nun der richtige. edit 2. nochmal die Funktion Webdrivererror angepasst.

  • Erste Frage: Welchen Browser willst Du automatisieren?
    Zweite Frage: Bist Du für die Installation vorgegangen wie im engl. Wiki beschrieben?

    Der WebDriver ist noch heftig in Entwicklung.
    Prüfe daher, ob Du die aktuellste Version verwendest, denn lt. Beispiel im Wiki sollte so "geklickt" werden:

    AutoIt
    ; click the element
    _WD_ElementAction($WD_SESSION, $sElement, 'click')

    Hi Water,

    Danke für deine Antwort


    Ja, ich habe mich an die Installation gehalten.

    Automatisieren will ich Edge. Hierzu hab ich mir auch die Datei https://developer.microsoft.com/en-us/microsof…ools/webdriver/ runtergeladen und zum Test erst manuel gestartet, was ich auch Taskmanager geprüft habe.

    Das, was ich bisher gefunden habe, war _WD_ClickElement und nicht _WD_ElementAction (..click)

    Das hilft schon mal viel weiter.

    Werde das weiter testen.


    Danke dir schon mal für deine schnelle Hilfe


    Markus

  • Hi MojoeB,

    das Teil ist ja echt ein dickes Brett, was du mir da hingelegt hast.

    Das muss ich erst mal verdauen.


    Vielen lieben Dank

    Markus

  • Nochmal an euch beide vielen Dank für eure Hilfe.

    Ich hab mal eine Frage:

    Macht es überhaupt Sinn, sich mit xpath und webdriver zu beschäftigen, wenn das noch alles experimentel ist?

    Xpath ist ja zumindest Standard.

    Alternativ kommt dann eben pixelsearch / imagesearch zum Einsatz, was eben nicht ganz so hübsch ist, aber ja auch geht.

    Was wäre euer Vorschlag?

  • mloew

    ^^ ich bin grad selbst dabei brauch das für eins meiner Projekte auf der Arbeit.
    ich habe zwar schon eine fertige Version des Projektes aber das läuft nur mit Edge und mit der älteren udf-

    Ich empfehle dir immer mit _WD_UpdateDriver den Driver runterzuladen falls es eine neue version davon gibt oder der edge sich aktualisiert benötigt man das ab und zu, damit die Anwendung nicht auf einmal nicht mehr funktioniert.


    edit:
    du musst dich nicht wirklich mit xpath auskennen, du benötigst nur die werte von dem jeweiligen Element und die bekommt du mit dem Entwickler Modus des Browsers, damit kannst du ein element auswählen, danach wirst du direkt zum code im html editor geleitet, dort kannst du dann einfach den kleinen xpath kopieren (also im Kontext Menu mit rechtsklick ).

  • Hi MojoeB

    xpath-Werte lese ich über Firefox aus.

    Das Teil soll aber später im Edge laufen.

    Was aktuell mein Problem ist:

    Ich bekomme keinen Click auf das Element, weil ich den genauen Befehl für den "Mouseclick" auf das Objekt nicht rausbekomme.

    Also somit hänge ich am Syntax fest 🤮

    Daher werde ich morgen mit _WD_ElementAction weiter testen.

  • ist egal mit welchem browser du den xpath ausließt.

    ja water hat es schon richtig gesagt


    hier nochmal eine Ergänzung :

    Code
    _WD_Navigate($hSession, 'link')
    $sElement = _WD_FindElement($hSession, 'xpath', "//span[@tabindex='0'][contains(.,'12')]")
    _WD_ElementAction($hSession,  $sElement, 'click')
  • Hi MojoeB

    Wenn ich etwas nicht verstehe, versuche ich die einzelnen Teile auseinander zu nehmen und zu analysieren. Hierzu hab ich jetzt hier ein paar Variablen aufgelöst und im Klartext geschrieben.

    Mein Code ist jetzt wie folgt:

    run("C:\Apps\AutoIt3\Include2\edgedriver_win64\msedgedriver.exe", "C:\Apps\AutoIt3\Include2\edgedriver_win64\", @SW_HIDE)

    ;Damit starte ich die Webseite. Standardbrowser ist Edge. Hierzu habe ich im Vorwege den Treiber gestartet
    ;ich hab den Weg gewählt, damit ich sehen kann, was passiert. Mit dem reinen Öffnen der Session sehe ich ja nichts
    ShellExecute("https://meinefirma.flexopus.com/book/select-bo…Europe%2FBerlin")
    Sleep(5000) ; Wartezeit für die erste Seite

    ;Hiermit erzeuge ich die Variable $sElement. Über _WD_FindElement soll das xpathObjekt auf der Webseite gefunden werden
    $sElement = _WD_FindElement("https://meinefirma.flexopus.com/book/select-bo…Europe%2FBerlin", 'xpath', "//span[@tabindex='0'][contains(.,'12')]")

    ;Die Aktion _WD_ElementAktion soll auf der Webseite das Element anklicken
    _WD_ElementAction("https://meinefirma.flexopus.com/book/select-bo…Europe%2FBerlin", $sElement, 'click')


    Also aufrufen geht und die Webseite öffnet sich auch.
    Nur diere Click wird nicht aufgeführt

    Das sind die infos dazu aus der Konsole
    _WD_Post ==> Send / Recv error [6] : HTTP status = 0
    _WD_FindElement ==> Send / Recv error [6] : Parameters: Strategy=xpath Selector=//span[@tabindex='0'][contains(.,'12')] StartNodeID=Default Multiple=Default ShadowRoot=Default
    __WD_Post ==> Send / Recv error [6] : HTTP status = 0
    _WD_ElementAction ==> Send / Recv error [6] : Parameters: Command=click Option=Default

    Ist da was jetzt am xpath falsch?

  • Dann halt schritt für schritt, ich habe grad dir das nochmal erstellt beim testen bin ich fast durchgedreht weil plötzlich nichts mehr gestartet ist.
    nachdem ich mich intensiv auf die Fehlersuche begeben habe, ohne einen Grund zu finden.

    Habe ich mich dann doch mal entschlossen komplett neu zu starten.
    Naja ohne etwas zu ändern ging es nach dem Neustart wieder.

    Einmal editiert, zuletzt von MojoeB (10. Januar 2024 um 17:46)

  • schau auch mal hier: WebDriver- Chrome Browser

    und hier ein Beispiel:

    Der Pfad für den msedgedriver muss entsprechend angepasst werden.

    _WD_Option('Driver', 'D:\Scripte\WebDriver\EdgeDriver\edgedriver_win32_120\msedgedriver.exe')

    Gruß gmmg

  • Hi mloew (Markus) 👋 ,

    ist das Thema für dich noch relevant? Ich könnte ggf. ein paar Tipps zum Umgang mit dem "au3WebDriver" Projekt geben.

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

    Unabhängig davon eine Einordnung auf das Folgende von dir:

    Macht es überhaupt Sinn, sich mit xpath und webdriver zu beschäftigen, wenn das noch alles experimentel ist?

    Xpath ist ja zumindest Standard.

    Experimentel ist es nicht. Der Hinweis von water das der WebDriver noch in Entwicklung ist bezog sich sicherlich darauf, dass darauf geachtet werden sollte das der jeweils aktuelle Treiber (Browser) genutzt wird. Zudem das das Projekt "au3WebDriver" (auf GitHub) stetig weiterentwickelt und gepflegt wird und nicht abgeschlossen ist. Dies bedeutet allerdings nicht, dass es nicht stabil wäre, falls dies deine Frage war 🤔 ? Wenn du Aktionen im Browser automatisieren möchtest, mit UI oder ohne (headless mode), ist die Verwendung von WebDriver sicherlich keine schlechte Wahl. Denn Alternativen wie Image- und/oder Pixel-Suche usw. sind recht unflexibel und verhalten sich bei verschiedenen Auflösungen i. d. R. auch fehlerhaft.

    Zum Thema XPath:
    Dies ist nur eine Art Elemente der Seitenstruktur (DOM) zu finden um dann mit ihnen zu interagieren. Es gibt bspw. mit dem "CSS Selector" auch eine weitere sehr weit verbreitete "Locator Strategy", welche für die meisten Beginner in diesem Umfeld etwas einfacher zu verstehen ist und im Umgang ebenfalls einfacher ist. Für komplexere (robustere) Suchen nach einem oder mehreren Elementen im DOM-Baum ist XPath allerdings die bessere Variante. Meiner Ansicht nach machst du nichts falsch, wenn du mit den Developer Tools (F12) des jeweiligen Browsers startest und dir den jeweiligen Selector generieren lässt bzw. diesen einfach herauskopierst. 💡 Dennoch lohnt sich XPath sehr - einmal die Syntax verstanden und man ist mega flexibel und robust in seiner Elementerkennung.

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

    Nun zurück zu meiner Eingangsfrage: Ist das Thema für dich noch relevant?

    Viele Grüße
    Sven