|
|
const http = require('http'); |
|
|
const puppeteer = require('puppeteer'); |
|
|
const urlModule = require('url'); |
|
|
|
|
|
|
|
|
let browser; |
|
|
|
|
|
const initBrowser = async () => { |
|
|
browser = await puppeteer.launch({ |
|
|
headless: true, |
|
|
args: ["--no-sandbox"], |
|
|
executablePath: '/app/chrome/chrome-linux64/chrome' |
|
|
}); |
|
|
}; |
|
|
|
|
|
initBrowser(); |
|
|
let number = 0 |
|
|
|
|
|
const server = http.createServer(async (req, res) => { |
|
|
const parsedUrl = urlModule.parse(req.url, true); |
|
|
const pathname = parsedUrl.pathname; |
|
|
console.log(pathname) |
|
|
const query = parsedUrl.query; |
|
|
console.log(query) |
|
|
|
|
|
if (pathname === '/screenshot' && req.method.toUpperCase() === 'GET') { |
|
|
console.log(number) |
|
|
const targetUrl = query.url; |
|
|
console.log(targetUrl) |
|
|
if (!targetUrl) { |
|
|
res.statusCode = 400; |
|
|
res.end('Missing url parameter'); |
|
|
return; |
|
|
} |
|
|
|
|
|
try { |
|
|
if (!browser) { |
|
|
await initBrowser(); |
|
|
} |
|
|
try { |
|
|
const page = await browser.newPage(); |
|
|
|
|
|
await page.goto(targetUrl); |
|
|
const screenshotBuffer = await page.screenshot(); |
|
|
await page.close(); |
|
|
|
|
|
res.statusCode = 200; |
|
|
number++ |
|
|
res.setHeader('Content-Type', 'image/png'); |
|
|
res.end(screenshotBuffer); |
|
|
} catch (pageError) { |
|
|
console.error('Error accessing page:', pageError); |
|
|
await browser.close(); |
|
|
res.statusCode = 500; |
|
|
res.end('Error accessing page'); |
|
|
} |
|
|
} catch (launchError) { |
|
|
console.error('Error launching browser:', launchError); |
|
|
res.statusCode = 500; |
|
|
res.end('Error launching browser'); |
|
|
} |
|
|
} else { |
|
|
res.statusCode = 404; |
|
|
res.end('Not Found'); |
|
|
} |
|
|
}); |
|
|
|
|
|
const port = process.env.PORT || 7860; |
|
|
server.listen(port, () => { |
|
|
console.log(`Server running on port ${port}`); |
|
|
}); |