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
Publicar un comentario