使用 Puppeteer ( https://github.com/GoogleChrome/puppeteer ),我有一个application/pdf页面。使用 headless: false
时,页面是通过 Chromium PDF 查看器加载的,但我想使用 headless。如何下载原始 .pdf 文件或将其用作其他库的 blob,例如 (pdf-parse https://www.npmjs.com/package/pdf-parse )?
最佳答案
由于 Puppeteer 目前不支持通过 page.goto()
在 headless 模式下导航到 PDF 文档由于upstream issue ,您可以使用page.setRequestInterception()
启用请求拦截,然后就可以监听 'request'
事件并在使用请求客户端获取PDF缓冲区之前检测资源是否为PDF。
获取PDF缓冲区后,可以使用request.abort()
要中止原始 Puppeteer 请求,或者如果请求不是 PDF,您可以使用 request.continue()
正常继续请求。
这是一个完整的工作示例:
'use strict';
const puppeteer = require('puppeteer');
const request_client = require('request-promise-native');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', request => {
if (request.url().endsWith('.pdf')) {
request_client({
uri: request.url(),
encoding: null,
headers: {
'Content-type': 'applcation/pdf',
},
}).then(response => {
console.log(response); // PDF Buffer
request.abort();
});
} else {
request.continue();
}
});
await page.goto('https://example.com/hello-world.pdf').catch(error => {});
await browser.close();
})();
关于javascript - Puppeteer - 如何获取当前页面(应用程序/pdf)作为缓冲区或文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53487375/