Ist es möglich Elemente im Shadow DOM mit Python-Selen zu finden?
Beispiel für einen Anwendungsfall:
Ich habe dieses input
mit type="date"
:
Und ich möchte rechts auf die Datumsauswahlschaltfläche klicken und ein Datum aus dem Kalender auswählen.
Wenn Sie das Element in den Chrome-Entwicklertools anzeigen und den Schattenstammknoten der Datumseingabe erweitern, wird die Schaltfläche wie folgt angezeigt:
%Vor%Screenshot zeigt, wie es in Chrome aussieht:
Das Finden des "Picker" -Knopfs durch die ID-Ergebnisse erfolgt in NoSuchElementException
:
Ich habe auch versucht, ::shadow
und /deep/
locators wie vorgeschlagen zu verwenden hier :
Beachten Sie, dass ich das Datum in der Eingabe durch Senden von Schlüsseln ändern kann:
%Vor%Aber ich möchte das Datum speziell festlegen, indem ich es aus einem Kalender auswähle.
Es gibt keine Möglichkeit, auf die Schattenwurzel von nativen HTML 5-Elementen zuzugreifen.
In diesem Fall nicht nützlich, aber mit Chrome ist es möglich, auf einen benutzerdefinierten Schattenstamm zuzugreifen:
Auf die Wurzel kann dann folgendermaßen zugegriffen werden:
%Vor%Wenn Sie einen Klick auf die innere Schaltfläche mit selen python (Chromedriver Version 2.14 +) automatisieren möchten:
%Vor%Update am 9. Juni 2015
Dies ist der Link zum Entwurf des aktuellen Shadow DOM W3C Editors auf github:
Wenn Sie daran interessiert sind, den blink Quellcode zu durchsuchen, das ist ein guter Ausgangspunkt .
Die akzeptierte Antwort hat einen Nachteil, oft sind die Schatten-Host-Elemente mit Schattenbäumen versteckt. Deshalb ist es am besten, die Selen-Selektoren zu verwenden, um die Schatten-Host-Elemente zu finden und das Skript einzufügen, nur um den Schatten zu nehmen Wurzel:
%Vor%Um das in die richtige Perspektive zu rücken: Ich habe gerade ein testbares Beispiel mit der Download-Seite von Chrome hinzugefügt. Wenn Sie auf die Suchschaltfläche klicken, müssen Sie drei verschachtelte Schattenwurzelelemente öffnen:
%Vor%Das Gleiche mit dem Ansatz der akzeptierten Antwort zu tun, hat den Nachteil, dass es die Abfragen fest codiert, weniger lesbar ist und Sie die Zwischenauswahl nicht für andere Aktionen verwenden können:
%Vor%Tags und Links python selenium selenium-webdriver shadow-dom