summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoreug-vs <eug-vs@keemail.me>2020-11-10 23:40:54 +0300
committereug-vs <eug-vs@keemail.me>2020-11-10 23:40:54 +0300
commit4a1a10c53a3ea08f395fcbee447d4babcb86f792 (patch)
tree676a6207d0812a5407813c35aa80406dc107588f /src
parent49a1981a621b8338ff2b80e0d4b18302aaa7ffe5 (diff)
downloadbsu-fantom-4a1a10c53a3ea08f395fcbee447d4babcb86f792.tar.gz
feat: login to system and join the class
Diffstat (limited to 'src')
-rw-r--r--src/index.js53
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));
+