diff options
author | eug-vs <eug-vs@keemail.me> | 2020-11-10 23:40:54 +0300 |
---|---|---|
committer | eug-vs <eug-vs@keemail.me> | 2020-11-10 23:40:54 +0300 |
commit | 4a1a10c53a3ea08f395fcbee447d4babcb86f792 (patch) | |
tree | 676a6207d0812a5407813c35aa80406dc107588f /src/index.js | |
parent | 49a1981a621b8338ff2b80e0d4b18302aaa7ffe5 (diff) | |
download | bsu-fantom-4a1a10c53a3ea08f395fcbee447d4babcb86f792.tar.gz |
feat: login to system and join the class
Diffstat (limited to 'src/index.js')
-rw-r--r-- | src/index.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..a318ccd --- /dev/null +++ b/src/index.js @@ -0,0 +1,53 @@ +const puppeteer = require('puppeteer'); + +const { + EDUFPMI_URL, + EDUFPMI_USERNAME, + EDUFPMI_PASSWORD, + COURSE_URL +} = process.env; + + +const clickElementByXPath = (page, xPath) => page + .waitForXPath(xPath) + .then(item => item.click()); + + +puppeteer.launch({ headless: true }) + .then(async browser => { + const page = await browser.newPage(); + + // Login + await page.goto(EDUFPMI_URL, { waitUntil: 'networkidle0' }); + await page.type('input#username', EDUFPMI_USERNAME); + await page.type('input#password', EDUFPMI_PASSWORD); + await page.click('button#loginbtn'); + await page.waitForResponse(response => response.url().includes('index.php')); + console.log(`Logged in as ${EDUFPMI_USERNAME}`); + + // Launch a meeting + await page.goto(COURSE_URL, { waitUntil: 'networkidle0' }); + await page.screenshot({ path: './screenshot1.png' }); + const moodlePagePromise = new Promise(resolve => browser.on( + 'targetcreated', + target => resolve(target.page()) + )); + await page.click('input#join_button_input'); + const moodlePage = await moodlePagePromise; + + // Join as "Listen only" + await clickElementByXPath(moodlePage, '//span[contains(text(),"Listen only")]'); + console.log('Joined the meeting'); + + // Wait 5 seconds + await new Promise(resolve => setTimeout(resolve, 5000)); + console.log('Time to leave!') + + // Leave audio and close the browser + await clickElementByXPath(moodlePage, '//button[contains(@aria-label,"Leave audio")]'); + await new Promise(resolve => setTimeout(resolve, 1500)); + await browser.close(); + console.log('Left the meeting'); + }) + .catch(e => console.log(e)); + |