From 0ba26c36ca3ddfb6c746ba42a94bfa025637a08b Mon Sep 17 00:00:00 2001 From: Dicken Date: Thu, 9 Jul 2026 14:51:08 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20K=C3=B6Pi=20-=20Scrollen=20f=C3=BCr=20la?= =?UTF-8?q?zy-loaded=20Bilder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/tools/koepi/routes.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/backend/src/tools/koepi/routes.js b/backend/src/tools/koepi/routes.js index 7bc7cf4..15e1534 100644 --- a/backend/src/tools/koepi/routes.js +++ b/backend/src/tools/koepi/routes.js @@ -64,13 +64,22 @@ async function scrapeMarktguru() { await page.goto('https://www.marktguru.de/search/k%C3%B6nig%20pilsener?zipCode=47259', { waitUntil: 'networkidle2', timeout: 30000, }); - // Warte bis alle Bilder geladen sind - await page.evaluate(() => Promise.all( - Array.from(document.querySelectorAll('img.offer-list-item-img')).map(img => - img.complete ? Promise.resolve() : new Promise(r => { img.onload=r; img.onerror=r; setTimeout(r,5000); }) - ) - )).catch(() => {}); - await new Promise(r => setTimeout(r, 2000)); + // Seite nach unten scrollen damit lazy-loaded Bilder geladen werden + await page.evaluate(async () => { + await new Promise(resolve => { + let totalHeight = 0; + const distance = 300; + const timer = setInterval(() => { + window.scrollBy(0, distance); + totalHeight += distance; + if (totalHeight >= document.body.scrollHeight) { + clearInterval(timer); + resolve(); + } + }, 200); + }); + }); + await new Promise(r => setTimeout(r, 3000)); const offers = await page.evaluate(() => { // Exakte Selektoren basierend auf marktguru HTML-Struktur