Selenium elements mit xpath finden?

Hanibal545  04.09.2022, 15:47

Kannst du vielleicht ein Beispiel geben?

j2910 
Fragesteller
 04.09.2022, 16:13

Hab alles geschickt

3 Antworten

Mit // am Anfang kannst du relative Pfade angeben. In deinem Fall kannst du das auch so schreiben:

//span[@class="default-label-box"][@key="M[0]Series"]/text()

j2910 
Fragesteller
 04.09.2022, 16:34

Muss dass ins Klammern sein? Weil er sonst die default-label-box und M[0]Series als Fehler anstreicht, da diese schon in den Anfürhungszeichen sind

0
Pepepizzapalast  04.09.2022, 16:38
@j2910

Dann musst du das escapen:

//span[@class=\"default-label-box\"][@key=\"M[0]Series\"]/text()

0

Den XPath zu verwenden, ist nur eine von vielen Möglichkeiten. Auch mit CSS-Selektoren kommst du zu einem Ergebnis.

span_element = driver.find_element(By.CSS_SELECTOR, ".chart-title-indicator-container > .default-label-box:last-child")
span_text = span_element.get_attribute("innerText")

Die letzte Zahl kannst du mit einer Division abspalten.

try:
  number = int(span_text)
  last_number = number % 10
except ValueError:
  print("No valid number")
j2910 
Fragesteller
 04.09.2022, 17:54

Alles gut, funktioniert, danke

0
j2910 
Fragesteller
 04.09.2022, 18:10

Er zeigt mir immer 1,80% an. Es funktioniert xpath weder css

0
regex9  04.09.2022, 20:09
@j2910

Demzufolge gibt es noch mindestens ein Element davor, auf welches der Selektor passt. Hole dir mit find_elements alle Vorkommen und suche dann aus dieser Liste den richtigen Eintrag via Index heraus.

1
j2910 
Fragesteller
 05.09.2022, 16:46
@regex9

Was ist genau mit "innerer Text" gemeint. Die Zeile hab ich immer weg gelassen. Mit Elements gibt er mir jetzt das Zeichen für eine Liste[ ]. Brauche ich überhaupt span_text?

0
regex9  05.09.2022, 16:48
@j2910

Das innerText-Property beinhaltet den Text zwischen den HTML-Tags.

0
regex9  06.09.2022, 13:37
@j2910
Mit Elements gibt er mir jetzt das Zeichen für eine Liste[ ]

Ja, wie gesagt (und der Name ist da auch schon eindeutig), liefert find_elements eine Liste. Suche in der nach deinem Element.

Brauche ich überhaupt span_text?

Oben schreibst du, du möchtest den Text (die Zahl) auslesen. Also ja.

0

Dann musst du das escapen:

//span[@class=\"default-label-box\"][@key=\"M[0]Series\"]/text()

j2910 
Fragesteller
 04.09.2022, 16:45
data2 = driver.find_element(By.XPATH, "//span[@class=\"default-label-box\"][@key=\"M[0]Series\"]/text()")

Wenn du so meinst, klappt es nicht

0
Pepepizzapalast  04.09.2022, 16:46
@j2910

Oh, du musst das /text() am Ende weglassen, du suchst ja nach dem Element

0
j2910 
Fragesteller
 04.09.2022, 16:54
@Pepepizzapalast

Das ist es leider auch nicht, naja ich guck mal weiter. Danke trotzdem

0