const puppeteer = require('puppeteer');
/*
Il codice è incapusolato all'interno di una funzione asincrona
il che significa che verrà eseguita non appena il modulo sarà importato.
*/
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
const url = 'https://ted.europa.eu/udl?uri=TED:NOTICE:635180-2023:DATA:EN:HTML&src=0&tabId=3';
await page.goto(url);
const rows = await page.$$('tbody tr');
// Crea un dizionario
const values = {
'Title': (value) => console.log(`Title: ${value}`),
'Publication date': (value) => console.log(`Publication date: ${value}`),
'Deadline for submission': (value) => console.log(`Deadline for submission: ${value}`)
};
for (const row of rows) {
/*
Per ciascuna riga nella tabella, viene estratto il testo
all'interno di quella riga e quindi, per ogni chiave nell'oggetto
'values', viene verificato se il testo della riga contiene la chiave.
Se la chiave è presente, viene estratto il valore corrispondente, che
viene quindi passato alla funzione corrispondenti nell'oggetto
'values' per la stampa.
*/
const rowText = await page.evaluate(element => element.textContent, row);
// page.evaluate | serve per eseguire codice js nella pagina web
for (const keyword in values) {
if (rowText.includes(keyword)) {
const value = rowText.split(keyword)[1].trim();
values[keyword](value);
}
}
}
await browser.close();
})();