// Capture les screenshots du site prod pour le README (docs/screenshots/). // Usage : npm i playwright puis `node scripts/screenshots.mjs` // (RENTKA_BASE pour cibler un autre déploiement, OUT_DIR pour changer la sortie) import { chromium, devices } from 'playwright'; import { mkdirSync } from 'fs'; const OUT = process.env.OUT_DIR || new URL('../docs/screenshots/', import.meta.url).pathname; mkdirSync(OUT, { recursive: true }); const BASE = process.env.RENTKA_BASE || 'https://www.rent-ka.com'; const shots = [ { name: 'accueil', url: '/', width: 1440, height: 900 }, { name: 'annonces', url: '/', width: 1440, height: 900, scrollTo: 1400 }, { name: 'carte', url: '/?view=carte', width: 1440, height: 900, settle: 8000 }, { name: 'accueil-mobile', url: '/', mobile: true }, { name: 'fiche-logement', url: '/listing/skyline:example', width: 1440, height: 900 }, { name: 'ville-quebec', url: '/ville/quebec', width: 1440, height: 900 }, { name: 'villes', url: '/villes', width: 1440, height: 900 }, { name: 'sources', url: '/sources', width: 1440, height: 900 }, { name: 'stats', url: '/stats', width: 1440, height: 900 }, ]; const browser = await chromium.launch(); for (const s of shots) { const ctx = s.mobile ? await browser.newContext({ ...devices['iPhone 14'], locale: 'fr-CA' }) : await browser.newContext({ viewport: { width: s.width, height: s.height }, deviceScaleFactor: 2, locale: 'fr-CA', }); // Consentement déjà donné → pas de bandeau dans les captures await ctx.addInitScript(() => { localStorage.setItem( 'rentka-consent-v1', JSON.stringify({ essential: true, preferences: true, statistics: false, ts: 1 }) ); }); const page = await ctx.newPage(); try { await page.goto(BASE + s.url, { waitUntil: 'networkidle', timeout: 45000 }); } catch { // networkidle peut ne jamais arriver (ticker temps réel) — on capture quand même } if (s.scrollTo) { await page.mouse.wheel(0, s.scrollTo); } await page.waitForTimeout(s.settle ?? 2500); await page.screenshot({ path: `${OUT}${s.name}.png` }); console.log('ok', s.name); await ctx.close(); } await browser.close();