Mit xpath in html einen von vielen identischen Button finden, nach spezifischem String

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
3cosystem
User
Beiträge: 22
Registriert: Mittwoch 22. April 2020, 14:48

Hallo liebe Leute!

Ich bin ganz frisch bei der Programmierung mit python dabei.
Ich versuche gerade einige Dinge mit selenium in meinem Browser zu automatisieren.

Gerade versuche ich einen Button mit xpath zu finden, auf den ich clicken will.
Leider ist dieser seeeeeer tief im Code "versteckt".
Zusaetzlich gibt es im Code 20 dieser Buttons mit derselben Kennung. Suche ich also den Button, treff ich auf den ersten.
Vor jedem dieser Buttons ist allerdings ein spezifischer Datums-String vorhanden.
Ich moechte also nach dem String suchen und den darauffolgenden Button finden.
Leider finde ich dafuer nicht die richtige Syntax.
Gesucht wird: class="btn"
String waere: "1. Mai"
Kann mir bitte vielleicht jemand weiterhelfen?

Hier der html-Ausschnitt:

Code: Alles auswählen

	<div data-v-5f5d9469="" data-v-41ca14da="" class="mb-2">
		<div data-v-5f5d9469="" class="card pickup">
			<div data-v-5f5d9469="" class="card-body">
				<div data-v-5f5d9469="" class="card-title row">
					<div data-v-5f5d9469="" class="col text-truncate">
          				Dienstag, [b]12. Mai[/b], 17:30 Uhr</div>
          				<!---->
          			</div>
          		<p data-v-5f5d9469="" class="card-text clearfix">
          		<ul data-v-5f5d9469="" class="slots"> <li data-v-3a47be30="" data-v-5f5d9469="">
          		<button data-v-3a47be30="" title="" [b]class="btn"[/b] data-original-title="Hier eintragen">
          		<i data-v-3a47be30="" class="fa fa-question"></i></button></li>
          		<!----></ul></p>
          	</div>
          </div><!----> <!----> <!----> <!----> <!----> <!----></div>
 
Versucht habe ich es z.B. mit:

Code: Alles auswählen

driver.find_element_by_xpath("//*[contains(text(),'12. Mai')]//*[@class='btn']")
Ich bedanke mich recht herzlich im Voraus
LG
3cosystem
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@3cosystem: Du bist bei dem Element das den Text enthält ja schon zu tief und musst erst einmal wieder zwei Ebenen nach oben: "//*[contains(text(), '12. Mai')]/../..//button".
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
3cosystem
User
Beiträge: 22
Registriert: Mittwoch 22. April 2020, 14:48

Klasse danke!
Das mit dem /../ zum wieder Hochwandern hat mir gefehlt!
Antworten