const puppeteer = require('puppeteer'); const attendConference = require('./attendConference.js'); const { clickElementBySelector } = require('./utils.js'); const { EDUFPMI_URL, EDUFPMI_USERNAME, EDUFPMI_PASSWORD, COURSE_URL } = process.env; puppeteer.launch({ headless: true }) .then(async browser => { const page = await browser.newPage(); // Login await page.goto(EDUFPMI_URL, { waitUntil: 'domcontentloaded' }); await page.type('input#username', EDUFPMI_USERNAME); await page.type('input#password', EDUFPMI_PASSWORD); await Promise.all([ clickElementBySelector(page, 'button#loginbtn'), page.waitForNavigation() ]); console.log(`Logged in as ${EDUFPMI_USERNAME}`); // Find the course await page.goto(COURSE_URL); await Promise.all([ clickElementBySelector(page, 'li.bigbluebuttonbn a'), page.waitForNavigation() // Wait until the next page loads ]); // Launch the conference in a new tab const conferencePagePromise = new Promise(resolve => browser.on( 'targetcreated', target => resolve(target.page()) )); await clickElementBySelector(page, 'input#join_button_input'); const conferencePage = await conferencePagePromise; // Prepare onJoin callback const fillAttendance = async () => { await page.goBack(); await clickElementBySelector(page, 'li.attendance a'); // TODO: actually fill the attendance console.log('Attendance filled'); }; await attendConference(conferencePage, fillAttendance); await browser.close(); }) .catch(e => console.log(e));