src/hdalab/scripts/capture-puppeteer.js
author ymh <ymh.work@gmail.com>
Fri, 19 Jul 2024 09:38:03 +0200
changeset 704 b5835dca2624
permissions -rw-r--r--
Adapt renkan preview to uses chrome headless/puppeteer
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
704
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
//from https://github.com/makinacorpus/django-screamshot
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
const puppeteer = require('puppeteer');
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
function delay(time) {
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
    return new Promise(function(resolve) { 
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
        setTimeout(resolve, time)
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
    });
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 }
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
/** 
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * arguments:
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * [1] => URL
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * [2] => output. Use /dev/stdout if you want to capture.
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * [3] => size
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 */
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
var address = process.argv[2],
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
    output  = process.argv[3];
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
config = {}
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
process.argv.forEach(function(arg, i) {
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    if (i > 3) {
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        namev = arg.split('=');
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        config[namev[0].replace('--', '')] = namev[1];
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    }
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
});
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
const width = parseInt(config.width || 1920),
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
      height = parseInt(config.height || 1080),
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
      wait = parseInt(config.wait || 1080);
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
(async () => {
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
  const browser = await puppeteer.launch({
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
      defaultViewport: {width: width, height: height},
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
      ignoreHTTPSErrors: true,
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
  });
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
  const page = await browser.newPage();
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
  await page.goto(address, {waitUntil: 'domcontentloaded'});
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
  // Wait until page has loaded completely
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
  await delay(wait);
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
  // Make a screenshot
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
  await page.screenshot({path: output});
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
  await browser.close();
b5835dca2624 Adapt renkan preview to uses chrome headless/puppeteer
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
})();