Librería Python selenium

Selenium es una potente herramienta para automatizar operaciones del navegador web, ampliamente utilizada en escenarios como pruebas de aplicaciones web, extracción de datos de páginas web y automatización de tareas.

Selenium proporciona API para varios lenguajes de programación, utilizadas para pruebas. Los documentos oficiales de API actuales incluyen C#, JavaScript, Java, Python y Ruby.

Tutorial de Selenium:https://www.example.com/selenium/


Instalación de Selenium y WebDriver

Instalar Selenium

Para comenzar a usar Selenium, primero necesitas instalar la librería selenium y descargar el WebDriver correspondiente a tu navegador.

Instalar Selenium con pip:

pip install selenium

Una vez completada la instalación, puedes usar el siguiente comando para ver la información de versión de selenium:

pip show selenium

También puedes verificarlo con código Python:

import selenium
print(selenium.__version__)

Descargar WebDriver

Selenium necesita un WebDriver para interactuar con el navegador.

Diferentes navegadores requieren diferentes WebDrivers. Por ejemplo, Chrome necesita ChromeDriver. Debes descargar el WebDriver correspondiente según el navegador que uses y asegurarte de que esté en el PATH de tu sistema.

Selecciona un navegador e inicializa el WebDriver:

Ejemplo

from selenium import webdriver

# Usar el navegador Chrome
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# O usar el navegador Firefox
# driver = webdriver.Firefox(executable_path='/path/to/geckodriver')

# O usar el navegador Edge
# driver = webdriver.Edge(executable_path='/path/to/msedgedriver')

A partir de Selenium 4, ha cambiado la gestión de los controladores de navegador: Selenium 4 intenta detectar automáticamente la versión del navegador instalada en el sistema y descargar el controlador correspondiente. Esto significa que los usuarios ya no necesitan descargar y configurar manualmente la ruta del controlador, a menos que necesiten una versión específica del controlador.

Ejemplo

from selenium import webdriver

driver = webdriver.Chrome()  # Si usas otro navegador, como Firefox, modifícalo en consecuencia

En el entorno de red de China, la descarga automática del controlador requiere un entorno de red diferente, por lo que se recomienda descargar el controlador manualmente y luego especificar la ruta del controlador.

En Selenium 4, ya no se establece la ruta del controlador directamente en webdriver.Chrome, sino que se establece mediante la introducción del objeto Service. Esto evita advertencias de obsolescencia y garantiza la carga correcta del controlador. Por ejemplo:

Ejemplo

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

service = ChromeService(executable_path="PATH_TO_DRIVER")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)

El siguiente código especifica la ruta del archivo del controlador para obtener el título de la página web:

Ejemplo

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

# Establecer la ruta correcta del controlador
service = ChromeService(executable_path="/EJEMPLO/Downloads/chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)


# Abrir un sitio web
driver.get("https://cn.bing.com")

# Obtener el título de la página
print(driver.title)

# Cerrar el navegador
driver.quit()

Uso básico

Inicializar WebDriver

Selecciona un navegador e inicializa el WebDriver:

Ejemplo

from selenium import webdriver

# Usar el navegador Chrome
driver = webdriver.Chrome()

# O usar el navegador Firefox
# driver = webdriver.Firefox()

# O usar el navegador Edge
# driver = webdriver.Edge()

Abrir página web

Usa el método get() para abrir una página web:

driver.get("https://www.baidu.com")

Buscar elementos de la página

Puedes buscar elementos de la página de varias maneras, por ejemplo, usando ID, nombre de clase, nombre de etiqueta, etc.:

Ejemplo

# Buscar elemento por ID
search_box = driver.find_element("id", "kw")

# Buscar elemento por nombre de clase
search_button = driver.find_element("class name", "s_ipt")

# Buscar elemento por nombre de etiqueta
links = driver.find_elements("tag name", "a")

Simular operaciones del usuario

Selenium puede simular operaciones del usuario en el navegador, como hacer clic, escribir texto, etc.:

Ejemplo

# Escribir texto en el cuadro de búsqueda
search_box.send_keys("Selenium Python")

# Hacer clic en el botón de búsqueda
search_button.click()

Obtener atributos y texto de elementos

Puedes obtener el valor de atributo o el contenido de texto de un elemento de la página:

Ejemplo

# Obtener el texto del elemento
element_text = search_box.text

# Obtener el valor de atributo del elemento
element_attribute = search_box.get_attribute("placeholder")

Espera

A veces la carga de la página tarda, puedes usar espera explícita o espera implícita para asegurarte de que los elementos sean operables:

Ejemplo

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Espera explícita
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "kw"))
)

# Espera implícita
driver.implicitly_wait(10)

Cerrar el navegador

Después de completar las operaciones, recuerda cerrar el navegador:

driver.quit()

Automatización web sencilla

A continuación se muestra un ejemplo simple de un proyecto Selenium para automatizar la búsqueda de palabras clave y obtener el título de la página de resultados.

Ejemplo

from selenium import webdriver
from selenium.webdriver.common.by import By  # Importar el módulo By
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Establecer la ruta del controlador, iniciar el navegador
service = ChromeService(executable_path="/EJEMPLO/Downloads/chromedriver-mac-arm64/chromedriver")
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)


try:
    # Abrir la página principal de Baidu
    driver.get("https://www.baidu.com")

    # Buscar el elemento del cuadro de búsqueda
    search_box = driver.find_element(By.ID, "kw")

    # Ingresar el contenido de búsqueda
    search_box.send_keys("Selenium Python")

    # Enviar el formulario de búsqueda
    search_box.send_keys(Keys.RETURN)

    # Esperar a que se carguen los resultados de búsqueda
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "content_left"))
    )

    # Imprimir el título de la página
    print("El título de la página es:", driver.title)

finally:
    # Cerrar el navegador
    driver.quit()

Métodos comunes de selenium

La siguiente tabla enumera los métodos comunes de la librería selenium:

MétodoDescripciónCódigo de ejemplo
webdriver.Chrome()Inicializa una instancia del navegador Chrome.driver = webdriver.Chrome()
driver.get(url)Accede a la dirección URL especificada.driver.get("https://example.com")
driver.find_element(By, value)Busca el primer elemento que coincida.element = driver.find_element(By.ID, "id")
driver.find_elements(By, value)Busca todos los elementos que coincidan.elements = driver.find_elements(By.CLASS_NAME, "class")
element.click()Haz clic en el elemento.element.click()
element.send_keys(value)Envía entrada de teclado al cuadro de entrada.element.send_keys("text")
element.textObtiene el contenido de texto del elemento.text = element.text
driver.back()Retrocede en el navegador.driver.back()
driver.forward()Avanza en el navegador.driver.forward()
driver.refresh()Actualiza la página actual.driver.refresh()
driver.execute_script(script, *args)Ejecuta script de JavaScript.driver.execute_script("alert('Hello!')")
driver.switch_to.frame(frame_reference)Cambia al iframe especificado.driver.switch_to.frame("frame_id")
driver.switch_to.default_content()Vuelve al documento principal.driver.switch_to.default_content()
driver.quit()Cierra el navegador y sale del controlador.driver.quit()
driver.close()Cierra la ventana actual.driver.close()
Otras extensiones