Playwright vs Selenium: web scrapping y testing con soporte asincrónico
Clase 14 de 15 • Curso de Web Scraping con Python
Resumen
Realizar web scraping y pruebas automáticamente en navegadores web es una habilidad esencial en programación. Playwright es una herramienta alternativa a Selenium que destaca por su sencillo manejo de interacciones avanzadas, soporte nativo para múltiples navegadores y soporte asincrónico integrado, facilitando enormemente su instalación y uso en nuestros equipos.
¿Qué es Playwright y qué ventajas tiene respecto a Selenium?
Playwright es una herramienta para automatizar tareas como web scraping y testing, ofreciendo características diferenciadoras frente a Selenium:
- Soporte sincrónico y asincrónico nativo.
- Manejo simplificado de interacciones avanzadas.
- Compatibilidad y fácil instalación con múltiples navegadores.
Estas características permiten que tus proyectos en Python sean más eficientes y fluidos.
¿Cómo instalar Playwright correctamente en Windows?
La instalación de Playwright es directa y se realiza desde PowerShell si trabajas en Windows. Utiliza los siguientes comandos:
Primero, instala la librería desde la terminal:
pip install playwright
Luego, realiza la instalación de los drivers necesarios utilizando el comando:
playwright install
El proceso podría tardar un par de minutos, tras lo cual tendrás todo listo para comenzar tus desarrollos con esta herramienta.
¿Por qué es preferible utilizar archivos Python en lugar de notebooks para Playwright?
Mientras los notebooks funcionan bien en ciertas tareas, Playwright se beneficia enormemente trabajando directamente con archivos .py
. Esto se debe a que tiene integradas funcionalidades asincrónicas nativas. Es importante tenerlo en cuenta para optimizar tus procesos y flujos de trabajo.
¿Cómo estructurar un proyecto de scraping asincrónico con Playwright?
Tu proyecto con Playwright utilizará Ascensio para el manejo asincrónico junto con BeautifulSoup. A continuación un ejemplo de la estructura básica del código:
import asyncio
from playwright.async_api import async_playwright
from bs4 import BeautifulSoup
async def main():
async with async_playwright() as p:
navegador = await p.chromium.launch()
pagina = await navegador.new_page()
await pagina.goto("URL_DEL_SCROLL")
await pagina.wait_for_timeout(3000)
contenido = await pagina.content()
soup = BeautifulSoup(contenido, 'html.parser')
print("Diez citas encontradas.")
await navegador.close()
asyncio.run(main())
Este script abre un navegador, accede a la URL deseada, espera unos segundos y procesa el HTML renderizado con BeautifulSoup.
¿Cómo manejar paginas con scroll infinito usando Playwright?
Cuando la página requiere interacciones avanzadas como un scroll infinito, Playwright nos permite automatizar estas acciones fácilmente. A continuación, una estructura útil para realizar varios scrolls:
import asyncio
from playwright.async_api import async_playwright
async def scroll_inf():
async with async_playwright() as p:
navegador = await p.chromium.launch()
pagina = await navegador.new_page()
await pagina.goto("URL_DEL_SCROLL")
altura_previa = 0
for _ in range(3): # número de scrolls
altura_actual = await pagina.evaluate("window.scrollTo(0, document.body.scrollHeight);return document.body.scrollHeight;")
if altura_actual == altura_previa:
break
altura_previa = altura_actual
await pagina.wait_for_timeout(2000)
contenidos = await pagina.eval_on_selector_all('.quote', 'elements => elements.map(element => element.textContent)')
print(f"Número de citas obtenidas: {len(set(contenidos))}")
await navegador.close()
asyncio.run(scroll_inf())
El ejemplo muestra cómo automatizar varios scrolls utilizando métodos nativos de Playwright, recopilando información dinámica sin depender de complementos adicionales.
¿Te ha sido útil este enfoque de Playwright en tus proyectos de automatización web? ¡Nos gustaría conocer tu experiencia!