Puppeteer в настоящее время не поддерживает навигацию (или загрузку) PDF-файлов в легком режиме.Цитата из документации по функции page.goto
:
ПРИМЕЧАНИЕ Безголовый режим не поддерживает навигацию к документу PDF.См. восходящий выпуск .
. Что вы можете сделать, так это определить, выполняет ли браузер переход к файлу PDF, а затем загрузить его самостоятельно с помощью Node.js.
Пример кода
const puppeteer = require('puppeteer');
const http = require('http');
const fs = require('fs');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.on('request', req => {
if (req.url() === '...') {
const file = fs.createWriteStream('./file.pdf');
http.get(req.url(), response => response.pipe(file));
}
});
await page.goto('...');
await browser.close();
})();
Переходит по URL-адресу и отслеживает текущие запросы.Если найден «соответствующий запрос», Node.js вручную загрузит файл через http.get
и передаст его в file.pdf
.Помните, что это минимальный рабочий пример.Вы хотите перехватывать ошибки при загрузке и, возможно, захотите использовать что-то более сложное, чем http.get
, в зависимости от ситуации.
Примечание о будущем
В будущемможет быть проще сделать это.Когда кукловод будет поддерживать перехват ответа , вы сможете просто заставить браузер загрузить документ, но сейчас это не поддерживается (май 2019 г.).