diff --git a/src/index.js b/src/index.js index 8d50106..4255b17 100644 --- a/src/index.js +++ b/src/index.js @@ -128,15 +128,18 @@ async function main () { ? resolveOutputPath(opts.output) : getOutputFilename(title) - const contentHtml = await extractRenderedContent( - readerPage, - `${EXTENSION_BASE}${extId}/data/reader/` + let contentHtml = await extractRenderedContent(readerPage) + contentHtml = contentHtml.replace( + '', + `` ) + contentHtml = contentHtml.replace(/ loading="lazy"/g, '') await readerPage.close() const enhancedHtml = enhanceHtml(contentHtml, customCss) const pdfPage = await browser.newPage() + await pdfPage.setViewport({ width: 1280, height: 7200 }) await generatePdf(pdfPage, enhancedHtml, outputFile) await pdfPage.close() } finally { diff --git a/src/pdf.js b/src/pdf.js index 01c39d2..c8983e3 100644 --- a/src/pdf.js +++ b/src/pdf.js @@ -43,6 +43,10 @@ export function enhanceHtml (html, customCss) { export async function generatePdf (page, html, outputPath) { await page.setContent(html, { waitUntil: 'networkidle0' }) + await page.waitForFunction( + () => Array.from(document.images).every(img => img.complete), + { timeout: 15000, polling: 200 } + ).catch(() => logger.debug('Image wait timed out, continuing...')) logger.info(`Generating PDF: "${outputPath}"`) await page.pdf({ path: outputPath, diff --git a/src/reader.js b/src/reader.js index 6a10fce..92d4040 100644 --- a/src/reader.js +++ b/src/reader.js @@ -130,8 +130,8 @@ export async function waitForReaderView (page) { logger.info('Article rendered.') } -export async function extractRenderedContent (page, baseUrl) { - const html = await page.evaluate((extBase) => { +export async function extractRenderedContent (page) { + const html = await page.evaluate(() => { const iframe = document.querySelector('#content iframe') if (!iframe) return null try { @@ -156,14 +156,11 @@ export async function extractRenderedContent (page, baseUrl) { : inlineVars } - const b = doc.createElement('base') - b.href = extBase - doc.head.insertBefore(b, doc.head.firstChild) return '\n' + doc.documentElement.outerHTML } catch { return null } - }, baseUrl) + }) if (!html) throw new Error('Could not extract rendered content from iframe') return html }