Ejecuté Playwright y Puppeteer en las mismas pruebas de scraping

Última actualización el July 17, 2026
Ejecuté Playwright y Puppeteer en las mismas pruebas de scraping
Resumen con IA
This comparison runs Playwright and Puppeteer through the same scraping fixtures to test whether either browser automation library clearly wins. The result is mostly a tie on static pages, JavaScript-rendered pages, screenshots, JSON-backed extraction, error handling, and a hand-written crawl graph. The article explains the real decision factors instead: browser coverage, language support, ecosystem fit, and the fact that neither tool is a crawler by itself. It also points readers toward Crawlee and other single-tool reviews when they need orchestration, HTTP-first scraping, or managed extraction instead of raw browser control.

La mayoría de los artículos de “Playwright vs Puppeteer” parten de la idea de que uno de los dos tiene que ser el mejor para extraer datos. Ese enfoque mete mucho más supuesto del que merece. Puse ambas bibliotecas frente al mismo conjunto de páginas —un catálogo estático, un catálogo renderizado con JavaScript, un artículo, un error 500, un pequeño grafo de rastreo y dos sitios públicos de práctica— y los resultados fueron casi indistinguibles. Misma precisión, mismo renderizado, mismas capturas, las mismas limitaciones.

Así que esto no es una coronación. En las tareas que de verdad determinan si una herramienta de automatización de navegadores puede extraer una página, ninguna sacó ventaja. Lo que sigue es la única diferencia real que debería guiar tu elección, aquello que ambas dejan silenciosamente en tus manos, y una nota sobre la diferencia de versiones que probé (al 2026-07-09).

Por qué la comparación sí es justa

Las comparativas tienen la mala costumbre de probar cada herramienta en páginas distintas y luego declarar un ganador, lo cual te dice más sobre las páginas que sobre las herramientas. Yo evité eso ejecutando Playwright y Puppeteer contra el mismo servidor local de pruebas y las mismas demos públicas, Books to Scrape y Quotes to Scrape, para que todos los números quedaran alineados columna por columna.

Esa es la única forma en que una afirmación de “empate” significa algo. Si las pruebas son distintas, el empate es ruido. Cuando son idénticas byte por byte, los resultados coincidentes sí dicen algo sobre las herramientas.

Qué es realmente cada herramienta

Puppeteer es una API de JavaScript para controlar Chrome, funcionando a través del Chrome DevTools Protocol. Su posicionamiento oficial dice exactamente eso: “una API de JavaScript para controlar Chrome (y experimentalmente Firefox)”. Es madura, está centrada en Chrome y se basa en Node.

Playwright se presenta de otra manera: “un framework para pruebas web y automatización” que controla Chromium, Firefox y WebKit mediante una sola API, con clientes oficiales en JavaScript, Python, Java y .NET. Las dos comparten ADN (Playwright salió del equipo detrás de Puppeteer en Google antes de pasar a Microsoft), por eso se sienten más como primos que como rivales.

Para scraping, sin embargo, se comportan de forma muy parecida. Abres un navegador real, cargas una página, dejas que se ejecuten los scripts y luego lees el DOM renderizado. Esa es toda la razón para usar cualquiera de los dos en lugar de un analizador HTTP: quieres la página después de que JavaScript termine de ejecutarse, no la carcasa vacía anterior. Todo lo que verás a continuación sale de ese mecanismo compartido, y por eso tantas de sus funciones terminan prácticamente empatadas.

Resultados, lado a lado

Playwright vs Puppeteer identical results matrix

Aquí es donde se desinfla en silencio la historia de que “uno es claramente mejor”. Mismas pruebas, mismos números, en todos los casos.

PruebaPlaywrightPuppeteer
Catálogo estático (12 productos)12/12, recall 1.012/12, recall 1.0
Artículo (título + 3 párrafos)3/3, boilerplate separado3/3, boilerplate separado
Página dinámica JS (render nativo)8/8 + captura8/8 + captura
API JSON dinámica8/8, recall 1.08/8, recall 1.0
Manejo de HTTP 500inspeccionable, no lanza errorinspeccionable, no lanza error
Grafo de rastreo (BFS escrito a mano)12 páginas, profundidades {0,1,2}12 páginas, profundidades {0,1,2}
Books to Scrape20 productos20 productos
Quotes JS (pública)10 citas10 citas

Ambas renderizaron JavaScript de forma nativa sin configuración especial. Ambas capturaron capturas de pantalla de página completa. Ambas manejaron el 500 devolviendo un objeto de respuesta inspeccionable en lugar de lanzar una excepción: algo pequeño, pero importante cuando haces scraping a gran escala y prefieres registrar un estado malo en vez de romper toda la ejecución.

