diff --git a/.gitignore b/.gitignore index a14bddc..ce71b16 100644 --- a/.gitignore +++ b/.gitignore @@ -34,5 +34,7 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json .DS_Store skyward_screenshots/** +output/** + skywardstate.json \ No newline at end of file diff --git a/index.ts b/index.ts index a188e1d..8b4e4cf 100644 --- a/index.ts +++ b/index.ts @@ -16,7 +16,7 @@ const logger = pino({ }, }); -const SCREENSHOTS_DIR = 'skyward_screenshots'; +const OUTPUT_DIR = 'output'; const TARGET_CATEGORIES = ['NW1', 'NW2', 'SE1', 'NW3', 'NW4', 'SE2']; // Browser pool to reuse browser instances @@ -71,6 +71,9 @@ app.post('/fetch-grades', async (req, res) => { try { const grades = await runSkywardBot(username, password); + + writeFileSync(`${OUTPUT_DIR}/grades_${username}_${Date.now()}.json`, JSON.stringify(grades, null, 2)); + res.json({ success: true, @@ -174,8 +177,8 @@ const runSkywardBot = async (username: string, password: string) => { logger.info('Starting Skyward bot with Firefox on Linux...'); // Create screenshots directory if it doesn't exist - if (!existsSync(SCREENSHOTS_DIR)) { - mkdirSync(SCREENSHOTS_DIR); + if (!existsSync(OUTPUT_DIR)) { + mkdirSync(OUTPUT_DIR); } const browser = await getSharedBrowser(); @@ -753,7 +756,20 @@ async function navigateToGrading(page: Page, allClassGrades: any[]) { logger.info(` āœ“ Clicked grade cell`); await page.waitForTimeout(2000); - + + const gradePercentageLabel = await page.$('label.labelTag.visualLabel.header'); + let overallGrade = ''; + + + if (gradePercentageLabel) { + const percentageText = (await gradePercentageLabel.textContent())?.trim(); + overallGrade = percentageText || ''; + logger.info(` šŸ“Š Grade Percentage: ${percentageText}`); + } else { + logger.info(` ℹ No grade percentage label found`); + } + + const categoryContainer = await page.$('span.SegmentedAssignmentsInformationCell:not(.left) label.labelTag.visualLabel'); if (!categoryContainer) { @@ -896,6 +912,7 @@ async function navigateToGrading(page: Page, allClassGrades: any[]) { teacher: teacher, period: period, category: categoryText, + overallGrade: overallGrade, grades: grades, }); @@ -961,7 +978,7 @@ async function navigateToGrading(page: Page, allClassGrades: any[]) { logger.info(`\nšŸŽ‰ Finished processing all grade cells!`); try { - const gradesFilePath = `${SCREENSHOTS_DIR}/all_grades.json`; + const gradesFilePath = `${OUTPUT_DIR}/all_grades.json`; writeFileSync(gradesFilePath, JSON.stringify(allClassGrades, null, 2)); logger.info(`\nšŸ“„ Saved all grades to: ${gradesFilePath}`); logger.info(` Total classes processed: ${allClassGrades.length}`);