-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
109 lines (82 loc) · 2.72 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
const puppeteer = require('puppeteer');
const config = require("./config.json");
(async () => {
//Instanciando un browser
const browser = await puppeteer.launch({
headless: false
});
// nueva pag
const page = await browser.newPage();
// custom viewport
await page.setViewport({
width: 1280,
height: 800
})
// Metodo para cerrar el navegador
let logout = async () => {
console.log("Saliendo");
await browser.close();
}
//Metodo login
let login = async (username, password) => {
console.log("Entrando pagina del itla...")
// networkidle2 para esperar que cargue todo por completo
await page.goto("https://itla.edu.do/virtual/cv/", {
waitUntil: 'networkidle2'
});
// seeh
console.log("LLenando credenciales...");
await page.type("#username", username);
await page.type("#password", password);
// btn de clickear
console.log("Logeando...")
await page.click(".sign-up-btn > button");
// Ningun wait me quiso funcionar asi que gg wp _aiuda_
console.log("Esperando 3 segundos por bugs del itla ")
await page.waitFor(3000);
// screenshot despues del login
// await page.screenshot({path: 'example.png'});
}
//Metodo para obtener todas los enlaces de las asignaturas
let asignaturas = async () => {
console.log("Buscando materias...")
await page.goto("https://itla.edu.do/virtual/?redirect=0", {
waitUntil: "networkidle2"
});
// esperar que carguen todos los cursos
await page.waitForSelector(".dashboard-card");
// solo se necesitan los href
console.log("Obteniendo links de materias...");
let links = await page.$$eval(".dashboard-card a", lins => lins.map(a => a.href));
//ez regex
links = links.filter(a => !a.match(/my/gi))
links = links.filter((a,pos) => links.indexOf(a)==pos);
console.log(links)
return links;
}
// Metodo para entrar a cada asignatura
let entrarAsig = async (links) => {
for (let i = 0; i < links.length; i++) {
let asig = links[i];
await page.goto(asig, {
waitUntil: 'networkidle2'
});
// Obtener el nombre de la asignatura ez
let nombreAsig = await page.$eval('.page-header-headings > h1', s => s.innerHTML)
console.log("[" + nombreAsig + "] Listo!");
// xd
await page.waitFor(2000);
}
}
// ===========================================
await login(config.username, config.password);
let todasAsig = await asignaturas();
await entrarAsig(todasAsig);
await logout();
// ===========================================
//TODO
// - Manejo de errores
// - Saber cuanto tiempo min se debe de quedar en la pagina
// - Custom headless en consola
// - Algo ma talve qsy
})();