Playwright and Puppeteer HTTP 500 no exception

Una advertencia que repito porque es fácil sacar conclusiones de más: esto fueron observaciones de una sola máquina y una sola ejecución, no benchmarks. No estoy diciendo que uno sea más rápido por milisegundos que el otro, porque un cronómetro por página en un solo portátil no es una prueba de velocidad. Lo que sí afirmo, y eso sí está mejor sustentado, es que en precisión de extracción y comportamiento de renderizado, en ocho tipos de páginas distintas, empataron. Si esperabas que uno se despegara en una página real, no ocurrió.

La única diferencia que debería decidirlo

Playwright vs Puppeteer browser and language difference

La verdadera bifurcación no está en los números. Está en el alcance.

Playwright controla tres motores —Chromium, Firefox y WebKit— con una sola API, y además ofrece clientes de primera clase en Python, Java y .NET sobre JavaScript. Esa es una fortaleza documentada, y quiero ser preciso con la palabra “documentada”: en esta prueba solo usé Chromium, así que estoy reportando el soporte de tres motores de Playwright como una capacidad declarada que no verifiqué de forma independiente, no como algo que probé directamente. Si necesitas extraer datos de un sitio que se comporta distinto en WebKit de Safari, o tu equipo trabaja en Python, esa amplitud es el argumento de Playwright.

Puppeteer está orientado primero a Chrome, y aquí el resumen popular suele equivocarse. “Solo Chrome” ya no es exacto. Desde Puppeteer v23 tiene soporte listo para producción para Firefox mediante WebDriver BiDi, mientras que sigue usando CDP para Chrome para no romper automatizaciones existentes; un cambio documentado tanto por Chrome for Developers como por Mozilla. La versión que probé (24.16.0) ya está bastante por encima de la v23, así que el contraste real no es “Chrome frente a tres motores”. Es este: Puppeteer cubre Chrome (CDP) y Firefox (BiDi), pero no WebKit, y su historia multiplataforma es más reciente que la de Playwright. El motor que Playwright sí tiene y Puppeteer no es WebKit.

Esa es la decisión, resumida. No es velocidad, ni precisión, ni fidelidad de renderizado —en eso empatan—. Es una cuestión de alcance: ¿necesitas cobertura de WebKit o clientes en lenguajes que no sean JavaScript, o te basta con Chrome y Firefox desde Node para tus objetivos? Para una gran parte de los trabajos de scraping, cualquiera de las dos herramientas alcanza, y la elección depende más de cómo encaja en tu stack que de su capacidad.

Lo que ninguna de las dos hace

Playwright and Puppeteer hand-written BFS crawl

Las dos herramientas te dejan la misma tarea sobre la mesa: orquestar el rastreo. Ninguna trae una cola de solicitudes integrada, ni un escritor de datasets, ni limitación automática de velocidad. Mi prueba del grafo de rastreo —recorrer enlaces internos, llevar control de la profundidad y no volver a visitar una URL— necesitó un BFS escrito a mano en ambos casos. Doce páginas, profundidades {0,1,2}, mi propio BFS, las dos veces.

Para unas pocas páginas, eso está bien; un BFS pequeño ocupa una docena de líneas. Para rastrear a escala —cientos o miles de URLs, con deduplicación, reintentos y pausas respetuosas— tendrás que construir esa maquinaria tú mismo o acudir a una capa que envuelva estos motores. Crawlee hace justo eso, aportando una capa real de rastreo sobre Playwright y Puppeteer.

Esto no es un defecto, y quiero llamarlo por su nombre correctamente: Playwright y Puppeteer son frameworks de automatización de navegadores, no frameworks de rastreo. La cola ausente no es un bug, es un límite de alcance. El modelo mental correcto es que estas herramientas son la mitad de “ver la página” en un scraper. La otra mitad, “recorrer el sitio”, todavía la tienes que aportar tú —programándola o añadiendo un wrapper que ya la tenga.

Instalación y la salvedad sobre versiones

La instalación es casi idéntica. npm install descarga la librería y un binario del navegador, y el binario es la parte pesada —Puppeteer incorpora automáticamente la descarga de Chrome (en mi prueba fue una instalación limpia, sin vulnerabilidades reportadas), mientras que Playwright usa npx playwright install por separado para sus compilaciones de navegador. Ninguna instalación es dolorosa, pero cuenta con esa descarga en ambos casos; el peso del navegador y el coste por página son el verdadero peaje que pagas por renderizar, frente a una herramienta solo HTTP.

