| const express = require("express"); | |
| const { chromium } = require("playwright"); | |
| const app = express(); | |
| app.get("/", async (req, res) => { | |
| let browser; | |
| try { | |
| let { url } = req.query; | |
| if (!url || !url.trim().startsWith("http")) return res.sendStatus(400); | |
| const viewport = { width: 1920, height: 1080 }; | |
| browser = await chromium.launch({ | |
| args: ["--incognito", "--single-process", "--no-sandbox", "--no-zygote", "--no-cache"], | |
| executablePath: process.env.CHROME_BIN, | |
| headless: true, | |
| }); | |
| const page = await browser.newPage(); | |
| await page.setViewportSize(viewport); | |
| await page.goto(url, { waitUntil: "load", timeout: 10000 }); | |
| const buffer = await page.screenshot(); | |
| res.setHeader("Content-Type", "image/png"); | |
| res.send(buffer); | |
| } catch { | |
| res.sendStatus(500); | |
| } finally { | |
| if (browser) await browser.close(); | |
| } | |
| }); | |
| app.listen(7860, () => console.log("Running on port 7860")); |