Ich verwende die Python-Bindungen, um Selenium WebDriver auszuführen:
from selenium import webdriver
wd = webdriver.Firefox()
Ich weiß, dass ich mir so ein Webelement schnappen kann:
elem = wd.find_element_by_css_selector('#my-id')
Und ich weiß, dass ich mit ...
wd.page_source
Aber gibt es trotzdem die "Elementquelle"?
elem.source # <-- returns the HTML as a string
Die Selenium-Webdriver-Dokumente für Python sind im Grunde nicht vorhanden, und ich sehe im Code nichts, was diese Funktionalität zu aktivieren scheint.
Irgendwelche Gedanken darüber, wie man am besten auf den HTML-Code eines Elements (und seiner untergeordneten Elemente) zugreifen kann?
wd.page_source
mit beautifulsoup analysierenAntworten:
Sie können das
innerHTML
Attribut lesen , um die Quelle des Inhalts des Elements abzurufen, oder dieouterHTML
Quelle mit dem aktuellen Element.Python:
Java:
C #:
Rubin:
JS:
PHP:
Getestet und arbeitet mit dem
ChromeDriver
.quelle
getAttribute
Methode (oder eine Entsprechung in anderen Sprachen) nur die js-Methode aufruft, deren Name das Argument ist. In der Dokumentation wird dies jedoch nicht explizit angegeben, sodass die Lösung von nilesh ein Fallback sein sollte.HtmlUnitDriver
. Arbeitet fürChromeDriver
,FirefoxDriver
,InternetExplorerDriver
(IE10) undPhantomJSDriver
(ich habe nicht andere getestet).Es gibt keine einfache Möglichkeit, den HTML-Quellcode von a abzurufen
webelement
. Sie müssen JS verwenden. Ich bin mir bei Python-Bindungen nicht sicher, aber Sie können dies problemlos in Java tun. Ich bin sicher, dass esJavascriptExecutor
in Python etwas Ähnliches wie Klasse geben muss .quelle
innerHTML
ist kein DOM-Attribut. Als ich diese Frage 2011 beantwortete, funktionierte sie bei mir nicht. Es sieht so aus, als würden sie jetzt von einigen Browsern unterstützt. Wenn es für Sie funktioniert, ist die VerwendunginnerHTML
sauberer. Es gibt jedoch keine Garantie dafür, dass es in allen Browsern funktioniert.Sicher können wir den gesamten HTML-Quellcode mit diesem Skript in Selenium Python erhalten:
Wenn Sie es in einer Datei speichern möchten:
Ich schlage vor, in einer Datei zu speichern, da der Quellcode sehr, sehr lang ist.
quelle
In Ruby gibt es unter Verwendung von Selenium-Webdriver (2.32.1) eine
page_source
Methode, die die gesamte Seitenquelle enthält.quelle
Die Verwendung der Attributmethode ist in der Tat einfacher und unkomplizierter.
Wenn Sie Ruby mit den Edelsteinen Selenium und PageObject verwenden, um die Klasse zu erhalten, die einem bestimmten Element zugeordnet ist, lautet die Linie
element.attribute(Class)
.Das gleiche Konzept gilt, wenn Sie andere Attribute an das Element binden möchten. Zum Beispiel, wenn ich den String eines Elements haben wollte ,
element.attribute(String)
.quelle
Sieht veraltet aus, aber lass es trotzdem hier sein. Der richtige Weg, um es in Ihrem Fall zu tun:
oder
Beide arbeiten für mich (Selen-Server-Standalone-2.35.0)
quelle
Java mit Selenium 2.53.0
quelle
getPageSource
Methode möglicherweise nicht die tatsächliche Seitenquelle zurück (dh mit möglichen Änderungen an Javascript). Die zurückgegebene Quelle kann die vom Server gesendete Rohquelle sein. Das Webdriver-Dokument muss überprüft werden, um diesen Punkt sicherzustellen.Ich hoffe, dies könnte helfen: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html
Hier wird die Java-Methode beschrieben:
Leider ist es in Python nicht verfügbar. Sie können also die Methodennamen von Java nach Python übersetzen und mit den vorliegenden Methoden eine andere Logik ausprobieren, ohne die gesamte Seitenquelle abzurufen ...
Z.B
quelle
Das funktioniert bei mir nahtlos.
quelle
InnerHTML gibt das Element innerhalb des ausgewählten Elements zurück und OuterHTML gibt zusammen mit dem von Ihnen ausgewählten Element innerhalb von HTML zurück
Beispiel: - Angenommen, Ihr Element ist wie folgt
innerHTML-Element Ausgabe
OuterHTML-Element Ausgabe
Live-Beispiel: -
http://www.java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_between_innerhtml_and_outerhtml_in_javascript_example.htm
Nachfolgend finden Sie die Syntax, die je nach Bindung erforderlich ist. Ändern Sie das
innerHTML
aufouterHTML
nach Bedarf.Python:
Java:
Wenn Sie HTML für ganze Seiten möchten, verwenden Sie den folgenden Code: -
quelle
Dieser Code funktioniert wirklich, um auch JavaScript aus dem Quellcode zu erhalten!
quelle
Und im PHPUnit-Selentest ist es so:
quelle
Wenn Sie an einer Lösung für die Fernsteuerung in Python interessiert sind, erhalten Sie folgende Informationen zu innerHTML:
quelle
innerHTML = {solenium selector code}.text
Werke trotzdem.Die von mir bevorzugte Methode zum Abrufen des gerenderten HTML lautet wie folgt:
Die obige Methode entfernt jedoch alle Tags (ja auch die verschachtelten Tags) und gibt nur Textinhalt zurück. Wenn Sie auch das HTML-Markup erhalten möchten, verwenden Sie die folgende Methode.
quelle