Ahora la transparencia que te debo. Probé Playwright 1.56.0 frente a la versión más reciente 1.61.1, y Puppeteer 24.16.0 frente a la última de npm, 25.3.0 —una versión mayor completa por detrás en Puppeteer, todo al 2026-07-09. Las APIs que usé son estables a través de esas diferencias, así que los resultados se sostienen. Pero si lees esto bastante tiempo después de su publicación, vuelve a probar con las versiones actuales antes de apostar números exactos sobre ellas. Y lo repito una vez más: en Playwright solo usé Chromium, así que no afirmo nada sobre su paridad con Firefox o WebKit más allá de que “está documentada”.

Playwright y Puppeteer: pros y contras

El empate hace que la lista de ventajas y desventajas sea menos una competencia y más una cuestión de en qué te estás metiendo.

Playwright

  • Ventajas: soporte documentado para tres motores (Chromium, Firefox, WebKit) desde una sola API; clientes oficiales para Python, Java y .NET; renderizado nativo de JS con precisión total; ampliación activa.
  • Desventajas: sin cola de rastreo integrada; peso del navegador y coste por página; solo se ejercitó Chromium en esta prueba; la versión que usé iba por detrás de la más reciente.

Puppeteer

  • Ventajas: automatización madura y estable de Chrome sobre CDP; renderizado nativo de JS con precisión total; manejo limpio del 500 (objeto response, sin excepción); ecosistema amplio y muy probado; soporte documentado para Firefox vía WebDriver BiDi desde la v23.
  • Desventajas: orientado a Chrome y Node, sin motor WebKit; sin cola de rastreo integrada; peso del navegador; la versión que usé estaba una versión mayor por detrás de la última de npm.

Quién debería elegir cuál

Playwright vs Puppeteer choose by stack

Elige Puppeteer si trabajas en Node, tus objetivos se renderizan bien en Chrome (la mayoría lo hacen), y quieres una biblioteca madura, enfocada, con un ecosistema profundo y un eje de complejidad menos del que preocuparte. La opción de Firefox vía BiDi está ahí por si la necesitas más adelante.

Elige Playwright si necesitas cobertura de WebKit, si quieres escribir tu scraper en Python o .NET, o si prefieres apostar por el proyecto con mayor amplitud de motores y lenguajes. Solo esa compatibilidad con el lenguaje ya suele ser la razón más clara para que un equipo de Python termine en Playwright.

Y una tercera respuesta que las comparativas suelen saltarse: no elijas ninguna de las dos si tus páginas no necesitan JavaScript para mostrar los datos. Si una petición HTTP y un parser te devuelven el contenido, un navegador headless es un exceso caro —eso pertenece a otra categoría de herramientas, y usar un navegador real allí solo quema memoria y tiempo de configuración para nada.

Dónde encaja una API gestionada, incluido Thunderbit

Prueba Thunderbit para extraer datos web

Tanto Playwright como Puppeteer son bibliotecas gratuitas y de código abierto que tú mismo ejecutas y mantienes. Tú te encargas del entorno del navegador, las actualizaciones, el código de rastreo que añadas y la carrera de fondo contra los bloqueos anti-bot. Para muchos proyectos, esa responsabilidad es justo lo correcto, y nada aquí va en contra de eso.

Pero fíjate en cuánto del trabajo real de scraping queda fuera de estas herramientas. Renderizan bien una página; no ponen URLs en cola, no rotan bloqueos, no te entregan JSON estructurado y tú mantienes viva la flota de navegadores. Eso es otra capa distinta de la pila, y vale la pena decirlo con claridad para los desarrolladores que evalúan construir vs. comprar. Nuestra propia pila para desarrolladores de Thunderbit vive en esa otra capa: POST /distill convierte una página en Markdown limpio, listo para LLM, y POST /extract devuelve JSON estructurado según el esquema que definas, con renderizado de JavaScript, manejo anti-bot y CAPTCHA gestionados en el servidor, no en tu portátil. Hay un servidor MCP de Thunderbit para agentes de IA y asistentes de programación (donde thunderbit_suggest_fields se ejecuta gratis antes de que gastes nada), y una CLI mediante npx @thunderbit/thunderbit-cli para CI y cron.

