javascript - Puppeteer - 如何获取当前页面(应用程序/pdf)作为缓冲区或文件?

标签 javascript node.js pdf buffer puppeteer

使用 Puppeteer ( https://github.com/GoogleChrome/puppeteer ),我有一个application/pdf页面。使用 headless: false 时,页面是通过 Chromium PDF 查看器加载的,但我想使用 headless。如何下载原始 .pdf 文件或将其用作其他库的 blob,例如 (pdf-parse https://www.npmjs.com/package/pdf-parse )?

最佳答案

由于 Puppeteer 目前不支持通过 page.goto() 在 headless 模式下导航到 PDF 文档由于upstream issue ,您可以使用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();
})();

关于javascript - Puppeteer - 如何获取当前页面(应用程序/pdf)作为缓冲区或文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53487375/

相关文章:

javascript - 在 Chrome 的 Inspect Element 中检查 DIV 后面的 JavaScript

Javascript RegExp 替换为负前瞻

javascript - 创建多个<audio>元素以防止剪切

php - 在同一个 vps 上运行 node、PHP 和 Python

javascript - 如何为每个 API 创建通用的 Nest JS API 响应格式?

excel - 在网站上集成 pdf excel 单词查看器

javascript - jspdf 正在生成损坏的 pdf

javascript - 如何显示当前时间的最后五个小时时间(hh :mm ) 12 hour format in high charts?

node.js - 如何在stripe中确认支付成功

cocoa - 在 Cocoa 应用程序中显示硬盘上所有 PDF 文件的列表