import axios from 'axios'; import * as cheerio from 'cheerio'; const client = axios.create({ timeout: 8000, maxRedirects: 5, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } }); (async () => { try { // First, get the list page and extract entryIds console.log('Fetching home page to find tenders...'); const listResp = await client.get('https://etendersni.gov.uk/epps/home.do?status=open'); const $ = cheerio.load(listResp.data); // Extract entryIds from links const entryIds = new Set(); const links = []; $('a[href*="entryId"]').each((i, el) => { const href = $(el).attr('href'); const text = $(el).text().trim(); const match = href.match(/entryId=(\d+)/); if (match) { entryIds.add(match[1]); links.push({ id: match[1], text: text.substring(0, 60), href }); } }); console.log(`Found ${entryIds.size} tenders`); console.log('\nFirst 3 tenders:'); links.slice(0, 3).forEach(l => { console.log(` ID: ${l.id}, Text: "${l.text}"`); }); // Now try to view a detail page if (links.length > 0) { const firstId = links[0].id; const detailUrl = `https://etendersni.gov.uk/epps/viewInfo.do?sec=newItems&entryId=${firstId}`; console.log(`\nFetching detail page for ID ${firstId}...`); const detailResp = await client.get(detailUrl); const d$ = cheerio.load(detailResp.data); console.log('Detail page structure:'); console.log('Title:', d$('h1, h2, .title, [class*="title"]').first().text().trim().substring(0, 100)); // Look for tender details d$('.card, .panel, [class*="detail"], [class*="info"]').each((i, el) => { const content = d$(el).text().trim(); if (content.length > 0 && content.length < 300) { console.log(` ${content.substring(0, 80)}`); } }); } } catch (e) { console.log('Error:', e.message); } })();