summaryrefslogtreecommitdiff
path: root/index.js
blob: 4e69ece6aee472d929f4f663a5ed8534478ad057 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
const puppeteer = require('puppeteer');

var options = {
  headless: false,
  args: [
    '--enable-usermedia-screen-capturing',
    '--allow-http-screen-capture',
    '--auto-select-desktop-capture-source=bbbrecorder',
    '--load-extension=' + __dirname,
    '--disable-extensions-except=' + __dirname,
    '--disable-infobars',
    '--no-sandbox',    
    `--window-size=1280,900`, // 1280x720 + infobars
  ],
}

async function main() {
    try {
        var url = process.argv[2],
            filename = process.argv[3]

        if (!filename) { filename = 'export.webm' }
        
        const browser = await puppeteer.launch(options)
        const pages = await browser.pages()
        
        const page = pages[0]

        page.on('console', msg => {
            var m = msg.text();
            console.log('PAGE LOG:', m)
        });

        await page._client.send('Emulation.clearDeviceMetricsOverride')
        await page.goto(url, {waitUntil: 'networkidle2'})
        await page.setBypassCSP(true)

        // wait until play button is loaded
        await page.waitForSelector('button[class=acorn-play-button]');
        await page.$eval('#navbar', element => element.style.display = 'none');
        await page.$eval('#copyright', element => element.style.display = 'none');
        await page.click('video[id=video]', { waitUntil: 'domcontentloaded' });
        await page.$eval('#main-section', element => {
            element.style.height = '100vh';
            element.style.width = '100vw';
            element.style.padding = '0';
            element.style['z-index'] = '999';
        });


        await page.evaluate((x) => {
            window.postMessage({type: 'REC_START'}, '*')
        })

        await page.waitFor(10000);
        // Wait until play button becomes pause button
        await page.waitForSelector('button.acorn-paused-button', { hidden: true, timeout: 0 });

        await page.evaluate(filename => {
            window.postMessage({type: 'SET_EXPORT_PATH', filename}, '*')
            window.postMessage({type: 'REC_STOP'}, '*')
        }, filename)

        // Wait for download of webm to complete
        await page.waitForSelector('html.downloadComplete', { timeout: 0 })
        await page.close()
        await browser.close()
    } catch(err) {
        console.log(err)
    }
}

main()