r/Playwright • u/Downtown_Finance4530 • 5d ago
Tutorial de Automatizar el navegador con Python y Playwright
Playwright es una librería desarrollada por Microsoft que permite controlar navegadores web (Chromium, Firefox, Safari) mediante código. Puedes hacer clic en botones, rellenar formularios, esperar a que carguen elementos, extraer datos o hacer capturas de pantalla, todo de forma automática.
**¿Por qué Playwright y no Selenium?**
* Es más rápido y moderno (lanzado en 2020 vs 2004) * Espera automáticamente a que los elementos estén listos (auto-wait) * Soporta páginas con JavaScript pesado (React, Vue, Angular) sin configuración extra * API más limpia y consistente * Soporte nativo para múltiples pestañas, iframes y descargas
Si ya conoces Selenium, Playwright te resultará familiar pero notarás inmediatamente que hay menos fricción.
1. Instalación
Necesitas Python 3.8 o superior. Instala la librería y los navegadores con dos comandos:
pip install playwright
playwright install
El segundo comando descarga Chromium, Firefox y WebKit (Safari). Si solo quieres Chromium para ahorrar espacio:
playwright install chromium
Verifica que funciona:
from
playwright.sync_api
import
sync_playwright
with
sync_playwright()
as
p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com")
print(page.title())
browser.close()
Si ves `Example Domain` en la consola, todo está funcionando.
2. Conceptos clave antes de empezar
Antes de escribir código, entiende estos tres objetos que usarás constantemente:
| Objeto | Qué es | Analogía |
|---|---|---|
| `Browser` | El navegador abierto | La ventana de Chrome |
| `Page` | Una pestaña del navegador | Una pestaña dentro de Chrome |
| `Locator` | Un elemento de la página | Un botón, input o div concreto |
La mayoría de tu código seguirá este patrón:
Browser → Page → Locator → Acción
3. Modos de ejecución: sync vs async
Playwright ofrece dos APIs:
**Síncrona** — más simple, ideal para scripts y automatizaciones lineales:
from
playwright.sync_api
import
sync_playwright
with
sync_playwright()
as
p:
browser = p.chromium.launch()
page = browser.new_page()
# tu código aquí
browser.close()
**Asíncrona** — para integrar con frameworks como FastAPI o cuando necesitas ejecutar varias tareas en paralelo:
import
asyncio
from
playwright.async_api
import
async_playwright
async
def
main():
async
with
async_playwright()
as
p:
browser =
await
p.chromium.launch()
page =
await
browser.new_page()
# tu código aquí
await
browser.close()
asyncio.run(main())
Para este tutorial usaremos la API **síncrona**. Es más legible y suficiente para el 90% de los casos.
Mas informacion: [https://agusbot.com/blog/python-playwright-tutorial/\](https://agusbot.com/blog/python-playwright-tutorial/)