webelement switch_to select_by_value example code chrome python selenium selenium-webdriver webdriver automated-tests

switch_to - selenium webdriver chrome python



Obtenga el código HTML de WebElement en Selenium WebDriver usando Python (13)

Estoy usando los enlaces de Python para ejecutar Selenium WebDriver.

from selenium import webdriver wd = webdriver.Firefox()

Sé que puedo agarrar un elemento web como ...

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 forma de obtener la "fuente de elementos"?

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

Los documentos de Selenium webdriver para Python son básicamente inexistentes y no veo nada en el código que parezca permitir esa funcionalidad.

¿Alguna idea sobre la mejor manera de acceder al HTML de un elemento (y sus hijos)?


Claro que podemos obtener todo el código fuente HTML con este script a continuación en Selenium Python:

elem = driver.find_element_by_xpath("//*") source_code = elem.get_attribute("outerHTML")

Si quieres guardarlo en el archivo:

f = open(''c:/html_source_code.html'', ''w'') f.write(source_code.encode(''utf-8'')) f.close()

Sugiero guardar en un archivo porque el código fuente es muy largo.


El método para obtener el HTML renderizado que prefiero es el siguiente:

driver.get("http://www.google.com") body_html = driver.find_element_by_xpath("/html/body") print body_html.text

Sin embargo, el método anterior elimina todas las etiquetas (también las etiquetas anidadas) y devuelve solo el contenido de texto. Si también está interesado en obtener el formato HTML, use el método a continuación.

print body_html.getAttribute("innerHTML")


En Ruby, utilizando Selenium-webdriver (2.32.1), hay un método page_source que contiene la fuente de la página completa.


Espero que esto pueda ayudar: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html

Aquí se describe el método de Java:

java.lang.String getText()

Pero desafortunadamente no está disponible en Python. Así que puedes traducir los nombres de los métodos a Python desde Java y probar otra lógica usando los métodos actuales sin obtener la fuente de la página completa ...

P.ej

my_id = elem[0].get_attribute(''my-id'')


InnerHTML devolverá un elemento dentro del elemento seleccionado y outerHTML devolverá dentro de HTML junto con el elemento que ha seleccionado

Ejemplo: - Ahora suponga que su Elemento está como abajo

<tr id="myRow"><td>A</td><td>B</td></tr>

Elemento interiorHTML Salida

<td>A</td><td>B</td>

Elemento exteriorHTML Salida

<tr id="myRow"><td>A</td><td>B</td></tr>

Ejemplo vivo: -

http://www.java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_between_innerhtml_and_outerhtml_in_javascript_example.htm

A continuación encontrará la sintaxis que requiere según el enlace diferente. Cambie el innerHTML a outerHTML según sea necesario.

Pitón:

element.get_attribute(''innerHTML'')

Java:

elem.getAttribute("innerHTML");

Si desea utilizar el código HTML de toda la página debajo del código: -

driver.getPageSource();


Java con Selenium 2.53.0

driver.getPageSource();


Parece anticuado, pero deja que esté aquí de todos modos. La forma correcta de hacerlo en tu caso:

elem = wd.find_element_by_css_selector(''#my-id'') html = wd.execute_script("return arguments[0].innerHTML;", elem)

o

html = elem.get_attribute(''innerHTML'')

Ambos están trabajando para mí (selenium-server-standalone-2.35.0)


Puede leer el atributo innerHTML para obtener la fuente del contenido del elemento o outerHTML para la fuente con el elemento actual.

Pitón:

element.get_attribute(''innerHTML'')

Java:

elem.getAttribute("innerHTML");

DO#:

element.GetAttribute("innerHTML");

Rubí:

element.attribute("innerHTML")

JS:

element.getAttribute(''innerHTML'');

PHP:

$elem.getAttribute(''innerHTML'');

Probado y funciona con el ChromeDriver .


Realmente no hay una forma directa de obtener el código fuente html de un elemento web. Tendrás que usar JS. No estoy muy seguro de los enlaces de python, pero puede hacerlo fácilmente en Java. Estoy seguro de que debe haber algo similar a la clase JavascriptExecutor en Python.

WebElement element = driver.findElement(By.id("foo")); String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);


Si está interesado en una solución para el control remoto en Python, aquí le indicamos cómo obtener innerHTML:

innerHTML = sel.get_eval("window.document.getElementById(''prodid'').innerHTML")


Usar el método del atributo es, de hecho, más fácil y más directo.

Usando Ruby con las gemas de Selenium y PageObject, para obtener la clase asociada con un determinado elemento, la línea sería element.attribute(Class) .

El mismo concepto se aplica si desea obtener otros atributos vinculados al elemento. Por ejemplo, si quisiera la cadena de un elemento, element.attribute(String) .


Y en PHPUnit selenium test es así:

$text = $this->byCssSelector(''.some-class-nmae'')->attribute(''innerHTML'');


WebElement element = driver.findElement(By.id("foo")); String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element);

¡Este código realmente funciona para obtener JavaScript de la fuente también!