const puppeteer = require('puppeteer'); const fs = require('fs'); const path = require('path'); const SCREENSHOT_DIR = path.join(__dirname, 'ss'); async function run() { if (!fs.existsSync(SCREENSHOT_DIR)) { fs.mkdirSync(SCREENSHOT_DIR); } const urlsFile = process.argv[2] || 'urls.txt'; // Ignore lines beginning with "# " (don't ignore just # in case of hash-routed apps...) const lines = fs.readFileSync(path.join(__dirname, urlsFile), 'utf8').split(/[\r\n]+/).filter((url) => url && url.slice(0, 2) != '# '); let urlPrefix = 'http://localhost:8080/'; if (lines[0].indexOf('http') === 0) { urlPrefix = lines.shift(); } const browser = await puppeteer.launch(); const page = await browser.newPage(); for (let i = 0; i < lines.length; i++) { const [url, width = '800'] = lines[i].split(/\s+/); const widths = width.split(','); for (let j = 0; j < widths.length; j++) { await page.setViewport({width: +widths[j], height: 600}); await page.goto(urlPrefix + url); await page.screenshot({ fullPage: true, path: path.join(SCREENSHOT_DIR, `${url.replace(/[\/#]/g, '-')}-${widths[j]}.png`) }); console.log(`[Done] ${url} @ ${widths[j]}`); } } await browser.close(); } run().catch(console.error.bind(console));