For Schleifen Erweiterung (Selenium)

  • Hallo Leute ich hoffe ihr genießt den Sonntag,

    ich habe ein Porblem mit python und dem Modul Selenium::whistling:


    Wir nehmen einfach mal ein HTML Document wie dieses



    so was ich jetzt versuche ist mir mit folgendem code alle elemente (Text von Listenelement li) auszugeben und bei jedem einzelen Element auf den zugehörigen Button zu klicken.


    Mein Problem ist jetzt, dass das Modul Selenium was ich dafür benutze um die Webseite zu automatisieren. Nicht erst den Button im Listenelement1 nimmt und mir den Text ausgibt dann auf den zugehörigen Button klickt und dann mir das zweite Listenelemententext ausgibt sowie auf den zugehörigen Button2 klickt. Sondern er gibt mir alle Listenelemententexte aus und klickt nur auf den ersten Button.



    Falls noch fragen dazu sind sagt sie mir ruhig ich verzeweifel daran 8o


  • Servus,


    so wie ich das sehe iterierst du mit der For-Schleife nur über `Liste1`.


    Python
    1. Liste = driver.find_elements_by_id("Liste1")
    2. [...]
    3. for item in Liste:
    4. [...]

    Er wird `Listenelement2` also nie abgreifen. Davon mal abgesehen, was ist denn überhaupt Zweck der Übung? Ich habe esmit deiner Beschreibung immernoch nicht verstanden.


    Wofür brauchst du dieses try/except-Gewurschtel? Du weist Selenium an, den entsprechenden Button aus einer Liste (li) zu drücken, dafür brauchst du doch keine verschachtelte Ausnahmebehandlung, in dem du einfach das selbe nochmals wiederholst. Entweder Selenium klickt den Button erfolgreich, oder es entsteht ein Fehler.


    Du solltest versuchen, die entsprechende Elternklasse dieser ganzen gleichartigen Listenelemente anzusprechen, und in einem gesonderten Schritt dann über die Kind-Elemente (li) zu iterieren.


    Mfg, sls

  • Genau Richtig aber wie sage ich ihm das er in den anderen Listenelementen weiter machen soll?


    Ich würde das HTML-Template mit BeautifulSoup parsen:


    z.B. so:



    Ich bin mit Selenium nicht so firm, es gibt bestimmt noch eine bessere Möglichkeit dort alle Listenelemente abzugreifen und die Aktionen durchzuführen.

  • Naja Selenium hat mir ja schon alle <li> texte ausgegeben nur leider funktioniert die Click automatisierung auf jedes Detailelement nicht und das ist mit BeautifulSoup leider nicht möglich. Dieses Modul kann nur Texte ausgeben und nicht automatisieren.

  • Um welche Seite geht es konkret? Es ist nicht ersichtlich, wo `details` vorkommt.


    Bisher ergibt sich für mich nur folgende Logik aus dem was ich von deiner Schilderung entnehmen konnte:



    Wenn eine der click()-Aufrufe schief läuft, soll er die Ausnahme abfangen, prüf' doch mal ob er danach die Schleife abbricht, wenn ja, musst du gewährleisten, dass er das Programm hier nicht abbricht sondern trotzdem weiterläuft.

  • Hmm das Problem is, das ich dir die Seite nicht schicken kann, weil es intern ist. Verstehst du denn was ich meine ? oder ist das zu unübersichtlich ? Ich würde dir das gerne über teamviewer oder so mal zeigen...

  • Ich würde dir das gerne über teamviewer oder so mal zeigen...

    Kann ich leider nicht machen. Ist füre ein Forum nicht zweckdienlich. Wenn die Angaben so geheim sind, musst du entsprechende Angaben logisch umschreiben dass keine schützenswerten Angaben preisgegeben werden. Für einen anständigen Lösungsansatz sind vollständige Angaben jedoch enorm hilfreich. Umso weniger Informationen, desto mehr Mutmaßungen werden angestellt, desto weniger Hilfreich werden die Lösungsansätze.


    Quote

    Verstehst du denn was ich meine ? oder ist das zu unübersichtlich ?

    Nein, ehrlich gesagt tue ich das nicht und ja, es ist sehr unübersichtlich.


    Daher nochmals mit der Bitte: du hast in deiner Schleife ein Logikproblem. Daher solltest du step by step debuggen und versuchen zu verstehen, warum es nicht zu dem gewünschten Verhalten kommt. Nutzt du Idle? Das hat einen integrierten debugger. Ebenso PyCharm. Andernfalls kannst du jeden Schritt auch mit einem print() prüfen.


    Ich kann anhand oben zu Grunde liegender Informationen nur mutmaßen, dass er nach dem Aufruf von .click() ein Problem hat und die Schleife abbricht. Das würde dafür sprechen, weil er das Zweite Objekt nie aufruft. Auch dein time.sleep(2) - ich habe es bei diversen JavaScript-Codes schon erlebt, dass die Ausführung des Codes länger dauert als zwei Sekunden.


    Mfg,


    sls

  • Hey danke nochmal, du hattest recht ich hab ein logikproblem mit eingebaut.


    die Lösung ist ganz einfach


    for i in Liste das heißt einfach die Liste als gesuchtes Element setzen. :) danke !