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;