Así que traté de ver un tutorial y hacer un raspador web, combiné como 5 códigos de tutoriales en mi código, así que supongo que es complicado.
Este es el código:
const puppeteer = require('puppeteer-extra'); const StealthPlugin = require('puppeteer-extra-plugin-stealth'); const fs = require('fs'); const { html } = require('cheerio'); const cheerio = require('cheerio'); const { setInterval } = require('timers/promises'); require('dotenv').config(); const accountSid = process.env.TWILIO_ACCOUNT_SID; const authToken = process.env.TWILIO_AUTH_TOKEN; const client = require('twilio')(accountSid,authToken); puppeteer.use(StealthPlugin()); const oldData = "oldData"; async function scrape(){ const browser = await puppeteer.launch({ headless: true, defaultViewport:{ width: 1920, height: 1080 } }); const page = await browser.newPage(); await page.goto('page'); const pageData = await page.evaluate(() => { return{ width: document.documentElement.clientWidth, height: document.documentElement.clientHeight, html: document.documentElement.innerHTML, }; }) const $ = cheerio.load(pageData.html); const element = $(".accordion__header-inner:last"); console.log(element.text()); }; const handle = setInterval(scrape(), 4000); scrape();Oculto algunas partes que no quería que se vieran.
Entonces, cuando ejecuto la función de código, registró el elemento dos veces. Cuando elimino el intervalo, solo funciona uno. Esa es la única diferencia, quiero registrar el elemento cada 5 segundos.
Cualquier ayuda es apreciada y espero que esta no sea una pregunta mal escrita.
En su setInterval , está ejecutando la función y pasando su valor de retorno como argumento, en lugar de pasar la función como argumento. Debería ser:
const handle = setInterval(scrape, 4000); Tenga en cuenta que no usará this dentro de la función, porque se llamará dentro del alcance setInterval . Si necesita usar this , use bind() :
const handle = setInterval(scrape.bind(scrape), 4000);Parece que estás llamando al método "scrape()" en dos lugares. Una vez en el método SetInterval() y luego inmediatamente de nuevo en la línea siguiente. Ese parece ser tu problema.