fix: KöPi - Bilder via Puppeteer Element-Screenshot

This commit is contained in:
2026-07-09 11:13:08 +02:00
parent 2f3368a7e3
commit 5c05a2fc7d

View File

@@ -89,34 +89,20 @@ async function scrapeMarktguru() {
}); });
}); });
// Bilder alle auf einmal im Browser-Kontext laden (hat Zugriff auf CDN) // Bilder via Puppeteer screenshot der img-Elemente
const imageUrls = offers.map(o => o.image).filter(Boolean); const imgElements = await page.$$('img.offer-list-item-img');
if (imageUrls.length > 0) { for (let i = 0; i < offers.length; i++) {
const b64Images = await page.evaluate(async (urls) => { if (!offers[i].image || !imgElements[i]) continue;
const results = {}; try {
await Promise.all(urls.map(async url => { // Warte bis Bild geladen
try { await page.evaluate(el => new Promise(res => {
const resp = await fetch(url); if (el.complete) return res();
if (!resp.ok) { results[url] = null; return; } el.onload = res; el.onerror = res;
const blob = await resp.blob(); setTimeout(res, 3000);
results[url] = await new Promise(res => { }), imgElements[i]);
const r = new FileReader(); const b64 = await imgElements[i].screenshot({ encoding: 'base64' });
r.onloadend = () => res(r.result); offers[i].image = b64 ? `data:image/png;base64,${b64}` : null;
r.onerror = () => res(null); } catch { offers[i].image = null; }
r.readAsDataURL(blob);
});
} catch { results[url] = null; }
}));
return results;
}, imageUrls);
for (const offer of offers) {
if (offer.image && b64Images[offer.image]) {
offer.image = b64Images[offer.image];
} else {
offer.image = null;
}
}
} }
// Filtern auf Ziel-Händler + nur König Pilsener // Filtern auf Ziel-Händler + nur König Pilsener