No voy a fingir que eso sea estrictamente mejor: es un intercambio de otra forma. Con Playwright o Puppeteer tú controlas el renderizado y todo lo que construyas alrededor, sin coste por llamada. Con una API gestionada delegas renderizado, anti-bot y la infraestructura de rastreo, y pagas por solicitud (en el caso de Thunderbit, por uso medido por llamada: un crédito para un distill, veinte para un extract, no por fila). ¿Proyecto pequeño, alojado por ti, y te gusta controlar el navegador? Estas bibliotecas son la herramienta adecuada. ¿Necesitas escalar y prefieres no operar una granja de navegadores, un rastreador y una capa de rotación de bloqueos? Una ruta gestionada elimina toda esa categoría de trabajo.

Para el panorama más amplio, nuestro equipo también probó el enfoque de dos motores de Crawlee y un conjunto de frameworks primero HTTP contra estas mismas pruebas, que es el siguiente paso útil si ya decidiste que un navegador completo es más de lo que tus páginas necesitan.

Veredicto

¿Deberías usar Playwright o Puppeteer? Para renderizar páginas con JavaScript, cualquiera de los dos: empataron en todas las pruebas que importan aquí, así que no pierdes capacidad por elegir con base en otros criterios. Elige Puppeteer si te encaja Chrome y Firefox desde Node y quieres madurez y enfoque. Elige Playwright si necesitas alcance a WebKit o clientes que no sean JavaScript.

Hay dos cosas que las comparativas suelen omitir y que conviene que te lleves. Primero, en tareas reales de scraping estos dos empatan de verdad, así que no merece la pena obsesionarse con una supuesta diferencia de rendimiento que no apareció en ocho pruebas distintas. Segundo, ninguno es un crawler: ellos renderizan, y el rastreo corre por tu cuenta o por un wrapper como Crawlee. Si tienes claro eso, ajustas el alcance a tu stack y la decisión se vuelve pequeña. La elección del motor importa bastante menos que la mitad del trabajo que ninguna de las dos herramientas hace por ti.

Más información

Prueba Thunderbit para extraer datos web Get Started Free

Preguntas frecuentes

¿Playwright o Puppeteer es más rápido para scraping web? En pruebas idénticas, prácticamente empataron: misma precisión en estático (12/12), dinámico (8/8) y extracción desde API JSON, mismo renderizado nativo y mismo manejo del 500. Fueron observaciones de una sola ejecución en una sola máquina, no benchmarks, así que las diferencias de tiempo por página no son una medición real de velocidad. Elige por alcance y lenguaje, no por una brecha de velocidad que no apareció.

¿Cuál es la diferencia real entre Playwright y Puppeteer? El alcance de motores y lenguajes. Playwright controla Chromium, Firefox y WebKit desde una sola API, con clientes para Python, Java y .NET. Puppeteer está orientado primero a Chrome sobre CDP, con soporte documentado para Firefox vía WebDriver BiDi desde la v23, pero sin WebKit, y está basado en Node. Ambos renderizan JavaScript de forma nativa y ninguno incluye orquestación de rastreo integrada.

¿Puedo rastrear un sitio completo con Playwright o Puppeteer? No de forma nativa. Ninguno trae cola de solicitudes, escritor de datasets ni limitación automática de velocidad; mi prueba del grafo de rastreo necesitó un BFS escrito a mano en ambos, con doce páginas y profundidades {0,1,2}. Para escalar, añade una capa de rastreo como Crawlee, que envuelve ambos motores con maquinaria real de crawling.

¿Necesito una herramienta de navegador para hacer scraping? Solo si la página necesita JavaScript para mostrar sus datos. Si una petición HTTP más un parser ya devuelve el contenido que quieres, un navegador headless es un exceso caro: usa una herramienta HTTP-first y evita por completo el peso del navegador.

¿Qué debería elegir un equipo de Python? Playwright, porque tiene un cliente oficial de primera clase para Python. Puppeteer está basado en Node, así que usarlo desde Python implica construir un puente que luego tendrías que mantener. Esa compatibilidad con el lenguaje es una de las razones más claras para elegir Playwright frente a Puppeteer.

Ke
Ke
CTO en Thunderbit | Científico de datos sénior y experto en ML Con casi una década de experiencia en aprendizaje automático y ciencia de datos, Ke Shen es exalumno de la Universidad de Columbia y antiguo científico de datos sénior en Walmart Labs. Con una sólida experiencia, reconocida por sus pares, en Python, R, Java y estadística, comparte conocimientos probados en el campo sobre cómo llevar algoritmos complejos de IA desde la teoría hasta una arquitectura lista para producción.
Tabla de contenidos

Extrae una página web con solo pedirlo

Di lo que necesitas en español sencillo. O mejor aún, no digas nada.

Prueba Thunderbit gratis
Extrae datos usando IA
Transfiere fácilmente datos a Google Sheets, Airtable o Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week