diff --git a/coursesEnrolled.js b/coursesEnrolled.js new file mode 100644 index 0000000..d96c03c --- /dev/null +++ b/coursesEnrolled.js @@ -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; \ No newline at end of file diff --git a/iterateOverDashboardTable.js b/iterateOverDashboardTable.js index 8b4f272..a8440bb 100644 --- a/iterateOverDashboardTable.js +++ b/iterateOverDashboardTable.js @@ -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"); diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..ee7df8a --- /dev/null +++ b/todo.md @@ -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.