Final Grade added to JSON
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -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
|
||||||
25
index.ts
25
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'];
|
const TARGET_CATEGORIES = ['NW1', 'NW2', 'SE1', 'NW3', 'NW4', 'SE2'];
|
||||||
|
|
||||||
// Browser pool to reuse browser instances
|
// Browser pool to reuse browser instances
|
||||||
@@ -72,6 +72,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,
|
||||||
totalClasses: grades.length,
|
totalClasses: grades.length,
|
||||||
@@ -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();
|
||||||
@@ -754,6 +757,19 @@ async function navigateToGrading(page: Page, allClassGrades: any[]) {
|
|||||||
|
|
||||||
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}`);
|
||||||
|
|||||||
Reference in New Issue
Block a user