【问题标题】:scrollIntoView() looping element on puppeteerpuppeteer 上的 scrollIntoView() 循环元素
【发布时间】:2021-10-23 04:06:21
【问题描述】:

我想在页面滚动无限加载时抓取帖子列表。我想要 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个帖子,然后刷机会一个一个的去取。

【问题讨论】:

    标签: javascript node.js dom puppeteer


    【解决方案1】:

    使用您当前的流程,几乎同时设置所有超时,然后在相同的 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);
    }
    

    【讨论】:

    • 感谢它现在的工作。另一个问题,我如何触发鼠标事件,如悬停或在评估中输入元素?
    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 2019-12-18
    • 2018-05-16
    • 2021-10-29
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    相关资源
    最近更新 更多