Откройте Puppeteer с определенной конфигурацией (скачать PDF вместо PDF Viewer) - PullRequest
2 голосов
/ 22 мая 2019

Я хотел бы открыть Chromium с определенной конфигурацией.

Я ищу конфигурацию для активации следующей опции :

Настройки => Настройки сайта => Разрешения => Документы PDF => «Загружать файлы PDF вместо автоматического их открытия в Chrome»

Я искал теги на этой странице переключения командной строки , но единственный параметр, который имеет дело с pdf, это --print-to-pdf, что не соответствует моей потребности.

У вас есть идеи?

1 Ответ

0 голосов
/ 22 мая 2019

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 г.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...