32 lines
1.1 KiB
JavaScript
32 lines
1.1 KiB
JavaScript
import puppeteer from 'puppeteer';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const url = process.argv[2] || 'http://localhost:3000';
|
|
const label = process.argv[3] || '';
|
|
|
|
const dir = path.join(__dirname, 'temporary screenshots');
|
|
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
|
|
|
let n = 1;
|
|
const name = () => label ? `screenshot-${n}-${label}.png` : `screenshot-${n}.png`;
|
|
while (fs.existsSync(path.join(dir, name()))) n++;
|
|
const filepath = path.join(dir, name());
|
|
|
|
const browser = await puppeteer.launch({
|
|
headless: true,
|
|
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage'],
|
|
});
|
|
|
|
const page = await browser.newPage();
|
|
await page.setViewport({ width: 1440, height: 900, deviceScaleFactor: 1 });
|
|
await page.goto(url, { waitUntil: 'networkidle0', timeout: 30000 });
|
|
// Allow GSAP + web fonts to settle
|
|
await new Promise(r => setTimeout(r, 2500));
|
|
await page.screenshot({ path: filepath, fullPage: false });
|
|
await browser.close();
|
|
|
|
console.log(`Saved: ${filepath}`);
|