Поскольку Puppeteer в настоящее время не поддерживает навигацию к документу PDF в режиме без заголовка с помощью page.goto()
из-за проблемы в восходящем направлении , вы можете использовать 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();
})();