Creo que es mejor ir poco a poco para comprender mejor el proceso en su conjunto. Antes de entrar en cómo enviar el formulario con Puppeteer, hablemos de Puppeteer en general. En esta sección, te voy a mostrar cómo configurar un proyecto Node, instalar Puppeteer y utilizarlo para extraer datos. Así que, lo primero es lo primero: creemos una nueva carpeta y abrámosla en nuestro IDE preferido. Yo prefiero Visual Studio Code, pero puedes usar el que quieras.
¿Sabías que...?
- Puedes crear una nueva carpeta «programáticamente» desde tu terminal escribiendo el comando `mkdir`.
- Puedes usar el comando `npm init -y` para configurar un proyecto Node y aceptar los valores predeterminados
- Puedes crear un nuevo archivo con el comando `touch`.
- Y también puedes abrir VSCode con el comando `code .`.
Si quieres, puedes combinar los cuatro y poner en marcha un proyecto en segundos de esta manera:
~ » mkdir scraper && cd scraper && npm init -y && code .
Dentro de tu IDE, abre un nuevo terminal (Terminal > Nuevo terminal) e instalemos Puppeteer. Escribe `npm i puppeteer --save` en tu terminal. Además, me gusta usar módulos JS en lugar de CommonJS. Echa un vistazo a las diferencias entre ambos aquí. Si tú también quieres usar módulos, abre `package.json` y añade `"type": "module"` al objeto JSON.
Ahora que ya lo tenemos todo listo, podemos empezar a añadir código. Crea un nuevo archivo `index.js` y ábrelo en el IDE. Esta vez no hace falta hacerlo desde la terminal, pero como sugerencia, podrías usar el comando `touch`. Ahora añadamos el código:
import puppeteer, { executablePath } from 'puppeteer'
const scraper = async (url) => {
const browser = await puppeteer.launch({
headless: false,
executablePath: executablePath(),
})
const page = await browser.newPage()
await page.goto(url)
const html = await page.content()
await browser.close()
return html
}
Y veamos qué estamos haciendo:
- Estamos importando Puppeteer y `executablePath` a nuestro proyecto
- Estamos definiendo una nueva función que toma un parámetro `url`
- Estamos iniciando un nuevo navegador usando `puppeteer.launch` a. Estamos especificando que queremos que se ejecute en modo head-first b. Estamos usando `executablePath` para obtener la ruta de Chrome
- Abrimos una nueva página y navegamos a la `url`
- Guardamos `page.content()` en una constante
- Cerramos la instancia del navegador
- Y, por último, devolvemos el resultado `html` de la página que acabamos de rastrear
Hasta ahora, las cosas no son complicadas. Esto es lo mínimo indispensable para implementar un rastreador web con Node.js y Puppeteer. Si quieres ejecutar el código, simplemente pasa un objetivo a la función `scraper` y registra su valor de retorno:
console.log(await scraper('https://webscrapingapi.com/'))
Pero recuerda que nuestro objetivo es extraer datos al enviar un formulario. Esto significa que tenemos que pensar en una forma de enviar el formulario con Puppeteer. Por suerte, ya lo he hecho antes y sé que no es difícil. Así que veamos cómo puedes hacerlo tú también.