Cómo consultar vehículos en Colombia con solo la placa | Scraping con Puppeteer

 Para este scraping utilizamos la libreria "puppeteer-real-browser" en nodejs

********************NODEJS*********************

const { connect } = require("puppeteer-real-browser")

function delay(timeout) {

  return new Promise((resolve) => {

    setTimeout(resolve, timeout);

  });

}


let objPlaca=null;

function esperarPlaca(timeoutMs = 10000) {

  return new Promise((resolve, reject) => {

    const inicio = Date.now();


    const interval = setInterval(() => {

      if (objPlaca !== null) {

        clearInterval(interval);

        resolve(objPlaca);

      }


      if (Date.now() - inicio > timeoutMs) {

        clearInterval(interval);

            resolve(null);

      }

    }, 50); // chequea cada 50ms

  });

}


async function cargar(placa){

  const { browser, page } = await connect({


      headless: false,

      args: ["--disable-features=IsolateOrigins,site-per-process",'--window-size=1920,1080'],

      customConfig: {},

      turnstile: true,

      connectOption: {},

      disableXvfb: false,

      ignoreAllFlags: false,

      disableCleanup: true,

      userDataDir: "D:/Proyectos/nodejs/sesionchrome",

      // proxy:{

      //     host:'<proxy-host>',

      //     port:'<proxy-port>',

      //     username:'<proxy-username>',

      //     password:'<proxy-password>'

      // }

  });

  await page.setViewport({ width: 1920, height: 1080 });


  try{

      const attachToTarget = async (target) => {

    try {

      const client = await target.createCDPSession();

      await client.send("Network.enable");

      client.on("Network.responseReceived",async e => {

        if(e.response.url.toString().indexOf("byPlate")>-1){

          const { requestId, response, type } = e;

          if (type !== "XHR" && type !== "Fetch") return;

          try {

            const body = await client.send("Network.getResponseBody", { requestId });

            const text = body.body;

            objPlaca=  JSON.parse(text);

            console.log(objPlaca);

          } catch(e) {

            console.log("error")

            console.log(e)

          }

        }

      });

    } catch (e) {

    }

  };

  const targets = browser.targets();

  for (const target of targets) {

    await attachToTarget(target);

  }

  browser.on("targetcreated", attachToTarget);

  await page.goto('https://soat.segurosfalabella.com.co/sale/step0',{

    waitUntil: "networkidle2",

  });

  await page.evaluate("() => window.grecaptcha !== undefined ")

  await page.locator("input.plate-field").fill(placa)

  await page.locator("input[formcontrolname='identificationNumber']").fill("13246578")

  await delay(500)

  await page.waitForSelector('button');

  await page.evaluate(() => {

    const button = [...document.querySelectorAll('button')]

        .find(b => b.innerText.includes('Cotiza Aquí'));

    if (!button) {

        throw new Error('Botón "Cotiza Aquí" no encontrado');

    }

    button.click();

    });

  await delay(50)

  await esperarPlaca();

  }catch(e){

      console.log(e)

      console.log("error placa",placa)

  }

  await browser.close();

}

async function llamar(){

  await cargar("MBL222")

}

llamar();


Comentarios

Entradas populares de este blog

Web Scraping en Argentina: búsqueda de personas por DNI paso a paso

¡Mira Cómo Obtengo Datos de un Vehículo Solo con la Placa! (Web Scraping)

Bot whatsapp con whatsapp-web.js y nodejs