Python Selenium accediendo a la fuente HTML


97

¿Cómo puedo obtener la fuente HTML en una variable usando el módulo Selenium con Python?

Quería hacer algo como esto:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://example.com")
if "whatever" in html_source:
    # Do something
else:
    # Do something else

¿Cómo puedo hacer esto? No sé cómo acceder a la fuente HTML.


2
Escriba la siguiente línea antes de la condición: html_source = browser.page_source
— Abdul Majeed

Respuestas:


191

Necesitas acceder a la page_sourcepropiedad:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://example.com")

html_source = browser.page_source
if "whatever" in html_source:
    # do something
else:
    # do something else

6
¡La mejor respuesta hasta ahora! La forma más inmediata y clara de hacer esto, mucho más compacta que la otra alternativa, todavía válida ( find_element_by_xpath("//*").get_attribute("outerHTML")(
— 5agado

13
¿Qué sucede si necesitamos obtener el código fuente de la página después de que se ejecute todo el JavaScript?
— Yogeesh Seralathan

4
Funciona solo si la página se ha cargado por completo. Si la página se carga indefinidamente, esta propiedad no funciona.
— TheRookierLearner

5

Con Selenium2Library puede utilizar get_source()

import Selenium2Library
s = Selenium2Library.Selenium2Library()
s.open_browser("localhost:7080", "firefox")
source = s.get_source()

7
¿Puedo establecer un retraso y obtener la fuente más reciente? Hay contenidos dinámicos cargados usando javascript.
— CodeGuru

4

driver.page_source le ayudará a obtener el código fuente de la página. Puede verificar si el texto está presente en la fuente de la página o no.

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("some url")
if "your text here" in driver.page_source:
    print('Found it!')
else:
    print('Did not find it.')

Si desea almacenar la fuente de la página en una variable, agregue la siguiente línea después de driver.get :

var_pgsource=driver.page_source

y cambie la condición if a:

if "your text here" in var_pgsource:

1
Si bien este código puede responder a la pregunta, proporcionar un contexto adicional sobre cómo y / o por qué resuelve el problema mejoraría el valor de la respuesta a largo plazo.
— Nic3500

2

Al utilizar el código fuente de la página, obtendrá el código HTML completo.
Así que primero decida el bloque de código o etiqueta en el que necesita recuperar los datos o hacer clic en el elemento.

options = driver.find_elements_by_name_("XXX")
for option in options:
    if option.text == "XXXXXX":
        print(option.text)
        option.click()

Puede encontrar los elementos por nombre, XPath, id, enlace y ruta CSS.


1

Para responder a su pregunta sobre cómo obtener la URL para usar con urllib, simplemente ejecute este código JavaScript:

url = browser.execute_script("return window.location;")

1

Simplemente puede usar el WebDriverobjeto y acceder al código fuente de la página a través de su @propertycampopage_source ...

Pruebe este fragmento de código :-)

from selenium import webdriver
driver = webdriver.Firefox('path/to/executable')
driver.get('https://some-domain.com')
source = driver.page_source
if 'stuff' in source:
    print('found...')
else:
    print('not in source...')

¿En qué se diferencia esta respuesta de stackoverflow.com/a/7866938/2231972 ?
— Roman Konoval

1
from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome()
html_source_code = driver.execute_script("return document.body.innerHTML;")
html_soup: BeautifulSoup = BeautifulSoup(html_source_code, 'html.parser')

Ahora puede aplicar la función BeautifulSoup para extraer datos ...


-6

Recomiendo obtener la fuente con urllib y, si va a analizar, use algo como Beautiful Soup .

import urllib

url = urllib.urlopen("http://example.com") # Open the URL.
content = url.readlines() # Read the source and save it to a variable.

Bien, entonces ¿sabes cómo puedo obtener la URL dentro de Selenium? Quiero almacenar la URL en una variable para poder acceder a ella con urllib.
— user1008791

@ user1008791 ¿Importa? Aparentemente, está dejando que el usuario lo escriba de todos modos usando raw_input, simplemente haga lo mismo pero con urllib.
— Griffin

Eso fue solo para dar un ejemplo sencillo, la URL cambiará mucho.
— user1008791

8
Selenium hace muchas cosas que urllib no hace (por ejemplo, ejecución de JavaScript).
— mpenkov

Usar el urllib aquí no tiene sentido, ¿por qué? AutomatedTester lo tiene correcto, es lo que hago para escanear a través de la fuente HTML para asegurarme de que no empujamos el código del entorno de desarrollo.
— Dave
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.