File size: 2,272 Bytes
0edf4c9 1dd7887 62c2836 1dd7887 d7c3d87 10ec244 62c2836 d24869c 62c2836 d24869c 62c2836 d7c3d87 62c2836 10ec244 d7c3d87 62c2836 d7c3d87 1dd7887 62c2836 d24869c 62c2836 10ec244 62c2836 10ec244 1dd7887 10ec244 1dd7887 b29960a 0edf4c9 10ec244 0edf4c9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
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); // 第二个参数为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();
// 这里确保传入完整协议的网址,比如 http:// 或 https:// 开头的
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}`);
}); |