Skip to content

Instantly share code, notes, and snippets.

@stoneparker
Last active August 18, 2023 15:55
Show Gist options
  • Save stoneparker/3a3a31d414a433565da0380e672082b7 to your computer and use it in GitHub Desktop.
Save stoneparker/3a3a31d414a433565da0380e672082b7 to your computer and use it in GitHub Desktop.
Script to get all subjects of a USP student from jupiterweb
const puppeteer = require('puppeteer');
const credentials = require('./credentials.json');
(async () => {
const browser = await puppeteer.launch({ headless: 'new' });
const page = await browser.newPage();
// go to login page and authenticate
await page.goto('https://uspdigital.usp.br/jupiterweb/webLogin.jsp');
await page.type('input[name="codpes"]', credentials.login);
await page.type('input[name="senusu"]', credentials.password);
await page.click('input[type="submit"]');
// go to cronogram page and select program
await page.waitForSelector('a[href="gradeHoraria?codmnu=4759"]');
await page.click('a[href="gradeHoraria?codmnu=4759"]');
await page.waitForSelector('option[value="1"]');
await page.waitForSelector('#buscar');
await page.click('#buscar');
// get all subjects
const days = ['seg', 'ter', 'qua', 'qui', 'sex'];
const subjects = new Set();
for (const day of days) {
const selector = `[aria-describedby="tableGradeHoraria_${day}"]`;
await page.waitForSelector(selector);
const result = await page.evaluate(({ selector }) => {
const classes = [...document.querySelectorAll(selector)];
return classes.reduce((items, item) => {
const content = item.textContent;
if (!content) return items;
return [...items, content.split('-')[0]];
}, []);
}, { selector });
result.forEach((subject) => {
subjects.add(subject);
})
}
// go to subjects page to get complete name
for (const subjectCode of subjects.keys()) {
await page.goto(`https://uspdigital.usp.br/jupiterweb/obterDisciplina?sgldis=${subjectCode}`);
const text = await page.evaluate(
() => Array.from(document.querySelectorAll('.txt_arial_10pt_black'),
(element) => element.textContent)
);
const subjectName = text[2].split(' - ')[1];
console.log(`[${subjectCode}] ${subjectName}`);
}
await browser.close();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment