Estoy usando los enlaces de Python para ejecutar Selenium WebDriver:
from selenium import webdriver
wd = webdriver.Firefox()
Sé que puedo tomar un webelement 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 forma de obtener la "fuente del elemento"?
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 habilitar esa funcionalidad.
¿Alguna idea sobre la mejor manera de acceder al HTML de un elemento (y sus elementos secundarios)?
wd.page_source
con beautifulsoupRespuestas:
Puede leer el
innerHTML
atributo para obtener la fuente del contenido del elemento oouterHTML
para la fuente con el elemento actual.Pitón:
Java:
C#:
Rubí:
JS:
PHP:
Probado y funciona con el
ChromeDriver
.fuente
getAttribute
método (o equivalente en otros idiomas) simplemente llama al método js cuyo nombre es el argumento. Sin embargo, la documentación no dice esto explícitamente, por lo que la solución de nilesh debería ser una alternativa.HtmlUnitDriver
. Trabaja paraChromeDriver
,FirefoxDriver
,InternetExplorerDriver
(IE10) yPhantomJSDriver
(no he probado otros).Realmente no hay una forma directa de obtener el código fuente html de a
webelement
. Tendrás que usar JS. No estoy muy seguro acerca de los enlaces de Python, pero puede hacerlo fácilmente en Java. Estoy seguro de que debe haber algo similar a laJavascriptExecutor
clase en Python.fuente
innerHTML
no es un atributo DOM. Cuando respondí esta pregunta en 2011, no funcionó para mí, parece que ahora algunos navegadores la admiten. Si funciona para usted, entonces usarinnerHTML
es más limpio. Sin embargo, no hay garantía de que funcione en todos los navegadores.Claro que podemos obtener todo el código fuente HTML con este script a continuación en Selenium Python:
Si desea guardarlo en un archivo:
Sugiero guardar en un archivo porque el código fuente es muy, muy largo.
fuente
En Ruby, usando selenium-webdriver (2.32.1), hay un
page_source
método que contiene toda la fuente de la página.fuente
Usar el método de atributo es, de hecho, más fácil y más directo.
Usando Ruby con las gemas 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 quería la cadena de un elemento,
element.attribute(String)
.fuente
Parece anticuado, pero que esté aquí de todos modos. La forma correcta de hacerlo en su caso:
o
Ambos están trabajando para mí (selenium-server-standalone-2.35.0)
fuente
Java con Selenium 2.53.0
fuente
getPageSource
método puede no devolver la fuente real de la página (es decir, con posibles cambios de JavaScript). La fuente devuelta puede ser la fuente sin formato enviada por el servidor. El documento webdriver debe verificarse para garantizar este punto.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 Java:
Pero desafortunadamente no está disponible en Python. Por lo tanto, puede traducir los nombres de los métodos a Python desde Java y probar otra lógica utilizando los métodos actuales sin obtener toda la fuente de la página ...
P.ej
fuente
Esto funciona a la perfección para mí.
fuente
InnerHTML devolverá el elemento dentro del elemento seleccionado y externalHTML volverá dentro del HTML junto con el elemento que haya seleccionado
Ejemplo: - Ahora suponga que su Elemento es el siguiente
Salida del elemento innerHTML
Salida del elemento externalHTML
Ejemplo en 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 un enlace diferente. Cambiar el
innerHTML
aouterHTML
según lo requerido.Pitón:
Java:
Si desea HTML de página completa use el siguiente código: -
fuente
¡Este código también funciona para obtener JavaScript de la fuente!
fuente
Y en la prueba de selenio de PHPUnit es así:
fuente
Si está interesado en una solución para el control remoto en Python, aquí le mostramos cómo obtener innerHTML:
fuente
innerHTML = {solenium selector code}.text
funciona igual.El método para obtener el HTML renderizado que prefiero es el siguiente:
Sin embargo, el método anterior elimina todas las etiquetas (sí, también las etiquetas anidadas) y devuelve solo contenido de texto. Si también está interesado en obtener el marcado HTML, utilice el siguiente método.
fuente