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.