1. Finalización de la sesión
Cómo cerrar correctamente la sesión del navegador
Entonces, tienes un script increíble que recopila datos,
hace clic en botones y realiza muchas cosas mágicas en el navegador.
Ahora es importante finalizar su funcionamiento correctamente.
Imagínate que tu navegador es como un elefante tranquilo: no puedes simplemente
cerrar la puerta y dejarlo. Debes cerrarlo con calma y cortesía.
Para esto, utiliza el método quit()
.
from selenium import webdriver
# Inicialización del driver del navegador
driver = webdriver.Chrome()
# aquí sucede tu magia de navegación... 🧙♂️
# Finalización del navegador
driver.quit()
El método quit()
cierra todas las ventanas del navegador y finaliza su trabajo.
Si olvidas llamarlo, comenzarán historias extrañas con un navegador abierto en segundo plano
y fugas de memoria misteriosas. Y todos queremos una vida feliz, ¿verdad?
Solución a problemas con procesos colgados del navegador
A veces, después de trabajar con Selenium, los procesos del navegador
permanecen flotando en segundo plano, como unidades indecisas en juegos de estrategia en tiempo real.
Esto puede ocurrir, por ejemplo, si tu script "se cayó" en algún lugar en el medio.
Una forma de manejar este problema es usar el cierre por lotes de procesos,
por ejemplo, con psutil
en Python u otros comandos del sistema.
import psutil
# Cerrar todos los procesos colgados de Chrome
for proc in psutil.process_iter():
# Verificamos si el proceso pertenece al navegador
if 'chrome' in proc.name().lower():
proc.kill()
No es la forma más elegante, pero a veces no hay otra opción si los procesos se vuelven incontrolables. Recuerda que al hacer esto matarás todos los procesos del navegador, así que úsalo con sentido común.
2. Pruebas del script
Verificación de la correcta ejecución de todos los pasos del script
Finalizar correctamente el script es solo la mitad del trabajo.
Es importante verificar que cada paso se ejecute correctamente.
Para este propósito son ideales las
herramientas
de pruebas de software, como unittest
o pytest
.
Puedes escribir pruebas para asegurarte de que tu script abre páginas correctamente,
hace clic en botones y recopila datos.
Veamos una prueba minimalista utilizando unittest
:
import unittest
from selenium import webdriver
class TestBrowserAutomation(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
def test_open_page(self):
self.driver.get("https://example.com")
self.assertEqual("Example Domain", self.driver.title)
def tearDown(self):
self.driver.quit()
unittest.main()
Esta prueba verifica que nuestro script abre la página https://example.com y que el título de la página coincide con lo esperado. Es una forma simple pero poderosa de asegurarte de que las partes clave de tu script funcionan correctamente.
Depuración y optimización
A veces, incluso después de escribir pruebas, tu script se comporta como un niño caprichoso,
negándose a funcionar correctamente. Aquí es donde entra en juego la depuración.
Usa print()
para mostrar valores intermedios
y rastrear dónde exactamente algo salió mal.
Se aceptan comentarios graciosos en el código, pero no olvides el objetivo: entender qué está pasando.
Por ejemplo, te encuentras con un problema en el que some_element no está presente en la página:
try:
some_element = driver.find_element_by_id('missing-id')
except Exception as e:
print(f"¡Ups! Algo salió mal: {e}")
Además, presta mucha atención al rendimiento de tu script. A veces, para optimizar el funcionamiento, se pueden usar diferentes estrategias, como reducir la frecuencia de las solicitudes o optimizar la lógica de búsqueda de elementos.
Prevención de fallos y errores en el futuro
Después de optimizar y depurar, tu script debería funcionar impecablemente,
como un reloj suizo, pero siempre existe el riesgo de nuevos problemas.
Puedes usar sistemas de registro como logging
para registrar lo que sucede en tu script.
Esto te permitirá ver dónde y por qué algo salió mal.
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info("Inicio del script")
# registra más acciones aquí...
logger.info("Fin del script")
Recuerda que siempre vale la pena tener en cuenta eventos inesperados, especialmente si trabajas con datos o páginas inestables. Considera implementar sistemas de reintentos y tiempos de espera para que el script no falle ante el menor problema.
GO TO FULL VERSION