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()