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
    Liste = driver.find_elements_by_id("Liste1")
    [...]
    for item in Liste:
    [...]

    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

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

    Einmal editiert, zuletzt von sls (8. Oktober 2017 um 15:20)

  • 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.

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • 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.

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • 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.

    Zitat

    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

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • die Lösung ist ganz einfach

    for i in Liste das heißt einfach die Liste als gesuchtes Element setzen.

    Du hast vorher aber doch schon for item in Liste: gemacht, also wo ist da nun der Unterschied? :conf:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!