Seite 1 von 1
[selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Mittwoch 30. August 2023, 16:50
von x2wr0
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
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Mittwoch 30. August 2023, 17:07
von __deets__
Die Durchsichtigkeit ist ein reines UI-Feature, das muss deinen Code doch nicht interessieren.
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Donnerstag 31. August 2023, 08:30
von x2wr0
__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
" "
::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
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Donnerstag 31. August 2023, 08:49
von __deets__
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...)?
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Donnerstag 31. August 2023, 10:25
von __blackjack__
@__deets__: Die unsichtbaren Leute sind *da*; Ich höre doch die Stimmen!

Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Donnerstag 31. August 2023, 10:32
von __deets__
@__blackjack__: muss ich wieder kommen & das Radio unterm Bett ausschalten?
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Donnerstag 31. August 2023, 11:10
von x2wr0
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!)?
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Donnerstag 31. August 2023, 11:58
von __blackjack__
Warum genau greifst Du nicht einfach auf den Text des passenden Elements zu? Statt da JavaScript auszuführen‽
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Donnerstag 31. August 2023, 12:58
von x2wr0
Äh.. wegen s. mein erster Beitrag. Wäre ja schön, wenn es in diesem speziellen Falle einfach mit
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;
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Donnerstag 31. August 2023, 13:10
von __blackjack__
CSS hat damit nichts zu tun.
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Donnerstag 31. August 2023, 13:34
von Sirius3
Wenn da kein Text ist, dann hast Du das falsche Element.
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Donnerstag 31. August 2023, 14:05
von x2wr0
__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.
Re: [selenium] Text eines "unsichtbaren" Elementes auslesen
Verfasst: Montag 4. September 2023, 14:20
von x2wr0
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 ~