如何解决如何使用 puppeteer 下载 PDF blob?
点击下载按钮后,会打开一个新选项卡,用户可以在其中查看 PDF 声明。
这个新标签的 URL 以 blob:
开头,例如:blob:https://some-domain.com/statement-id
。
如何将这份 PDF 声明下载到文件系统?
注意:我使用的是 { headless: false }
模式。
解决方法
尝试模拟案例:
import puppeteer from 'puppeteer';
import { writeFileSync } from 'fs';
// Minimal PDF from https://github.com/mathiasbynens/small#documents
const minimalPdf = `%PDF-1.
1 0 obj<</Pages 2 0 R>>endobj
2 0 obj<</Kids[3 0 R]/Count 1>>endobj
3 0 obj<</Parent 2 0 R>>endobj
trailer <</Root 1 0 R>>`;
const browser = await puppeteer.launch({ headless: false,defaultViewport: null });
try {
const [page] = await browser.pages();
await page.goto('http://example.com/');
await page.evaluate((pdf) => {
const url = URL.createObjectURL(new Blob([pdf],{type: 'application/pdf'}));
window.open(url);
},minimalPdf);
const newTarget = await page.browserContext().waitForTarget(
target => target.url().startsWith('blob:')
);
const newPage = await newTarget.page();
const blobUrl = newPage.url();
page.once('response',async (response) => {
console.log(response.url());
const pdfBuffer = await response.buffer();
console.log(pdfBuffer.toString());
console.log('same:',pdfBuffer.toString() === minimalPdf);
writeFileSync('minimal.pdf',pdfBuffer);
});
await page.evaluate((url) => { fetch(url); },blobUrl);
} catch(err) { console.error(err); } finally { /* await browser.close(); */ }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。