Javascript 刮削错误https://www.nytimes.com.how 我能解决它吗?

Javascript 刮削错误https://www.nytimes.com.how 我能解决它吗?,javascript,node.js,web-scraping,puppeteer,infinite-scroll,Javascript,Node.js,Web Scraping,Puppeteer,Infinite Scroll,我正试图使用下面的代码在nodejs中使用Pupeter库进行刮取。但它给出了一个错误,即文档未定义。如何使用infinte滚动成功刮取所有数据 static async listenNewsUpdate() { ScrapeModel.browser = await puppeteer.launch({ headless: false, }); const page = await ScrapeModel.br

我正试图使用下面的代码在nodejs中使用Pupeter库进行刮取。但它给出了一个错误,即文档未定义。如何使用infinte滚动成功刮取所有数据

static async listenNewsUpdate()
    {
   
        ScrapeModel.browser = await puppeteer.launch({
          headless: false,
        });
        const page = await ScrapeModel.browser.newPage();
        await page.goto(ScrapeModel.websiteURL);
        await page.evaluate(() => new Promise((resolve) => {             
          var scrollTop = -1;
          const interval = setInterval(() => {
            window.scrollBy(0, 100);
            if(document.documentElement.scrollTop !== scrollTop) {
              scrollTop = document.documentElement.scrollTop;
              return;
            }
            clearInterval(interval);
            resolve();
          }, 10);
        }).
        then())
        var posts=document.body.querySelectorAll('article')
     
        var postItems=[];    
        posts.forEach((item)=>{

            try{
              title=item.querySelector('h2').innerText;
              link=item.querySelector('a').href;
              summery=item.querySelector('p').innerText;
              postItems.push({
                'title': title,
                'links': link,
                'summery': summery
              })
            }catch(e){

            }
        })
      
        await ScrapeModel.browser.close();
      
        
    }

正如您所看到的,代码中没有定义“document”。在为page.evaluate()编写回调时,“document”对象存在于作用域中,因为木偶演员的evaluate()为您定义了它


因此,对“document”的第一次和第二次引用都在evaluate()回调中,并且没有问题。但是您的第三个引用在回调之外,其中“document”不再在范围内。

您能为我重构代码吗??bcz我无法将posts结果移出此范围…每次它都给我null…)