Actualizar robot.js

This commit is contained in:
2026-03-22 21:01:18 +00:00
parent 0baba3101f
commit 9f54f3a9bc

View File

@@ -125,7 +125,7 @@ async function main() {
}
// ==========================================
// 🏥 MULTIASISTENCIA (CON REINTENTOS ANTI-CAÍDAS)
// 🏥 MULTIASISTENCIA (ROBOT REPARADO Y BLINDADO)
// ==========================================
async function runMultiasistencia(ownerId, user, pass, gremiosDB) {
const browser = await chromium.launch({
@@ -139,8 +139,9 @@ async function runMultiasistencia(ownerId, user, pass, gremiosDB) {
});
const context = await browser.newContext();
const page = await context.newPage();
try {
// INICIO DE SESIÓN CON REINTENTOS
console.log("🌍 [Multi] Iniciando sesión...");
await gotoWithRetry(page, 'https://web.multiasistencia.com/w3multi/acceso.php');
await page.fill('input[name="usuario"]', user);
@@ -148,25 +149,19 @@ async function runMultiasistencia(ownerId, user, pass, gremiosDB) {
await page.click('input[type="submit"]');
await page.waitForTimeout(4000);
// ENTRAR AL BUZÓN CON REINTENTOS
console.log("📥 [Multi] Entrando al buzón...");
await gotoWithRetry(page, 'https://web.multiasistencia.com/w3multi/frepasos_new.php?refresh=1');
await page.waitForTimeout(3000);
console.log("🔄 [Multi] Forzando recarga segura mediante script interno...");
try {
await page.evaluate(() => {
if (typeof refrescar === 'function') refrescar();
});
await page.waitForLoadState('networkidle');
await page.waitForTimeout(3000);
} catch (e) {}
// --- BUCLE DE PAGINACIÓN ---
let todosExpedientes = new Set();
let paginaActual = 1;
while (true) {
console.log(`\n📄 [Multi] Escaneando página ${paginaActual}...`);
console.log(`📄 [Multi] Escaneando página ${paginaActual}...`);
// Esperamos un poco a que cargue la tabla para evitar que lea en blanco
await page.waitForTimeout(1000);
const expedientesPagina = await page.evaluate(() => {
const links = Array.from(document.querySelectorAll('a[href*="reparacion="]'));
@@ -176,14 +171,13 @@ async function runMultiasistencia(ownerId, user, pass, gremiosDB) {
console.log(` 👉 Encontrados ${expedientesPagina.length} expedientes en la página ${paginaActual}.`);
expedientesPagina.forEach(ref => todosExpedientes.add(ref));
const hasNextPage = await page.evaluate(() => {
const links = Array.from(document.querySelectorAll('a.lnkheader'));
return links.some(a => a.innerText.trim() === 'Página siguiente');
});
// Buscamos el botón de página siguiente con el selector nativo
const nextBtn = page.locator('a.lnkheader:has-text("Página siguiente")').first();
const hasNextPage = await nextBtn.count() > 0;
if (hasNextPage) {
console.log(` ➡️ Botón 'Siguiente' detectado. Pulsando...`);
await page.locator('a.lnkheader:has-text("Página siguiente")').first().click();
await nextBtn.click();
await page.waitForTimeout(3000);
paginaActual++;
if(paginaActual > 15) {
@@ -198,10 +192,9 @@ async function runMultiasistencia(ownerId, user, pass, gremiosDB) {
const expedientes = Array.from(todosExpedientes);
console.log(`\n✅ [Multi] TOTAL EXPEDIENTES LEÍDOS EN WEB: ${expedientes.length}`);
// 🛑 NUEVO SEGURO DE VIDA: Si lee menos de 5, desconfiamos de la web y NO archivamos nada, por si es un error puntual.
if (expedientes.length > 5 || paginaActual === 1) {
console.log(`🧹 Llamando a la escoba (syncAndArchive) con ${expedientes.length} refs...`);
console.log(`🧹 [Multi] Llamando a la escoba con ${expedientes.length} refs...`);
await syncAndArchive(ownerId, 'multiasistencia', expedientes);
} else {
console.log("⚠️ [Multi] Pocos expedientes detectados. ABORTANDO ARCHIVADO DE SEGURIDAD.");
@@ -230,16 +223,11 @@ async function runMultiasistencia(ownerId, user, pass, gremiosDB) {
const descHeader = Array.from(document.querySelectorAll('td.tcab')).find(td => td.innerText.includes("Descripción de la Reparación"));
if (descHeader && descHeader.nextElementSibling) rawDesc = clean(descHeader.nextElementSibling.innerText);
// CORRECCIÓN: Borrado el recorte de fechas destructivo.
// Ahora le pasamos todo el bloque de texto completo a la IA para que no se pierdan palabras clave.
const cleanDesc = rawDesc;
const rawCPField = findByCab("Distrito Postal") || "";
const cpMatch = rawCPField.match(/\b\d{5}\b/);
const cpOnly = cpMatch ? cpMatch[0] : "";
const popOnly = rawCPField.replace(cpOnly, '').replace('-', '').trim();
// 📞 EXTRAER TELÉFONO REAL (Evita coger el de la oficina)
let telefonoReal = "";
const titulosDiv = Array.from(document.querySelectorAll('.subtitulo'));
const divTelefono = titulosDiv.find(div => div.innerText && div.innerText.includes('Teléfono'));
@@ -247,7 +235,6 @@ async function runMultiasistencia(ownerId, user, pass, gremiosDB) {
const celdaNum = divTelefono.nextElementSibling.querySelector('.tdet');
if (celdaNum) telefonoReal = celdaNum.innerText.replace(/[^0-9]/g, '');
}
// Fallback por si acaso falla, usamos el que tenías antes
if (!telefonoReal || telefonoReal.length < 9) {
telefonoReal = (document.body.innerText.match(/[6789]\d{8}/) || [])[0] || "";
}
@@ -259,9 +246,9 @@ async function runMultiasistencia(ownerId, user, pass, gremiosDB) {
"Población": popOnly,
"Código Postal": cpOnly,
"Compañía": "MULTI - " + (findByCab("Procedencia") || "MULTIASISTENCIA"),
"Descripción": cleanDesc,
"Descripción": rawDesc,
"Teléfono": telefonoReal,
"Estado": findByCab("Estado") || "", // 🛑 AÑADIDO EL ESTADO AQUÍ
"Estado": findByCab("Estado") || "",
"Urgente": findByCab("Urgente") || "No"
};
});