@sapkotamadan/cache-server
Version:
CacheServer is an efficient web page extractor that uses Puppeteer to launch a headless browser and fetch web page content.
2 lines (1 loc) • 2.27 kB
JavaScript
import c from"express";import{URL as d}from"url";import h from"puppeteer";const r={host:"localhost",port:8080,wait:1,headless:"new"},w=process.argv.slice(2);for(const t of w){const s=t.match(/--(?<key>[a-z]+)=(?<value>\w+)/i);if(s&&s.groups){const{key:a,value:e}=s.groups;switch(a){case"host":r.host=e;break;case"port":r.port=Number(e);break;case"wait":r.wait=Number(e);break;case"headless":r.headless=["true","new"].includes(e)?e:!1;break}}}const g=async t=>{let s="";const a=await h.launch({headless:t.headless??"new",ignoreHTTPSErrors:!0,timeout:6e4,args:["--disable-background-networking","--disable-background-timer-throttling","--disable-dev-shm-usage","--disable-extensions","--disable-gpu","--disable-infobars","--disable-notifications","--disable-remote-fonts","--disable-setuid-sandbox","--disable-software-rasterizer","--disable-sync","--disable-web-security","--hide-scrollbars","--mute-audio","--no-sandbox"]}),e=await a.newPage();await e.setUserAgent(t.userAgent),await e.setViewport({width:1080,height:1024}),await e.setRequestInterception(!0),e.on("request",o=>{const u=o.resourceType();["image","stylesheet","media","font"].includes(u)?o.abort():o.continue()}),e.on("error",o=>o),e.on("pageerror",o=>o);try{await e.goto(t.url,{waitUntil:"networkidle2"}),await e.waitForNavigation({timeout:t.wait*1e3}),s=await e.content()}catch{s=await e.content()}finally{await a.close()}return s};var p={};const n={headless:r.headless,wait:r.wait,url:"",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"},i=c();i.get("/v2/page",async(t,s)=>{if(!t.query.url)return s.status(400).send("The rendering url is required!");n.url=decodeURIComponent(t.query.url);try{new d(n.url)}catch{return s.status(400).send("The rendering url must be a valid!")}n.wait=Number(t.query.wait)??r.wait,n.headless=t.query.headless!==void 0?t.query.headless==="true":r.headless,n.userAgent=decodeURIComponent(t.query.userAgent)??n.userAgent,g(n).then(a=>s.json({content:a})).catch(a=>s.status(400).send(`'Failed! Error: ${a.message||"Unknown error has been occurred."}`))});i.get("*",(t,s)=>{s.send("CacheServer is Running!")});const l=p.PORT||r.port;i.listen(l,()=>console.log(`App listening at http://localhost:${l}`));