木偶群集_如何防止关闭页面?

问题描述

我很高兴找到木偶戏团。该库使抓取和自动化任务变得更加轻松。tnx到Thomas Dondorf

根据操纵up群集的作者,当任务完成的页面关闭immediately。顺便说一句,这很好。但是在某些情况下需要打开页面怎么办?

我的用例: 我将尝试简要地解释一下:

页面上有一些活动,它在后台涉及一个套接字,用于将一些数据发送到前端。此数据改变了球型罩,我需要捕获它。

这是我的代码

async function runcrawler(){
    const links = [
      "foo.com/barSome324","foo.com/barSome22","foo.com/barSome1","foo.com/barSome765",]

    const cluster = await Cluster.launch({
      concurrency: Cluster.CONCURRENCY_CONTEXT,workerCreationDelay: 5000,puppeteerOptions:{args: ['--no-sandBox','--disable-setuid-sandBox'],headless:false},maxConcurrency: numcpus,});
   
    await cluster.task(async ({ page,data: url }) => {
      await crawler(page,url)
      
    });
    for(link of links){
      await cluster.queue(link);
  
    }
    await cluster.idle();
  await cluster.close();
  }

这是页面部分中的搜寻器逻辑:

module.exports.crawler = async(page,link)=>{
  await page.goto(link,{ waitUntil: 'networkidle2' })
  await page.waitForTimeout(10000)
  await page.waitForSelector('#dbp')
    try {
          // method to be executed;
          setInterval(async()=>{
            const tables=await page.evaluate(async()=>{
               /// data I need to catch in every 30 seconds
            });
            
            
          },30000)

      } catch (error) {
        console.log(error)
      }
    
    
}

搜索并在js中发现我们可以使用mutationObserver捕获DOM更改,并尝试了solution。但也无法使用。页面将因以下错误关闭

UnhandledPromiseRejectionWarning:错误:协议错误 (Runtime.callFunctionOn):会话关闭。该页面最有可能具有 已关闭

所以我在这里有两个选择:

1.mutationObserver

2.set每30秒间隔一次会评估页面本身。

但是它们不符合我的需求。那么有什么办法解决这个问题吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)