feat(lucida): Download multiple urls
This commit is contained in:
parent
b0a44f32d0
commit
c85737a57d
1 changed files with 23 additions and 17 deletions
|
@ -1,6 +1,6 @@
|
||||||
import {firefox, Page, BrowserContext, Download} from 'playwright';
|
import {firefox, Page, BrowserContext, Download, Browser} from 'playwright';
|
||||||
|
|
||||||
async function lucida(album: URL, timeout: number, context: BrowserContext): Promise<void> {
|
async function lucida(album: URL, baseTimeout: number, context: BrowserContext): Promise<void> {
|
||||||
const page: Page = await context.newPage();
|
const page: Page = await context.newPage();
|
||||||
|
|
||||||
await page.goto('/');
|
await page.goto('/');
|
||||||
|
@ -20,38 +20,44 @@ async function lucida(album: URL, timeout: number, context: BrowserContext): Pro
|
||||||
|
|
||||||
// Parse info
|
// Parse info
|
||||||
const albumName: string = (await page.locator('h1[class="svelte-6pt9ji"]').last().innerText()).trim();
|
const albumName: string = (await page.locator('h1[class="svelte-6pt9ji"]').last().innerText()).trim();
|
||||||
const trackCount: string = (await page.locator('h3[class="svelte-6pt9ji"]').first().innerText()).trim();
|
const trackCount: number = parseInt((await page.locator('h3[class="svelte-6pt9ji"]').first().innerText()).trim().split(' ')[0]);
|
||||||
|
|
||||||
|
console.log(`Downloading ${albumName} (${trackCount} tracks) from ${album.href}...`);
|
||||||
|
console.log(`Setting timeout to ${baseTimeout * trackCount} ms...`);
|
||||||
|
|
||||||
// Start download
|
// Start download
|
||||||
await page.getByText('download full album').click();
|
await page.getByText('download full album').click();
|
||||||
|
|
||||||
console.log(`Downloading ${albumName} (${trackCount}) from ${album.href}...`);
|
|
||||||
|
|
||||||
|
|
||||||
page.on('download', download => download.path().then(console.log));
|
|
||||||
const downloadPromise: Promise<Download> = page.waitForEvent('download', { timeout: timeout });
|
|
||||||
const download: Download = await downloadPromise;
|
|
||||||
|
|
||||||
// Save the download to the Downloads folder
|
// Save the download to the Downloads folder
|
||||||
|
const download: Download = await page.waitForEvent('download', { timeout: baseTimeout * trackCount });
|
||||||
// TODO Set path (configurable)
|
// TODO Set path (configurable)
|
||||||
await download.saveAs('/home/tdpeuter/Downloads/' + download.suggestedFilename());
|
await download.saveAs('/home/tdpeuter/Downloads/lucida/' + download.suggestedFilename());
|
||||||
|
|
||||||
await page.close();
|
await page.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
|
const timeout: number = 240000;
|
||||||
|
const albums: string[] = [
|
||||||
|
'https://www.qobuz.com/us-en/album/you-me-disclosure-eliza-doolittle/q5q4tg0cupgwa',
|
||||||
|
'https://www.qobuz.com/us-en/album/shes-gone-dance-on-disclosure/xrylx7j5794ab',
|
||||||
|
'https://www.qobuz.com/us-en/album/tondo-disclosure-eko-roosevelt/tlb5v175fbyxb'
|
||||||
|
];
|
||||||
|
const testAlbums: string[] = [
|
||||||
|
'https://www.qobuz.com/us-en/album/moon-safari-air/0724384497859'
|
||||||
|
];
|
||||||
|
|
||||||
// Launch a new Firefox browser instance
|
// Launch a new Firefox browser instance
|
||||||
// TODO Allow to pass headless option as argument
|
// TODO Allow to pass headless option as argument
|
||||||
const browser = await firefox.launch({ headless: true }); // Set headless: true to run without UI
|
const browser: Browser = await firefox.launch({ headless: false }); // Set headless: true to run without UI
|
||||||
const context = await browser.newContext({
|
const context: BrowserContext = await browser.newContext({
|
||||||
acceptDownloads: true, // Enable download handling
|
acceptDownloads: true, // Enable download handling
|
||||||
baseURL: 'https://lucida.to'
|
baseURL: 'https://lucida.to'
|
||||||
});
|
});
|
||||||
|
|
||||||
const album: URL = new URL('https://www.qobuz.com/us-en/album/you-me-disclosure-eliza-doolittle/q5q4tg0cupgwa');
|
for (const album of testAlbums) {
|
||||||
// const album: URL = new URL('https://www.qobuz.com/us-en/album/led-zeppelin-iv-hd-remastered-edition-led-zeppelin/0603497898503');
|
await lucida(new URL(album), timeout, context);
|
||||||
const timeout: number = 240000;
|
}
|
||||||
await lucida(album, timeout, context);
|
|
||||||
|
|
||||||
// Close the browser
|
// Close the browser
|
||||||
await browser.close();
|
await browser.close();
|
||||||
|
|
Reference in a new issue