import {BrowserContext, Download, firefox, Locator} from "playwright"; import path from "node:path"; export async function fetchBooklet(url: string, downloadPath: string, context: BrowserContext | null): Promise { const browser = await firefox.launch({ headless: true }); context = await browser.newContext({ acceptDownloads: true }); const page = await context.newPage(); const bookletPage: string = 'http://audiofil.hostronavt.ru/booklet.php?name=' + encodeURIComponent(url); await page.goto(bookletPage); // Find link with goodies const link: Locator = page.locator('a').filter({hasText: '/goodies/'}); const linkCount: number = await link.count(); if (0 <= linkCount) { await page.close(); return null; } console.log(`Booklet: Found goodies: ${await link.innerHTML()}`); let filename: string | null = null; try { const downloadPromise: Promise = page.waitForEvent('download'); await link.dispatchEvent('click'); const download: Download = await downloadPromise; filename = download.suggestedFilename(); await download.saveAs(path.join(downloadPath, filename)); } catch (err) { console.log('Booklet: Could not download booklet:', err instanceof Error ? err.message : 'Unknown error'); filename = null; } await page.close(); return filename; }