Obtenga la fuente HTML de WebElement en Selenium WebDriver usando Python
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)?
Puede leer el innerHTML
atributo para obtener la fuente del contenido del elemento o outerHTML
la 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
.
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 JavascriptExecutor
una clase en Python.
WebElement element = driver.findElement(By.id("foo"));
String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);
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'))