const express = require('express'); const puppeteer = require('puppeteer'); const cors = require('cors'); const app = express(); const PORT = process.env.PORT || 7860; app.use(cors()); app.use(express.json()); // 健康检查 app.get('/', (req, res) => { res.json({ message: 'Page Screenshot API', status: 'running' }); }); // 截图端点 app.post('/screenshot', async (req, res) => { const { url, width = 1280, height = 720, quality = 75 } = req.body; if (!url) { return res.status(400).json({ error: 'URL is required' }); } let browser; try { browser = await puppeteer.launch({ headless: 'new', executablePath: '/usr/bin/google-chrome-stable', args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage'] }); const page = await browser.newPage(); await page.setViewport({ width: parseInt(width), height: parseInt(height) }); await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 15000 }); const screenshot = await page.screenshot({ type: 'jpeg', quality: parseInt(quality), fullPage: false }); res.set('Content-Type', 'image/jpeg'); res.send(screenshot); } catch (error) { res.status(500).json({ error: 'Screenshot failed', message: error.message }); } finally { if (browser) await browser.close(); } }); app.listen(PORT, () => { console.log(`Screenshot API running on port ${PORT}`); });