Esta documentación fue construida con la ayuda de ChatGPT de OpenAI (la verdad es que ChatGPT la escribio y yo solo revice 😂).
Puppeteer es una biblioteca de Node.js que permite controlar un navegador mediante código para realizar tareas de automatización web.
Instalación de Puppeteer:
bash:npm install puppeteerEjemplo básico de cómo usar Puppeteer:
javascript:const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch(); //1
const page = await browser.newPage(); //2
await page.goto('https://www.example.com'); //3
await page.screenshot({ path: 'example.png' }); //4
await browser.close(); //5
})();Aquí tienes algunos métodos para interactuar con los elementos de la página:
javascript:// Obtener un elemento por su selector CSS
const element = await page.$('#myElement');
// Obtener varios elementos por su selector CSS
const elements = await page.$$('.myElements');
// Hacer clic en un elemento
await element.click();
// Escribir texto en un elemento
await element.type('Hello, world!');
// Obtener el valor de un atributo de un elemento
const value = await element.getProperty('value').jsonValue();
// Obtener el texto de un elemento
const text = await element.evaluate((node) => node.innerText);Puppeteer puede esperar a que ocurran ciertas cosas en la página antes de continuar:
javascript:// Esperar a que la página cargue
await page.waitForNavigation();
// Esperar a que un elemento aparezca
await page.waitForSelector('#myElement');
// Esperar a que un elemento desaparezca
await page.waitForSelector('#myElement', { hidden: true });
// Esperar un tiempo específico
await page.waitForTimeout(1000);Aquí tienes algunos eventos del navegador a los que puedes suscribirte:
javascript:// Escuchar cuando se abre una nueva página
browser.on('targetcreated', (target) => {
if (target.type() === 'page') {
console.log('New page:', target.url());
}
});
// Escuchar cuando se cierra una página
browser.on('targetdestroyed', (target) => {
if (target.type() === 'page') {
console.log('Page closed');
}
});
// Escuchar cuando se produce un error en el navegador
browser.on('error', (error) => {
console.error('Browser error:', error);
});El objeto puppeteer es el punto de entrada a la biblioteca de Puppeteer. Contiene métodos para crear un navegador y conectarse a uno ya existente.
Crea una instancia de un navegador Chromium y devuelve una promesa que se resuelve en una instancia de Browser.
Opciones admitidas:
javascript:const puppeteer = require('puppeteer');
puppeteer
.launch({
headless: false,
slowMo: 100,
devtools: true,
args: ['--disable-infobars'],
executablePath: '/path/to/chromium',
})
.then((browser) => {
// ...
});Crea una conexión a una instancia ya existente de Chromium y devuelve una promesa que se resuelve en una instancia de Browser.
Opciones admitidas:
javascript:const puppeteer = require('puppeteer');
puppeteer
.connect({
browserURL: 'http://localhost:9222',
})
.then((browser) => {
// ...
});El objeto browser representa una instancia de un navegador Chromium. Contiene métodos para crear nuevas páginas y controlar el navegador en sí mismo.
Crea una nueva instancia de Page en el navegador y devuelve una promesa que se resuelve en la nueva página.
javascript:const page = await browser.newPage();Devuelve una promesa que se resuelve en un array de todas las instancias de Page abiertas en el navegador.
javascript:const pages = await browser.pages();Cierra el navegador y todas las páginas que contiene.
javascript:await browser.close();Registra un callback para ser llamado cada vez que se produce el evento especificado.
Eventos admitidos:
El objeto page representa una página web en el navegador. Contiene métodos para interactuar con la página, manipular su contenido y realizar capturas de pantalla.
Navega a la URL especificada y devuelve una promesa que se resuelve cuando la navegación ha terminado.
Opciones admitidas:
javascript:await page.goto('https://example.com');Espera a que el selector especificado esté presente en la página y devuelve una promesa que se resuelve cuando se encuentra.
Opciones admitidas:
javascript:await page.waitForSelector('#myElement');Hace clic en el elemento especificado por el selector y devuelve una promesa que se resuelve cuando se completa la acción.
Opciones admitidas:
javascript:await page.click('#myButton');Escribe el texto especificado en el elemento especificado por el selector y devuelve una promesa que se resuelve cuando se completa la acción.
Opciones admitidas:
javascript:await page.type('#myInput', 'Hello, world!');Toma una captura de pantalla de la página y devuelve una promesa que se resuelve con los datos de la imagen en formato PNG.
Opciones admitidas:
El objeto elementHandle representa un elemento en la página. Contiene métodos para interactuar con el elemento y obtener información sobre él.
Hace clic en el elemento y devuelve una promesa que se resuelve cuando se completa la acción.
Opciones admitidas:
javascript:const button = await page.$('#myButton');
await button.click();Escribe el texto especificado en el elemento y devuelve una promesa que se resuelve cuando se completa la acción.
Opciones admitidas:
javascript:const input = await page.$('#myInput');
await input.type('Hello, world!');Obtiene la propiedad especificada del elemento y devuelve una promesa que se resuelve con su valor.
javascript:const element = await page.$('#myElement');
const className = await element.getProperty('className');
console.log(className);Obtiene las coordenadas del cuadro delimitador del elemento y devuelve una promesa que se resuelve con un objeto con las propiedades x, y, width y height.
javascript:const element = await page.$('#myElement');
const box = await element.boundingBox();
console.log(box);Toma una captura de pantalla del elemento y devuelve una promesa que se resuelve con los datos de la imagen en formato PNG.
Opciones admitidas:
javascript:const element = await page.$('#myElement');
const screenshot = await element.screenshot();
console.log(screenshot);El objeto keyboard representa el teclado en el navegador. Contiene métodos para emular pulsaciones de teclas.
Escribe el texto especificado y devuelve una promesa que se resuelve cuando se completa la acción.
Opciones admitidas:
javascript:await page.keyboard.type('Hello, world!');Simula la pulsación de una tecla y devuelve una promesa que se resuelve cuando se completa la acción.
key es una cadena que especifica la tecla a pulsar. Los valores admitidos son las teclas que aparecen en un teclado estándar, como "ArrowUp", "Enter", "Backspace", etc. También se admiten códigos de tecla numéricos, como "\u0008" para "Backspace". Puedes encontrar una lista completa de teclas en la documentación de Puppeteer.
Opciones admitidas:
javascript:await page.keyboard.press('ArrowDown');Simula la liberación de una tecla y devuelve una promesa que se resuelve cuando se completa la acción.
key es una cadena que especifica la tecla a liberar. Los valores admitidos son los mismos que para keyboard.press().
javascript:await page.keyboard.up('ArrowDown');Simula la pulsación de una tecla y devuelve una promesa que se resuelve cuando se completa la acción.
key es una cadena que especifica la tecla a pulsar. Los valores admitidos son los mismos que para keyboard.press().
javascript:await page.keyboard.down('Shift');
await page.keyboard.press('KeyA');
await page.keyboard.up('Shift');El objeto mouse representa el ratón en el navegador. Contiene métodos para mover y hacer clic con el ratón.
Mueve el ratón a las coordenadas especificadas y devuelve una promesa que se resuelve cuando se completa la acción.
Opciones admitidas:
javascript:await page.mouse.move(100, 200);Hace clic con el ratón en las coordenadas especificadas y devuelve una promesa que se resuelve cuando se completa la acción.
Opciones admitidas:
javascript:await page.mouse.click(100, 200);Mantiene presionado un botón del ratón y devuelve una promesa que se resuelve cuando se completa la acción.
Opciones admitidas:
Los valores admitidos son los mismos que para mouse.click().
javascript:await page.mouse.down();Liberar el botón del ratón y devuelve una promesa que se resuelve cuando se completa la acción.
Opciones admitidas:
javascript:await page.mouse.up();El objeto touchscreen representa una pantalla táctil en el navegador. Contiene métodos para simular eventos táctiles, como toques, desplazamientos y pellizcos.
Simula un toque en las coordenadas especificadas y devuelve una promesa que se resuelve cuando se completa la acción.
javascript:await page.touchscreen.tap(100, 200);Simula el inicio de un toque en las coordenadas especificadas y devuelve una promesa que se resuelve cuando se completa la acción.
javascript:await page.touchscreen.down(100, 200);Simula el movimiento de un toque a las coordenadas especificadas y devuelve una promesa que se resuelve cuando se completa la acción.
javascript:await page.touchscreen.move(150, 250);Simula el final de un toque y devuelve una promesa que se resuelve cuando se completa la acción.
javascript:await page.touchscreen.up();Cancela el evento táctil actual y devuelve una promesa que se resuelve cuando se completa la acción.
javascript:await page.touchscreen.cancel();Simula un desplazamiento en la pantalla táctil y devuelve una promesa que se resuelve cuando se completa la acción.
javascript:await page.touchscreen.scroll(0, 100);Simula un pellizco en la pantalla táctil y devuelve una promesa que se resuelve cuando se completa la acción.
javascript:await page.touchscreen.pinch(100, 200);Simula un movimiento de pellizco en la pantalla táctil y devuelve una promesa que se resuelve cuando se completa la acción.
javascript:await page.touchscreen.pinchMove(150, 250, 0.5);El objeto coverage le permite recopilar información sobre el código que se ejecuta en la página. Puede recopilar información sobre el código JavaScript, CSS y de recursos.
Comienza a recopilar información de cobertura de código JavaScript y devuelve una promesa que se resuelve cuando la acción está completa. De forma predeterminada, se recopila información de cobertura para todo el código cargado en la página, pero se puede limitar a un solo archivo usando la opción resetOnNavigation.
Opciones admitidas:
javascript:await page.coverage.startJSCoverage();Detiene la recopilación de información de cobertura de código JavaScript y devuelve una promesa que se resuelve con los datos de cobertura. Los datos de cobertura se presentan como una matriz de objetos que tienen las siguientes propiedades:
javascript:const coverage = await page.coverage.stopJSCoverage();
console.log(coverage);Comienza a recopilar información de cobertura de código CSS y devuelve una promesa que se resuelve cuando la acción está completa. De forma predeterminada, se recopila información de cobertura para todo el código cargado en la página, pero se puede limitar a un solo archivo usando la opción resetOnNavigation.
Opciones admitidas:
javascript:await page.coverage.startCSSCoverage();Detiene la recopilación de información de cobertura de código CSS y devuelve una promesa que se resuelve con los datos de cobertura. Los datos de cobertura se presentan como una matriz de objetos que tienen las siguientes propiedades:
javascript:const coverage = await page.coverage.stopCSSCoverage();
console.log(coverage);Comienza a recopilar información de cobertura de código JavaScript y devuelve