Puppeteer PDF-Загрузка показывает панель инструментов Chrome в загруженном файле

Вопрос или проблема

Я пытаюсь скачать PDF-файл с помощью Puppeteer, но каждый раз появляется панель инструментов Google Chrome, хотя я использую чистую ссылку для загрузки PDF.

Я попробовал использовать следующий код для загрузки PDF:

public async downloadPdf() {
        const browser = await puppeteer.launch(
            {
                headless: true, args: [
                    '--no-sandbox', '--disable-setuid-sandbox']
            }
        );
        const url = "https://notability.com/n/download/pdf/1_tGACBM45Y8SBARa88w_J/Note%203.%20Oct%202024.pdf"

        const page = await browser.newPage();
        await page.goto(url, {waitUntil: "networkidle2"});

        const pdf = await page.pdf()

        await browser.close();

        return Buffer.from(pdf);
    }

Вывод выглядит так:

Вывод

Но он должен выглядеть так:

Ожидаемый результат

Есть ли способ скачать файл без панели инструментов?

Ответ или решение

Чтобы загрузить PDF-файл без отображения панели инструментов Chrome, вам следует убедиться, что вы не используете функцию page.pdf(), которая генерирует PDF-файл из содержимого страницы. Вместо этого вам нужно скачать pdf-документ напрямую по ссылке. Ниже приведен пример, как это сделать с использованием Puppeteer:

const puppeteer = require('puppeteer');
const fs = require('fs');
const axios = require('axios');

public async function downloadPdf() {
    const url = "https://notability.com/n/download/pdf/1_tGACBM45Y8SBARa88w_J/Note%203.%20Oct%202024.pdf";

    // Используйте axios для загрузки pdf напрямую
    const response = await axios({
        method: 'GET',
        url,
        responseType: 'arraybuffer', // Чтобы получить данные в виде массива байтов
    });

    // Сохранение PDF-файла на диске
    const path = 'downloaded.pdf';
    fs.writeFileSync(path, response.data); // Сохраняем файл на диск
    console.log(`Файл загружен и сохранен как ${path}`);

    return Buffer.from(response.data);
}

Объяснение кода:

  1. Axios: Мы используем библиотеку axios для выполнения HTTP-запроса и получения PDF-документа напрямую по ссылке. Это избавляет вас от необходимости открывать страницу в браузере и соответственно от проблем с интерфейсом.
  2. Response Type: Указываем responseType: 'arraybuffer', чтобы получить ответ в виде массива байтов, что позволяет корректно работать с бинарными данными PDF.
  3. Сохранение файла: После получения данных мы сохраняем файл на диск с помощью fs.writeFileSync(), распределяя его по указанному пути.

Зачем это нужно:

Таким образом, вы сможете загрузить PDF-файл без каких-либо лишних элементов интерфейса Google Chrome, как это и требуется. Код запускает загрузку PDF напрямую, минуя любые интерфейсные аспекты, которые возникают при использовании методов, связанных с рендерингом страниц.

Теперь, запустив этот код, вы получите чистый PDF-файл без отображения панели инструментов.

Оцените материал
Добавить комментарий

Капча загружается...