node.js - 如何使用 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 秒
如果有任何解决方案请帮助我。 错误代码
解决方案
推荐阅读
- wordpress - 如何覆盖组件的道具?
- amazon-web-services - PVC 的 EKS 卷快照失败
- css - 如何在自定义 React 组件中使用 Material-UI 主题调色板颜色?
- javascript - VueJS 3 如何在两个非父/子组件之间触发方法
- wordpress - 我可以创建一个链接来跳转到新页面上的某个部分并打开某个 Divi 模块选项卡吗?
- javascript - 如何在点击时将字体真棒图标附加到段落
- eslint - 个人 ESLint 规则覆盖
- javascript - (节点:52585)UnhandledPromiseRejectionWarning:未处理的承诺拒绝
- java - 通过 ActiveMQ 代理插件发送消息
- python - 面向所有用户的 OneSignal SDK/API GET?