puppeteer 上的 scrollIntoView() 循环元素

scrollIntoView() looping element on puppeteer

我想在页面滚动无限加载时抓取帖子列表。我想要 scrollIntoView() 循环中的每个元素。我的代码暂时是这样的,页面加载时的结果,跳出但没有错误。

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)
  }

比如我想取20个帖子,然后爬虫会一个一个取。

在您当前的流程中,所有超时几乎都是同时设置的,然后在相同的 2 秒后全部触发。

尝试这样的事情:

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);
}