Created
December 27, 2021 09:17
-
-
Save sintret/0f0505f5a03b5cbefe9200b823cb6af6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var http = require('http'); | |
const puppeteer = require("puppeteer"); | |
var url = require('url'); | |
const PORT = 3000; | |
let browser; | |
let pages = {} //store object if you want to store each page url | |
console.log(`Running at Port : ${PORT}`) | |
//create a server object: | |
http.createServer(async(req, res) => { | |
if (req.method === "GET") { | |
var url = req.url.replace("/", ""); | |
var output = await screenshot(url); | |
res.writeHead(200, {"Content-Type": "text/html"}); | |
res.end(`URL : ${url} File : ${output} `); | |
} | |
}).listen(PORT); //the server object listens on port 8080 | |
var start = async() => { | |
browser = await puppeteer.launch({ | |
args: [ | |
'--no-sandbox', | |
'--disable-setuid-sandbox', | |
] | |
}); | |
} | |
var screenshot = async(url = "") => { | |
var hostName = getHostname(url); | |
try { | |
if (!browser) { | |
await start(); | |
} | |
console.log(Object.keys(pages)) | |
if(hostName) { | |
console.log(`URL : ${url} HostName : ${hostName}`) | |
let page; | |
//reuse page | |
if(pages[hostName]) { | |
page = pages[hostName] | |
} else { | |
page = await browser.newPage(); | |
} | |
await page.goto(url, { waitUntil: 'networkidle0', timeout: 120000}); | |
var filename = new Date().getTime() + ".png"; | |
await page.screenshot({path: filename}); | |
//await page.close(); | |
pages[hostName] = page; | |
return filename; | |
} | |
return ""; | |
} catch (err) { | |
console.log(err) | |
browser.close(); | |
browser = null; | |
await start() | |
} | |
} | |
var getHostname = (url) => { | |
try { | |
const myURL = new URL(url); | |
return myURL.hostname ? myURL.hostname : ""; | |
} catch (err) { | |
return ""; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment