screenshoteer/index.js

68 lines
2.2 KiB
JavaScript
Raw Normal View History

2018-12-02 12:06:38 +01:00
#!/usr/bin/env node
2018-12-06 15:41:47 +01:00
const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');
const program = require('commander');
2018-12-02 12:06:38 +01:00
program
.option('--url, [url]', 'The url')
.option('--emulate, [emulate]', 'emulate device')
.option('--fullpage, [fullpage]', 'Full Page')
.option('--pdf, [pdf]', 'Generate PDF')
.option('--w, [w]', 'width')
.option('--h, [h]', 'height')
2018-12-04 13:38:32 +01:00
.option('--waitfor, [waitfor]', 'Wait time in milliseconds')
2018-12-04 16:23:06 +01:00
.option('--el, [el]', 'element css selector')
2018-12-06 11:32:21 +01:00
.option('--auth, [auth]', 'Basic HTTP authentication')
2018-12-02 12:06:38 +01:00
.parse(process.argv);
2018-12-06 15:41:47 +01:00
if (!program.url) {
console.log('Please add --url parameter.\n' +
2018-12-06 17:45:38 +01:00
'Something like this: $ screenshoteer --url http://www.example.com');
2018-12-06 15:41:47 +01:00
process.exit();
}
2018-12-02 12:06:38 +01:00
2018-12-06 15:41:47 +01:00
!program.fullpage ? program.fullPage = true : program.fullPage = JSON.parse(program.fullpage);
2018-12-02 12:06:38 +01:00
2018-12-06 15:41:47 +01:00
console.log(program.url);
console.log(program.fullPage);
2018-12-02 12:06:38 +01:00
(async () => {
2018-12-05 17:00:18 +01:00
try {
await execute();
} catch(e) {
console.error(e);
process.exit(1);
}
async function execute() {
2018-12-06 15:41:47 +01:00
const browser = await puppeteer.launch();
const page = await browser.newPage();
const timestamp = new Date().getTime();
if (program.w && program.h) await page.setViewport({width: Number(program.w), height: Number(program.h)});
2018-12-06 15:14:16 +01:00
if (program.emulate)
await page.emulate(devices[program.emulate]);
else
program.emulate = '';
2018-12-06 11:32:21 +01:00
if (program.auth) {
2018-12-06 12:39:27 +01:00
const [username, password] = program.auth.split(';');
2018-12-06 15:41:47 +01:00
await page.authenticate({ username, password });
2018-12-06 11:32:21 +01:00
}
2018-12-06 15:41:47 +01:00
await page.goto(program.url);
const title = (await page.title()).replace(/[/\\?%*:|"<>]/g, '-');
if (program.waitfor) await page.waitFor(Number(program.waitfor));
2018-12-05 17:00:18 +01:00
if (program.el) {
const el = await page.$(program.el);
2018-12-06 10:14:59 +01:00
await el.screenshot({path: `${title} ${program.emulate} ${program.el} ${timestamp}.png`});
2018-12-05 17:00:18 +01:00
} else {
2018-12-06 15:41:47 +01:00
await page.screenshot({path: `${title} ${program.emulate} ${timestamp}.png`, fullPage: program.fullPage});
2018-12-05 17:00:18 +01:00
}
2018-12-06 15:41:47 +01:00
await page.emulateMedia('screen');
if (program.pdf) await page.pdf({path: `${title} ${program.emulate} ${timestamp}.pdf`});
console.log(title);
await browser.close();
2018-12-04 16:23:06 +01:00
}
2018-12-05 17:00:18 +01:00
2018-12-02 12:06:38 +01:00
})()