-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
121 lines (99 loc) · 4.52 KB
/
index.js
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
require('dotenv').config();
const puppeteer = require('puppeteer');
const fs = require('fs').promises;
// Fill in .env file
const FACEBOOK_EMAIL = process.env.FACEBOOK_EMAIL;
const FACEBOOK_PASSWORD = process.env.FACEBOOK_PASSWORD;
const MESSENGER_CONV_URL = process.env.MESSENGER_CONV_URL;
const PLANETE_MARKS_URL = process.env.PLANETE_MARKS_URL;
const PLANETE_USERNAME = process.env.PLANETE_USERNAME;
const PLANETE_PASSWORD = process.env.PLANETE_PASSWORD;
(async () => {
try{
const browser = await puppeteer.launch({slowMo: 50, headless: true});
const page = await browser.newPage();
page.setUserAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.0 Safari/537.36');
page.setViewport({ width: 1280, height: 720 });
// PLANETE
await page.goto('https://login.insa-lyon.fr/cas/login', { waitUntil: 'networkidle2' });
let usernamePlaneteField = await page.$('[name=username]');
let passwordPlaneteField = await page.$('[name=password]');
let submitPlaneteButton = await page.$('[name=submit]');
await usernamePlaneteField.type(PLANETE_USERNAME);
await passwordPlaneteField.type(PLANETE_PASSWORD);
// Wait til submit button is clicked and the page is loaded
const navigationPlanetePromise = page.waitForNavigation();
await submitPlaneteButton.click();
// End Wait
await navigationPlanetePromise;
await page.goto(PLANETE_MARKS_URL, { waitUntil: 'networkidle2' });
const elts = await page.$$eval('.ec-exam', elts => elts.map(elt => elt.textContent.replace(/(\t)/gm, "")));
let results = elts.map(elt => elt.split('\n'));
let marks = [];
for(let i = 0; i < results.length; i++){
let name = results[i][1];
if(name == 'examen'){
continue;
}
let mark = results[i][5];
let average = results[i][6];
let sd = results[i][7];
marks.push({name: name, mark: mark, average: average, sd: sd});
}
let fileContent = await fs.readFile('./marks.txt', {flag: 'a+', encoding: 'utf8'});
// Initiliaze to 0 for firt start
let marks_parsed = 0;
try{
marks_parsed = JSON.parse(fileContent);
} catch(e){
console.error('Parsing error', e);
}
let missing_marks = [];
if(marks.length != marks_parsed.length){
for(let i = 0; i < marks.length; i++){
let test = false;
for(let j = 0; j < marks_parsed.length; j++){
if(marks[i].name == marks_parsed[j].name){
test = true;
break;
}
}
if(test == false){
missing_marks.push({name: marks[i].name, mark: marks[i].mark, average: marks[i].average, sd: marks[i].sd});
}
}
await fs.writeFile('./marks.txt', JSON.stringify(marks, {flag : 'w', encoding : 'utf8'}));
}
if(missing_marks.length != 0){
for(let i = 0; i < missing_marks.length; i++){
console.log('Nouvelle note : ' + missing_marks[i].name +
' avec une moyenne de : ' + missing_marks[i].average +
' et un écart-type de : ' + missing_marks[i].sd);
}
}
else{
await browser.close();
}
// MESSENGER
await page.goto('https://www.messenger.com/', { waitUntil: 'networkidle2' });
let emailFacebookField = await page.$('[name=email]');
let passwordFacebookField = await page.$('[name=pass]');
let submitFacebookButton = await page.$('button[id=loginbutton]');
await emailFacebookField.type(FACEBOOK_EMAIL);
await passwordFacebookField.type(FACEBOOK_PASSWORD);
const navigationFacebookPromise = page.waitForNavigation();
await submitFacebookButton.click();
await navigationFacebookPromise;
await page.goto(MESSENGER_CONV_URL, { waitUntil: 'networkidle2' });
for(let i = 0; i < missing_marks.length; i++){
await page.type('._1p1t', 'Nouvelle note : ' + missing_marks[i].name +
' avec une moyenne de : ' + missing_marks[i].average +
' et un écart-type de : ' + missing_marks[i].sd);
await page.keyboard.press('Enter');
}
await browser.close();
}
catch (err) {
console.error(err.message);
}
})();