[selenium] Text eines "unsichtbaren" Elementes auslesen

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
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

Holá pythonistas,
ich möchte den Text eines Elementes mittels

Code: Alles auswählen

elem = driver.find_element_by_class_name('<class name>')
auslesen; das Ding ist, dass der Text im browser nur angezeigt wird, wenn man mit der Maus darüberschwebt (allem Anschein nach wird der Inhalt durch css unsichtbar gemacht). Was mich allerdings irritiert: wenn ich mir die Seite in selbigen browser mit dem Inspektor (fabulous F12.. ;)) anschaue, wird bei besagtem Element der Text angezeigt (ist also schon da, nur eben unsichtbar..!?). Muß/kann ich da irgendwie beim Auslesen ne style-info mitgeben (opacity: 100%) oder braucht's da ne andere Methode zum Abrufen des Elementes oder muß erst durch eine mouseover-Simulation der Text "sichtbar" gemacht werden.. oder.. oder.. oder.. äh.
Werd grad aus den docs zu selenium diesbezüglich nicht so richtig schlau (weiß eigentlich nicht so richtig, wonach ich suchen sollte) und von JS hab ich halt auch so gar keine Ahnung.. :(

saludos ~ x2
es gibt manche, die sind anders und andere, die sind genauso
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Durchsichtigkeit ist ein reines UI-Feature, das muss deinen Code doch nicht interessieren.
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

__deets__ hat geschrieben: Mittwoch 30. August 2023, 17:07 Die Durchsichtigkeit ist ein reines UI-Feature, das muss deinen Code doch nicht interessieren.
Ja, das finde ich auch! Das hier:

Code: Alles auswählen

<span class="delivery--text delivery--text-available">
	<i class="delivery--status-icon delivery--status-available">
		::before
		"&nbsp;"
		::after
	</i>
	<span class="delivery--text-info">
		" x - Stück auf Lager, mehr ab: tt.mm.jjjj"  # <= den will ich haben..
	</span>
</span>
ist der container, wo die Musik spiel. So wird es mir angezeigt, wenn ich's mir im inspector ansehe.. Das ist ein farbiger Kreis, und wenn ich mit mouse drüber gehe, erscheint daneben ein Feld mit dem Inhalt von "delivery--text-info". Also, ich bin auch davon ausgegangen, dass die Sichtbarkeit erstmal nix mit dem Inhalt zutun hat..!? CSS sollte darauf also keinen Einfluß haben?

Grüße ~ x2
es gibt manche, die sind anders und andere, die sind genauso
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du es einfach mal probiert? Wenn ein Element im DOM steckt, und irgendwelche Werte hat - Styles eingeschlossen - dann kann es auch zugegriffen werden. Wie sonst soll das funktionieren? Soll das Element weg sein, nur weil es unsichtbar ist (womit es gar nicht unsichtbar sein kann, denn nur etwas, dass da ist, kann unsichtbar sein. Sonst waere dein Zimmer voll mit unsichtbaren Leuten, die gerade nur nicht da sind...)?
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Die unsichtbaren Leute sind *da*; Ich höre doch die Stimmen! 🤪
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

@__blackjack__: muss ich wieder kommen & das Radio unterm Bett ausschalten?
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

E.N. hat geschrieben: was ist, ist
was nicht ist, ist möglich
denn nur was nicht ist, ist möglich
Also..: ich hätte da erstmal ne quick'n'dirty Lösung! Mit dem Kunstkniff

Code: Alles auswählen

text = driver.execute_script('return arguments[0].innerHTML;', elem)
spuckt's mir doch tatsächlich schon einmal den gewünschten (und fürchtlich formatierten, weil direkt noch mit allen Einrückungen versehenen) Schnipsel aus. Aber dafür gibt es ja str-Methoden ;).
Bis mir von Gottes Gnaden etwas Eleganteres zufällt, wirds wohl erstmal gehen :? .

Es wurmt mich aber schon noch, dass es da so philosophisch wird..: unsichtbare Existenz vs. offensichtliche Nicht-Existenz!

Ich bin aber weiterhin für Anregungen offen; vielleicht nochn Fernseher im Kleiderschrank (aber bitte auf stumm!)?
es gibt manche, die sind anders und andere, die sind genauso
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Warum genau greifst Du nicht einfach auf den Text des passenden Elements zu? Statt da JavaScript auszuführen‽
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

Äh.. wegen s. mein erster Beitrag. Wäre ja schön, wenn es in diesem speziellen Falle einfach mit

Code: Alles auswählen

elem.text
möglich wäre. Nur gibts da halt nen leeren string zurück. Bei allen anderen Elementen funktioniert das ja auch genau so! Nur dieses eine Dingens, dass mittels css ausgeblendet wird, klappt es nicht.. und ich bin mir auch nicht ganz sicher, ob es wirklich daran liegt oder da der Teufel nicht noch in einem ganz anderen Detail mümmeln könnte!?

Der css-Teil zu besagter Klasse sieht wie folgt aus:

Code: Alles auswählen

opacity: 0;
pointer-events: none;
animation: hideDeliveryText;
	animation-duration: auto;
	animation-timing-function: ease;
	animation-delay: 0s;
	animation-iteration-count: 1;
	animation-direction: normal;
	animation-fill-mode: none;
	animation-play-state: running;
	animation-name: hideDeliveryText;
	animation-timeline: auto;
	animation-range-start: normal;
	animation-range-end: normal;
animation-duration: 5s;
transition: opacity .2s ease-in-out;
	transition-duration: 0.2s;
	transition-timing-function: ease-in-out;
	transition-delay: 0s;
	transition-property: opacity;
es gibt manche, die sind anders und andere, die sind genauso
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

CSS hat damit nichts zu tun.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn da kein Text ist, dann hast Du das falsche Element.
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

__blackjack__ hat geschrieben: Donnerstag 31. August 2023, 13:10 CSS hat damit nichts zu tun.
würde ich auch so vermuten..
Sirius3 hat geschrieben: Donnerstag 31. August 2023, 13:34 Wenn da kein Text ist, dann hast Du das falsche Element.
Das ganze Dokument hat nur zwei Elemente dieser Klasse. Wenn ich bei beiden mittels .text darauf zugreife, bekomme ich nur "" zurück; wenn ichs allerdings mit JS versuche, bekomme ich aber jeweils den gewünschten (selben) Inhalt zurück!?

ps.: ich verwende den Chrome driver..; falls das noch irgendeine Rolle spielen sollte/könnte.
es gibt manche, die sind anders und andere, die sind genauso
x2wr0
User
Beiträge: 17
Registriert: Freitag 7. Februar 2020, 16:38
Kontaktdaten:

Holá nochmal,
Fazit:
Möglicherweise ist es schon ein Problem beim parsen..: hatte noch ein wenig mit BeautifulSoup herumgespielt und konnte dabei das Element samt Inhalt finden; allerdings in doppelter Ausführung und auch nur, wenn ichs mit lxml statt html.parser einlese. Der Quelltext in Klarsicht sieht aber auch stark zerdrieselt aus (jede Menge Leerzeilen am Stück, überirdische Einrückungen..).
Einen button konnte ich auch nur durch JS betätigen, statt mit der .click() Methode. Das Alles aber auch nur vereinzelt, sonst funktioniert es eigentlich nach Lehrbuch..!?

Naja, besten Dank für die Anteilnahme. Werd nun mal weitermäandern ;)

saludos ~
es gibt manche, die sind anders und andere, die sind genauso
Antworten