diff --git a/evaluateStartPakket.js b/evaluateStartPakket.js index 9523ea4..5d86f9a 100644 --- a/evaluateStartPakket.js +++ b/evaluateStartPakket.js @@ -1,6 +1,6 @@ const IFRAME_SELECTOR = 'iframe[title="Hoofdinhoud"]'; -const CELL_SELECTOR = 'a[title="Sectie uitvouwen Algemene opleidingsonderdelen"]'; - +const CELL_SELECTOR = + 'a[title="Sectie uitvouwen Algemene opleidingsonderdelen"]'; /** * Extracted function to get the text content of a node. @@ -8,7 +8,7 @@ const CELL_SELECTOR = 'a[title="Sectie uitvouwen Algemene opleidingsonderdelen"] * @returns {Promise} The text content of the node. */ async function getNodeTextContent(node) { - return await node.evaluate(node => node.textContent); + return await node.evaluate((node) => node.textContent); } /** @@ -17,13 +17,13 @@ async function getNodeTextContent(node) { * @returns {Promise} The content frame. */ 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(); + 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(); } /** @@ -34,21 +34,24 @@ async function getContentFrame(page) { * @returns {Promise} True if the 'Startpakket' is available, false otherwise. */ async function isStartPakketAvailable(page) { - const contentFrame = await getContentFrame(page); - await contentFrame.waitForSelector(CELL_SELECTOR); - const cell = await contentFrame.$(CELL_SELECTOR); - console.log(cell); + const contentFrame = await getContentFrame(page); + await contentFrame.waitForSelector(CELL_SELECTOR); + const cell = await contentFrame.$(CELL_SELECTOR); - if (!cell) { - console.error('Cell not found'); - return false; - } + if (!cell) { + throw new Error( + "Cell inside function isStartPakketAvailable is not defined" + ); + } - const isCollapsed = await isAriaExpandedFalse(cell); + const isCollapsed = await isAriaExpandedFalse(cell); - console.log(`Aria-expanded: ${isCollapsed}`); + console.log(`Aria-expanded: ${isCollapsed}`); - return isCollapsed; + return { + isCollapsed: isCollapsed, + // Add more properties here in the future as needed + }; } /** @@ -58,10 +61,12 @@ async function isStartPakketAvailable(page) { * @returns {Promise} True if the `aria-expanded` attribute is 'false', false otherwise. */ async function isAriaExpandedFalse(node) { - if (!node) { - throw new Error('Node is not defined'); - } - return await node.evaluate(element => element.getAttribute('aria-expanded') === 'false'); + if (!node) { + throw new Error("Node is not defined"); + } + return await node.evaluate( + (element) => element.getAttribute("aria-expanded") === "false" + ); } -module.exports = isStartPakketAvailable ; \ No newline at end of file +module.exports = isStartPakketAvailable; diff --git a/iterateOverDashboardTable.js b/iterateOverDashboardTable.js index a71132f..bf1bff4 100644 --- a/iterateOverDashboardTable.js +++ b/iterateOverDashboardTable.js @@ -8,83 +8,86 @@ const puppeteer = require("puppeteer"); const isStartPakketAvailable = require("./evaluateStartPakket"); async function iterateOverDashboardTable() { + /*connection to local host */ + const browser = await puppeteer.connect({ + browserURL: "http://localhost:9222", // Connect to the browser's debugging address + }); - /*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.`); - // 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()); - // 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()); + // Select the table body by ID + const iframeElement = await page.waitForSelector( + 'iframe[title="Hoofdinhoud"]' + ); + const iframe = await iframeElement.contentFrame(); - // Select the table body by ID - const iframeElement = await page.waitForSelector('iframe[title="Hoofdinhoud"]'); + if (!iframe) { + console.log("Iframe on dasbhoard inschrijvingen page not found!"); + return; + } + + // Select the table body within the iframe + const tableBodySelector = "#QQ_RPT_OIS_TEMP\\$scroll\\$0 tbody"; + + // Check if the table exists inside the iframe + const tableExists = await iframe.$(tableBodySelector); + if (!tableExists) { + console.log("Table not found inside iframe!"); + return; + } + console.log("Table dashboard found inside iframe!"); + + // Get all rows within the table body + const links = await iframe.$$( + `${tableBodySelector} tr span[title="AA-rapport"] a` + ); + console.log(`Found ${links.length} AA-links to process.`); + + for (let i = 0; i < links.length; i++) { + console.log(`Processing link ${i + 1}`); + + const iframeElement = await page.waitForSelector( + 'iframe[title="Hoofdinhoud"]' + ); const iframe = await iframeElement.contentFrame(); - if (!iframe) { - console.log('Iframe on dasbhoard inschrijvingen page not found!'); - return; + const links = await iframe.$$( + `${tableBodySelector} tr span[title="AA-rapport"] a` + ); + + const [newPagePromise] = await Promise.all([ + new Promise((resolve) => + browser.once("targetcreated", async (target) => { + const newPage = await target.page(); + resolve(newPage); + }) + ), + links[i].click(), // Simulate the click + ]); + + const newPage = await newPagePromise; + + try { + const evaluationResult = await isStartPakketAvailable(newPage); + + if (evaluationResult.isCollapsed) { + console.log(`Evaluation succeeded for link ${i + 1}`); + } else { + console.log(`Evaluation failed for link ${i + 1}`); + } + } catch (error) { + console.error(`Error processing link ${i + 1}:`, error.message); } - // Select the table body within the iframe - const tableBodySelector = '#QQ_RPT_OIS_TEMP\\$scroll\\$0 tbody'; - - // Check if the table exists inside the iframe - const tableExists = await iframe.$(tableBodySelector); - if (!tableExists) { - console.log('Table not found inside iframe!'); - return; - } - console.log('Table dashboard found inside iframe!'); - - // Get all rows within the table body - const links = await iframe.$$(`${tableBodySelector} tr span[title="AA-rapport"] a`); - console.log(`Found ${links.length} AA-links to process.`); - - for (let i = 0; i < links.length; i++) { - console.log(`Processing link ${i + 1}`); - - const iframeElement = await page.waitForSelector('iframe[title="Hoofdinhoud"]'); - const iframe = await iframeElement.contentFrame(); - - const links = await iframe.$$(`${tableBodySelector} tr span[title="AA-rapport"] a`); - - const [newPagePromise] = await Promise.all([ - new Promise((resolve) => - browser.once('targetcreated', async (target) => { - const newPage = await target.page(); - resolve(newPage); - }) - ), - links[i].click(), // Simulate the click - ]); - - const newPage = await newPagePromise; - - try { - const evaluationResult = await isStartPakketAvailable(newPage); - - if (evaluationResult) { - console.log(`Evaluation succeeded for link ${i + 1}`); - } else { - console.log(`Evaluation failed for link ${i + 1}`); - } - } catch (error) { - console.error(`Error processing link ${i + 1}:`, error.message); - } - - await newPage.close(); - } - - console.log('All links processed.'); - - - + await newPage.close(); + } + console.log("All links processed."); } -module.exports = iterateOverDashboardTable(); \ No newline at end of file +module.exports = iterateOverDashboardTable();