Final Grade added to JSON

This commit is contained in:
2025-12-21 13:43:40 -06:00
parent e40b8fd0fe
commit ff5bd9574e
2 changed files with 24 additions and 5 deletions

2
.gitignore vendored
View File

@@ -34,5 +34,7 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
.DS_Store .DS_Store
skyward_screenshots/** skyward_screenshots/**
output/**
skywardstate.json skywardstate.json

View File

@@ -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']; const TARGET_CATEGORIES = ['NW1', 'NW2', 'SE1', 'NW3', 'NW4', 'SE2'];
// Browser pool to reuse browser instances // Browser pool to reuse browser instances
@@ -71,6 +71,9 @@ app.post('/fetch-grades', async (req, res) => {
try { try {
const grades = await runSkywardBot(username, password); const grades = await runSkywardBot(username, password);
writeFileSync(`${OUTPUT_DIR}/grades_${username}_${Date.now()}.json`, JSON.stringify(grades, null, 2));
res.json({ res.json({
success: true, success: true,
@@ -174,8 +177,8 @@ const runSkywardBot = async (username: string, password: string) => {
logger.info('Starting Skyward bot with Firefox on Linux...'); logger.info('Starting Skyward bot with Firefox on Linux...');
// Create screenshots directory if it doesn't exist // Create screenshots directory if it doesn't exist
if (!existsSync(SCREENSHOTS_DIR)) { if (!existsSync(OUTPUT_DIR)) {
mkdirSync(SCREENSHOTS_DIR); mkdirSync(OUTPUT_DIR);
} }
const browser = await getSharedBrowser(); const browser = await getSharedBrowser();
@@ -753,7 +756,20 @@ async function navigateToGrading(page: Page, allClassGrades: any[]) {
logger.info(` ✓ Clicked grade cell`); logger.info(` ✓ Clicked grade cell`);
await page.waitForTimeout(2000); 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'); const categoryContainer = await page.$('span.SegmentedAssignmentsInformationCell:not(.left) label.labelTag.visualLabel');
if (!categoryContainer) { if (!categoryContainer) {
@@ -896,6 +912,7 @@ async function navigateToGrading(page: Page, allClassGrades: any[]) {
teacher: teacher, teacher: teacher,
period: period, period: period,
category: categoryText, category: categoryText,
overallGrade: overallGrade,
grades: grades, grades: grades,
}); });
@@ -961,7 +978,7 @@ async function navigateToGrading(page: Page, allClassGrades: any[]) {
logger.info(`\n🎉 Finished processing all grade cells!`); logger.info(`\n🎉 Finished processing all grade cells!`);
try { try {
const gradesFilePath = `${SCREENSHOTS_DIR}/all_grades.json`; const gradesFilePath = `${OUTPUT_DIR}/all_grades.json`;
writeFileSync(gradesFilePath, JSON.stringify(allClassGrades, null, 2)); writeFileSync(gradesFilePath, JSON.stringify(allClassGrades, null, 2));
logger.info(`\n📄 Saved all grades to: ${gradesFilePath}`); logger.info(`\n📄 Saved all grades to: ${gradesFilePath}`);
logger.info(` Total classes processed: ${allClassGrades.length}`); logger.info(` Total classes processed: ${allClassGrades.length}`);