adding coursesEnrolled.js as a functionality to check what courses have been taken up.
This commit is contained in:
parent
1f5fcbe3c8
commit
45023185a1
108
coursesEnrolled.js
Normal file
108
coursesEnrolled.js
Normal file
|
@ -0,0 +1,108 @@
|
|||
const puppeteer = require('puppeteer');
|
||||
const IFRAME_SELECTOR = 'iframe[title="Hoofdinhoud"]';
|
||||
const wait = require("./wait");
|
||||
|
||||
//Er zijn een aantal helperfuncties die nog verwijderd moeten worden
|
||||
//zo is de functie van de contentFrame te verwijderen want staat dubbel in evaluatestartpakket.js
|
||||
//de iframeselector is eveneens van belang om te verwijderen want staat ook dubbel in evaluatestartpakket.js
|
||||
|
||||
|
||||
|
||||
async function coursesEnrolled(page) {
|
||||
/*connection to local host
|
||||
const browser = await puppeteer.connect({
|
||||
browserURL: "http://localhost:9222", // Connect to the browser's debugging address
|
||||
});
|
||||
|
||||
// Get all open pages (tabs)
|
||||
const pages = await browser.pages();
|
||||
console.log(`Found ${pages.length} open pages on the browser.`);
|
||||
|
||||
// Interact with the last tab (or any tab of choice)
|
||||
let page = pages[pages.length - 1]; // Choose the last opened tab
|
||||
console.log("Current URL:", page.url()); */
|
||||
|
||||
let contentFrame= await getContentFrame(page);
|
||||
const uitvouwenButton = await contentFrame.$('input[id="DERIVED_SAA_DPR_SSS_EXPAND_ALL"]');
|
||||
if (uitvouwenButton) {
|
||||
await uitvouwenButton.click();
|
||||
console.log("uitvouwen button clicked");
|
||||
await wait(2000);
|
||||
contentFrame= await getContentFrame(page)
|
||||
}
|
||||
const collapseArrows = await contentFrame.$$('a.PSHYPERLINK.PTCOLLAPSE_ARROW');
|
||||
const excludedArrow = await contentFrame.$('a[title="Sectie samenvouwen AFSTUDEERVEREISTEN BACHELOR GESCHIEDENIS"]');
|
||||
const excludedTbody = await excludedArrow.evaluate(el => el.closest('tbody'));
|
||||
|
||||
for (const arrow of collapseArrows) {
|
||||
const isExcluded = await arrow.evaluate((el, excludedTbody) => {
|
||||
const title = el.getAttribute('title');
|
||||
const tbody = el.closest('tbody');
|
||||
return title === 'Sectie samenvouwen AFSTUDEERVEREISTEN BACHELOR GESCHIEDENIS' || tbody === excludedTbody;
|
||||
}, excludedTbody);
|
||||
|
||||
if (!isExcluded) {
|
||||
const isStillInDOM = await arrow.evaluate(el => document.body.contains(el));
|
||||
if (isStillInDOM) {
|
||||
await arrow.click();
|
||||
await wait(500); // Adjust the wait time as needed
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
contentFrame= await getContentFrame(page)
|
||||
|
||||
const rowData = await contentFrame.$$eval(
|
||||
'span',
|
||||
(spans) => {
|
||||
const uniqueEntries = new Set();
|
||||
return spans
|
||||
.filter((span) => span.innerText.trim().includes('Academiejaar'))
|
||||
.map((span) => {
|
||||
const tr = span.closest('tr');
|
||||
if (!tr) return null;
|
||||
const tds = tr.querySelectorAll('td');
|
||||
const getInnerHtml = (element) => {
|
||||
const aElement = element.querySelector('a');
|
||||
return aElement ? aElement.innerHTML.trim() : element.innerHTML.trim();
|
||||
};
|
||||
const studiegidsNummer = tds[0] ? getInnerHtml(tds[0].querySelector('span')) : '';
|
||||
const opleidingsOnderdeel = tds[1] ? getInnerHtml(tds[1].querySelector('span')) : '';
|
||||
const studiepunten = tds[2] ? getInnerHtml(tds[2].querySelector('span')) : '';
|
||||
if (uniqueEntries.has(studiegidsNummer)) return null;
|
||||
uniqueEntries.add(studiegidsNummer);
|
||||
return {
|
||||
studiegidsNummer,
|
||||
opleidingsOnderdeel,
|
||||
studiepunten,
|
||||
};
|
||||
})
|
||||
.filter((entry) => entry);
|
||||
}
|
||||
);
|
||||
|
||||
console.log(rowData);
|
||||
const totalStudiepunten = sumStudiepunten(rowData);
|
||||
console.log(`Total studiepunten: ${totalStudiepunten}`);
|
||||
//return rowData;
|
||||
|
||||
}
|
||||
|
||||
function sumStudiepunten(rowData) {
|
||||
return rowData.reduce((total, row) => {
|
||||
const studiepunten = parseFloat(row.studiepunten) || 0;
|
||||
return total + studiepunten;
|
||||
}, 0);
|
||||
}
|
||||
|
||||
async function getContentFrame(page) {
|
||||
await page.waitForSelector(IFRAME_SELECTOR);
|
||||
const iframe = await page.$(IFRAME_SELECTOR);
|
||||
if (!iframe) {
|
||||
throw new Error("Could not find iframe on the AA-page");
|
||||
}
|
||||
console.log("iframe found on AA-page");
|
||||
return await iframe.contentFrame();
|
||||
}
|
||||
|
||||
module.exports = coursesEnrolled;
|
|
@ -2,6 +2,7 @@
|
|||
open chrome in debug modus
|
||||
start chrome --remote-debugging-port=9222 --user-data-dir="C:\ChromeDebug"
|
||||
navigeer naar het dashboard en roep de lijst met startpakket studenten op die relevant zijn voor de test
|
||||
wees er zeker van dat de tab waarin je moet werken de meest rechtse tab is in de tabbladenbalk
|
||||
start dan het script
|
||||
*/
|
||||
const puppeteer = require("puppeteer");
|
||||
|
@ -10,6 +11,7 @@ const fs = require("fs");
|
|||
const saveResultsToExcel = require("./saveResultsToExcel");
|
||||
const appendToExcel = require("./appendResultsToExcel");
|
||||
const wait = require("./wait");
|
||||
const courseEnrolled = require("./coursesEnrolled");
|
||||
|
||||
async function iterateOverDashboardTable() {
|
||||
/*connection to local host */
|
||||
|
@ -137,12 +139,15 @@ async function iterateOverDashboardTable() {
|
|||
ErrorStr: error.message,
|
||||
};
|
||||
} finally {
|
||||
await newPage.close();
|
||||
//await newPage.close();
|
||||
}
|
||||
results.push(result);
|
||||
appendToExcel(result, filename);
|
||||
await courseEnrolled(newPage)
|
||||
await newPage.close()
|
||||
}
|
||||
|
||||
|
||||
console.log("All links processed.");
|
||||
saveResultsToExcel(results, "DashboardResults.xlsx");
|
||||
console.log("Results saved successfully to DashboardResults.xlsx");
|
||||
|
|
7
todo.md
Normal file
7
todo.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
# TODO
|
||||
|
||||
## High Priority
|
||||
- [ ] adviesrapport geeft geen buizen weer voor het huidige aj. Vakken verschijnen dan ook niet in de functie
|
||||
coursesenrolled. Hoe oplossen? Rapport deliberatie?
|
||||
- dit is eig geen probleem voor het begin van het aj wanneer nog geen examenperiode heeft
|
||||
plaatsgevonden.
|
Loading…
Reference in New Issue
Block a user