Files
feadulta/tools/e2e/verify/reverify.cjs
rafa 66ee943da4 chore(verify): recuperar enum_urls.php y commitear tooling de verificación #121
El enumerador de URLs no se había commiteado y se perdió. Recuperado
reproduciendo la composición de la corrida previa (menús×5 idiomas +
categorías con contenido + contenido no-ES). Se añade también
classify_gaps.py (clasifica huecos: traducir vs descargar) y run_all.sh.
Outputs y .venv quedan en .gitignore.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 08:30:18 -04:00

31 lines
1.9 KiB
JavaScript

// Re-verifica SOLO los registros con status -1 (artefactos de carga), secuencial + reintentos.
const { chromium } = require('playwright');
const fs=require('fs'), path=require('path');
const DIR=__dirname, F=path.join(DIR,'report.jsonl');
const recs=fs.readFileSync(F,'utf8').split('\n').filter(l=>l.trim()).map(l=>JSON.parse(l));
const bad=recs.filter(r=>r.status===-1);
console.log(`a re-verificar: ${bad.length}`);
const langPrefix=(url)=>{const m=url.match(/\/fea\/(es|en|fr|it|pt)\//);if(m)return m[1];if(/\/fea\//.test(url))return 'es';return '';};
(async()=>{
const b=await chromium.launch({args:['--ignore-certificate-errors']});
const ctx=await b.newContext({ignoreHTTPSErrors:true,userAgent:'fea-verify-reverify'});
const page=await ctx.newPage();
let fixed=0,stillbad=0;
for(let i=0;i<bad.length;i++){
const r=bad[i]; let ok=false;
for(let a=0;a<3 && !ok;a++){
try{
const resp=await page.goto(r.url,{waitUntil:'domcontentloaded',timeout:30000});
r.status=resp?resp.status():0; r.final=page.url(); r.redirected=r.final!==r.url; r.final_lang=langPrefix(r.final);
const d=await page.evaluate(()=>{const m=document.querySelector('main,.wp-block-post-content,.entry-content,article')||document.body;return{text:(m.innerText||'').replace(/\s+/g,' ').trim().slice(0,1200),htmlLang:document.documentElement.getAttribute('lang')||'',links:[...new Set(Array.from(document.querySelectorAll('a[href]')).map(a=>a.href).filter(h=>/^https?:/.test(h)))]};});
r.text=d.text;r.htmlLang=d.htmlLang;r.links=d.links;delete r.error; ok=true; fixed++;
}catch(e){ r.error=String(e).slice(0,120); await page.waitForTimeout(800); }
}
if(!ok) stillbad++;
if((i+1)%100===0) console.log(` ${i+1}/${bad.length} (recuperadas ${fixed}, aún mal ${stillbad})`);
}
await b.close();
fs.writeFileSync(F, recs.map(r=>JSON.stringify(r)).join('\n')+'\n');
console.log(`re-verify done: recuperadas ${fixed}, siguen mal ${stillbad}`);
})();