const puppeteer = require('puppeteer'); const IFRAME_SELECTOR = 'iframe[title="Hoofdinhoud"]'; const wait = require("./wait"); const config = require("./config.js"); //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.$(config.uitvouwenSelector); if (uitvouwenButton) { await uitvouwenButton.click(); console.log("uitvouwen button clicked"); await wait(2000); contentFrame= await getContentFrame(page) } //logic to collapse all sections except the one with the excluded title const collapseArrows = await contentFrame.$$(config.collapsArrowSelector); const excludedArrow = await contentFrame.$(config.excludeFromCollapsingSelector); 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); } ); const totalStudiepunten = sumStudiepunten(rowData); return {rowData, totalStudiepunten}; } 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;