Obtenga la fuente HTML de WebElement en Selenium WebDriver usando Python

Resuelto Chris W. asked hace 13 años • 19 respuestas

Estoy usando los enlaces de Python para ejecutar Selenium WebDriver:

from selenium import webdriver
wd = webdriver.Firefox()

Sé que puedo tomar un elemento web así:

elem = wd.find_element_by_css_selector('#my-id')

Y sé que puedo obtener la fuente de la página completa con...

wd.page_source

¿Pero hay alguna manera de obtener la "fuente del elemento"?

elem.source   # <-- returns the HTML as a string

La documentación de Selenium WebDriver para Python es básicamente inexistente y no veo nada en el código que parezca habilitar esa funcionalidad.

¿Cuál es la mejor manera de acceder al HTML de un elemento (y sus hijos)?

Chris W. avatar Sep 01 '11 04:09 Chris W.
Aceptado

Puede leer el innerHTMLatributo para obtener la fuente del contenido del elemento o outerHTMLla fuente con el elemento actual.

Pitón:

element.get_attribute('innerHTML')

Java:

elem.getAttribute("innerHTML");

C#:

element.GetAttribute("innerHTML");

Rubí:

element.attribute("innerHTML")

JavaScript:

element.getAttribute('innerHTML');

PHP:

$element->getAttribute('innerHTML');

Fue probado y trabajado con ChromeDriver.

Nerijus avatar Dec 20 '2011 12:12 Nerijus

En realidad, no existe una forma sencilla de obtener el código fuente HTML de un archivo webelement. Tendrás que usar JavaScript. No estoy muy seguro acerca de los enlaces de Python, pero puedes hacerlo fácilmente en Java. Estoy seguro de que debe haber algo similar a JavascriptExecutoruna clase en Python.

 WebElement element = driver.findElement(By.id("foo"));
 String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);
nilesh avatar Sep 03 '2011 03:09 nilesh

A continuación se explica cómo obtener el código fuente HTML usando Selenium Python:

elem = driver.find_element("xpath", "//*")
source_code = elem.get_attribute("outerHTML")

A continuación se explica cómo guardar ese HTML en un archivo:

with open('c:/html_source_code.html', 'w') as f:
    f.write(source_code.encode('utf-8'))
Mark avatar Mar 20 '2013 18:03 Mark