首页 > 解决方案 > 如何使用 puppeteer 解决节点 js 上的 heroku h12 超时错误

问题描述

const puppeteer = require("puppeteer");

const doPuppeteer = async(code) => {
  var Company={result:''};
  try{
    if(code.length!=6){//return error if code is not 6digits
      Company.result=false
      throw new Error('code length must be 6digits')
    }
    const browser = await puppeteer.launch({
        headless : true,
        args:['--no-sandbox',
         '--disable-setuid-sandbox',
       ],
    });
    //move to url page
    var url='https://www.nicebizinfo.com/ep/EP0100M002GE.nice?kiscode='+code
    const page = await browser.newPage();
    await page.goto(url,{waitUntil:'domcontentloaded'});

    //scrape company overview and name
    await page.waitForSelector('body > div:nth-child(31) > div > div.cTable.sp2.mb10 > table > tbody',{timeout:3000});
    var key=await page.evaluate(()=>{//scrape company overview keys
      return Array.from(document.querySelectorAll('body > div:nth-child(31) > div > div.cTable.sp2.mb10 > table > tbody>tr>td>div>p'))
      .map(tbody=>(tbody.textContent));
    })
    var val=await page.evaluate(()=>{//scrape company overview values
      return Array.from(document.querySelectorAll('body > div:nth-child(31) > div > div.cTable.sp2.mb10 > table > tbody>tr>td>div>strong'))
      .map(tbody=>(tbody.textContent));
    })

    var data={companyName:String(await page.evaluate(()=>{//scrape companyname
      return Array.from(document.querySelectorAll('body > div:nth-child(31) > div > div.header > h1'))
      .map(h1=>(h1.textContent))
    })), overview:''}

    await browser.close();

    var overview={};
    for(let i=0;i<key.length;i++){
      overview[key[i]]=val[i];
    }
    data.overview=overview;
    Company['data']=data;
    Company.result=true;
    return Company//return json style object
    await browser.close();
  }catch(error){
    console.log(error);
    Company['error']=String(error);
    return Company;
  }
}

exports.doScrape=doPuppeteer;

这是我使用 puppeteer 在 heroku 上的抓取代码

我在heroku上部署了这段代码,在服务器上运行这段代码后,下面的H12超时错误(请检查图像)返回。

我想知道为什么服务器需要超过 30 秒。在本地相同的代码上最多需要 3 秒

如果有任何解决方案请帮助我。 错误代码

标签: node.jsherokupuppeteer

解决方案


推荐阅读