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.
- Chrome: ChromeDriver
- Firefox: GeckoDriver
- Edge: EdgeDriver
- Safari: SafariDriver
Selecciona un navegador e inicializa el WebDriver:
Ejemplo
# 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
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.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.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
# 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
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
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
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.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.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étodo | Descripción | Có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.text | Obtiene 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() |