Como se destaca en nuestra guía de web scraping con Puppeteer , esta biblioteca de automatización del navegador es un aliado fantástico para extraer datos de sitios de contenido dinámico. Sin embargo, como cualquier otra herramienta, tiene sus defectos. ¡Ahí es donde entra Puppeteer Extra!
En esta guía, le presentaremos puppeteer-extra
, una biblioteca que envuelve puppeteer
para extenderlo con compatibilidad con complementos. ¡Prepárese para llevar su proyecto de scraping de Puppeteer al siguiente nivel! 🚀
Puppeteer Extra es un contenedor liviano para puppeteer
que permite la integración de complementos a través de una interfaz limpia. Si bien no fue desarrollado por el equipo detrás de Puppeteer , este proyecto impulsado por la comunidad tiene cientos de miles de descargas semanales y más de 6000 estrellas en GitHub 📈.
Consulte el gráfico de estrellas de GitHub a continuación: está claro que el repositorio puppeteer-extra
ha experimentado un aumento constante en popularidad a lo largo de los años:
Los complementos oficialmente compatibles con Puppeteer Extra son:
User-Agent
en todas las páginas, con soporte para reemplazo dinámico.Además de eso, se integra con los siguientes complementos de la comunidad:
Sin duda, Puppeteer es una de las mejores bibliotecas de navegadores sin interfaz gráfica para realizar pruebas y extraer información . Pero seamos honestos: tiene sus límites, especialmente cuando se enfrenta a tecnologías antibots como la identificación de navegadores y los CAPTCHA. Lea nuestra guía para aprender a lidiar con la automatización de reCAPTCHA .
Los sitios web equipados con defensas antibots pueden detectar y bloquear fácilmente los scripts de Puppeteer. Si tan solo hubiera una manera de ampliar y personalizar el comportamiento predeterminado de Puppeteer...
…bueno, ¡eso es exactamente de lo que trata Puppeteer Extra!
Puppeteer Extra es como una mejora para Puppeteer, que agrega compatibilidad con complementos para solucionar esos inconvenientes importantes. En lugar de anular o extender todo por ti, envuelve Puppeteer y te permite registrar solo los complementos que necesitas. 🦸
puppeteer-extra
: configuración y complementos para el web scrapingPuedes agregar Puppeteer Extra a las dependencias npm de tu proyecto con:
npm install puppeteer-extra
⚠️ Nota : puppeteer-extra
requiere puppeteer
para funcionar, así que asegúrese de que ambos paquetes estén instalados en su proyecto.
Luego, debes importar el objeto puppeteer
desde puppeteer-extra
en lugar de la biblioteca puppeteer
:
const puppeteer = require("puppeteer-extra") // for ESM users: // const { puppeteer } from "puppeteer-extra"
Todo en la API de Puppeteer sigue igual, pero ahora obtienes un poco de magia adicional ✨. El objeto puppeteer
ahora expone un método use()
para conectar complementos adicionales de Puppeteer.
¡Es hora de sumergirnos en lo que estos complementos pueden hacer y ver cómo mejorarán su juego de raspado web!
El complemento adicional Puppeteer Stealth , también conocido simplemente como Puppeteer Stealth, incluye un conjunto de configuraciones diseñadas para reducir la detección de bots. Anula las propiedades y configuraciones detectables de Puppeteer que podrían exponerlo como un bot.
Para obtener más detalles, consulta nuestra guía sobre cómo evitar ser bloqueado con Puppeteer Stealth .
⚙️ Instalación :
npm install puppeteer-extra-plugin-stealth
💡 Uso :
const StealthPlugin = require("puppeteer-extra-plugin-stealth") // for ESM users: // import StealthPlugin from "puppeteer-extra-plugin-stealth" puppeteer.use(StealthPlugin())
Un complemento para evitar que el navegador Puppeteer cargue recursos específicos. Los tipos de recursos admitidos incluyen document
, stylesheet
, image
, media
, font
, script
, texttrack
, xhr
, fetch
, eventsource
, websocket
, manifest
y other
.
El bloqueo de recursos se puede configurar tanto global como localmente.
⚙️ Instalación :
npm install puppeteer-extra-plugin-block-resources
💡 Uso :
const BlockResourcesPlugin = require("puppeteer-extra-plugin-block-resources") // for ESM users: // import BlockResourcesPlugin from "puppeteer-extra-plugin-block-resources"
Luego puedes configurar los recursos para bloquearlos globalmente en todas las páginas:
puppeteer.use(BlockResourcesPlugin({ blockedTypes: new Set(["image", "stylesheet"]), }))
De manera similar, puedes seleccionar localmente los recursos que deseas bloquear:
puppeteer.use(BlockResourcesPlugin() const browser = await puppeteer.launch() const page = await browser.newPage() blockResourcesPlugin.blockedTypes.add("stylesheet") await page.goto("https://www.example.com/", { waitUntil: "domcontentloaded" })
Un complemento para anonimizar el User-Agent
establecido por el navegador controlado por Puppeteer. 🎭
Le brinda la posibilidad de eliminar la cadena 'Headless'
del agente de usuario de Chrome en modo headless y admite el reemplazo dinámico del agente de usuario a través de una función personalizada. Mírelo en acción en nuestra guía del agente de usuario de Puppeteer .
¡Descubre cuál es el mejor agente de usuario para web scraping!
⚙️ Instalación :
npm install puppeteer-extra-plugin-anonymize-ua
💡 Uso :
const AnonymizeUAPlugin = require("puppeteer-extra-plugin-anonymize-ua") // for ESM users: // import AnonymizeUAPlugin from "puppeteer-extra-plugin-anonymize-ua"
A continuación, puede configurar el agente de usuario anónimo:
puppeteer.use(AnonymizeUAPlugin({ stripHeadless: true, }))
También puedes configurar un agente de usuario dinámico a través de una función personalizada:
puppeteer.use(AnonymizeUAPlugin({ customFn: (ua) => ua.replace("Chrome", "Chromium")}) }))
Al igual que con Playwright , no importa cuán elegante y personalizado sea tu guión de Puppeteer, los sistemas anti-bots avanzados pueden detectarte y bloquearte. Pero, ¿cómo es eso posible? 🤔
La documentación puppeteer-extra-stealth-plugin
te lo explica con detalle:
Nota: considero que se trata de una competencia amistosa en un juego del gato y el ratón bastante interesante. Si el otro equipo (👋) quiere detectar el cromo sin cabeza, todavía hay formas de hacerlo (al menos noté algunas, que abordaré en futuras actualizaciones).
Probablemente sea imposible evitar todas las formas de detectar cromo sin cabeza, pero debería ser posible hacerlo tan difícil que resulte prohibitivamente costoso o genere demasiados falsos positivos como para que sea factible.
Por lo tanto, si bien Puppeteer Extra puede esquivar la mayoría de las detecciones de bots básicas como Neo en Matrix, no puede evitar Cloudflare . Claro, podrías integrar un proxy en Puppeteer , pero incluso eso podría no ser suficiente.
El problema no es Puppeteer en sí (porque, seamos realistas, ¡Puppeteer es genial! 🤘), sino el navegador que controla. ¿La verdadera solución? Un navegador potente que:
Lo creas o no, esto no es un sueño lejano. Es real y es exactamente lo que el Scraping Browser de Bright Data tiene para ofrecer.
Puppeteer es una de las herramientas de automatización de navegadores más utilizadas en el mundo tecnológico, pero hasta los superhéroes tienen sus límites. La comunidad intervino con puppeteer-extra
, un paquete que le otorga a Puppeteer algunas nuevas capacidades realmente geniales a través de complementos personalizados.
Pero aquí está el asunto: si bien estos complementos pueden hacer que tu operación de scraping sea mucho más fuerte, no te convertirán mágicamente en un fantasma 👻. ¡Los sitios con detección avanzada de bots aún podrían bloquearte!
Evite todos los antibots con el Scraping Browser de Bright Data, un navegador en la nube no detectable que se integra perfectamente con Puppeteer . Únase a nuestra misión de hacer de la Web un espacio público para todos, en todas partes, incluso a través de scripts automatizados.
¡Hasta la próxima, seguid explorando Internet con libertad! 🌐