scrollIntoView() smyčkový prvek na loutkáři

Chci seškrábat seznam příspěvků, zatímco se rolování stránky načítá donekonečna. Chci scrollIntoView() pro každý prvek ve smyčce. můj kód je dočasně takový a výsledek, když se stránka načte, se vrátí, ale žádná chyba.

for (let i = 0; i < 20; i++) {
    const selector = 'div[role="feed"]:nth-child(2) div.sjgh65i0'

    await page.evaluate((selector, i) => {
      setTimeout(() => {
        const element = document.querySelectorAll(selector)[i]
        if(element) {
          element.scrollIntoView();
        }
      }, 2000);
    }, selector, i)
  }

Například chci vzít 20 příspěvků a potom škrabka vezme příspěvky jeden po druhém.

Odpověď

Při vašem aktuálním toku jsou všechny časové limity nastaveny téměř najednou a poté se všechny spustí po stejných 2 sekundách.

Zkuste něco takového:

const selector = 'div[role="feed"]:nth-child(2) div.sjgh65i0';

for (let i = 0; i < 20; i++) {
  await page.waitForTimeout(2000);

  await page.evaluate((selector, i) => {
    const element = document.querySelectorAll(selector)[i];
    if(element) {
      element.scrollIntoView();
    }
  }, selector, i);
}