From bad1f6004c6b9585aaa9e346866918dae0219eba Mon Sep 17 00:00:00 2001 From: marsalva Date: Fri, 6 Mar 2026 08:21:37 +0000 Subject: [PATCH] Actualizar worker-homeserve.js --- worker-homeserve.js | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/worker-homeserve.js b/worker-homeserve.js index f73fe0e..96cd5d9 100644 --- a/worker-homeserve.js +++ b/worker-homeserve.js @@ -152,7 +152,7 @@ async function loginAndProcess(page, creds, jobData) { const select = document.querySelector('select[name="ESTADO"]'); if (!select) return false; for (const opt of select.options) { - // Busca el c贸digo exacto 307 + // Busca el c贸digo exacto if (opt.value == code || opt.text.toUpperCase().includes(code.toUpperCase())) { select.value = opt.value; return true; @@ -171,7 +171,6 @@ async function loginAndProcess(page, creds, jobData) { const obsFilled = await fillFirstThatExists(page, ['textarea[name="Observaciones"]'], jobData.observation); if (!obsFilled) throw new Error('No encontr茅 el recuadro de Observaciones en la web de HomeServe.'); - // 馃敶 NUEVO LOCALIZADOR PARA EL CHECKBOX (Sacado de tu HTML) if (jobData.inform_client) { const informCheck = await findLocatorInFrames(page, 'input[name="INFORMO"]'); if (informCheck && !(await informCheck.locator.first().isChecked())) { @@ -179,12 +178,28 @@ async function loginAndProcess(page, creds, jobData) { } } - // 馃敶 NUEVO LOCALIZADOR PARA EL BOT脫N GUARDAR (Sacado de tu HTML) - const saveBtn = await clickFirstThatExists(page, ['input[name="BTNCAMBIAESTADO"]']); - if (!saveBtn) throw new Error('No encuentro el bot贸n para guardar los cambios en HomeServe.'); - console.log('>>> 4. Guardando cambios en HomeServe...'); - await page.waitForTimeout(3000); + + // 馃敶 CLICK SEGURO: Usamos Promise.all para asegurarnos de que el clic desencadena la recarga + const saveBtnLocator = page.locator('input[name="BTNCAMBIAESTADO"]'); + + if (await saveBtnLocator.count() === 0) { + throw new Error('No encuentro el bot贸n para guardar los cambios en HomeServe.'); + } + + // Esperamos a que la p谩gina navegue DESPU脡S de hacer clic + await Promise.all([ + page.waitForNavigation({ waitUntil: 'domcontentloaded', timeout: CONFIG.NAV_TIMEOUT }), + saveBtnLocator.first().click() + ]); + + // Verificaci贸n extra: Comprobar si hay alg煤n mensaje de error rojo devuelto por HomeServe + const errorText = await page.locator('font[color="#FF0000"], .Estilo4').first().textContent().catch(() => null); + if (errorText && errorText.trim().length > 0) { + throw new Error(`HomeServe devolvi贸 un error al guardar: ${errorText.trim()}`); + } + + await page.waitForTimeout(2000); return { success: true }; }