Вопрос или проблема
Я пытаюсь скачать 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);
}
Объяснение кода:
- Axios: Мы используем библиотеку
axios
для выполнения HTTP-запроса и получения PDF-документа напрямую по ссылке. Это избавляет вас от необходимости открывать страницу в браузере и соответственно от проблем с интерфейсом. - Response Type: Указываем
responseType: 'arraybuffer'
, чтобы получить ответ в виде массива байтов, что позволяет корректно работать с бинарными данными PDF. - Сохранение файла: После получения данных мы сохраняем файл на диск с помощью
fs.writeFileSync()
, распределяя его по указанному пути.
Зачем это нужно:
Таким образом, вы сможете загрузить PDF-файл без каких-либо лишних элементов интерфейса Google Chrome, как это и требуется. Код запускает загрузку PDF напрямую, минуя любые интерфейсные аспекты, которые возникают при использовании методов, связанных с рендерингом страниц.
Теперь, запустив этот код, вы получите чистый PDF-файл без отображения панели инструментов.