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}`); });