You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Puppeteer解析器下载的文件存入JS Buffer并在代码中使用

用Puppeteer将下载文件存入Buffer并使用

要把下载的文件存入JS Buffer,你需要拦截页面的下载请求,直接获取响应的二进制数据,而非让浏览器自动保存到本地。下面是修改后的代码和操作说明:

修改后的完整代码

(async () => {
  const puppeteer = require('puppeteer');
  const browser = await puppeteer.launch({
    headless: false,
    defaultViewport: false,
    args: ['--start-maximized']
  });
  const page = await browser.newPage();
  await page.setViewport({ width: 1920, height: 1080 });

  // 初始化Buffer变量,用于存储文件数据
  let fileBuffer = null;
  // 开启请求拦截
  await page.setRequestInterception(true);
  
  page.on('request', (request) => {
    // 放行非下载类请求,可根据实际文件后缀调整判断条件
    if (!request.url().match(/\.(pdf|xlsx|docx|zip)$/)) {
      request.continue();
      return;
    }
    // 处理下载请求,直接获取响应体
    request.continue().then(async (response) => {
      if (response.ok()) {
        // 将响应二进制数据转为Buffer
        fileBuffer = await response.buffer();
        console.log('文件已成功存入Buffer');
      }
    });
  });

  // 执行登录及下载操作
  await page.goto('你的目标网址');
  await page.type('#username', '你的用户名');
  await page.type('#password', '你的密码');
  await page.click('#loginbtn');
  await page.click('.aalink.stretched-link');

  // 等待Buffer获取完成(可根据文件大小调整等待时长,或用更精准的监听逻辑)
  await new Promise(resolve => setTimeout(resolve, 3000));
  
  // 使用Buffer进行后续操作
  if (fileBuffer) {
    // 示例1:将Buffer写入本地文件
    const fs = require('fs');
    fs.writeFileSync('下载文件.pdf', fileBuffer);
    
    // 示例2:文本类文件(如csv/txt)转为字符串解析
    // const textContent = fileBuffer.toString('utf-8');
    // console.log(textContent);
    
    // 示例3:包装为Blob上传到服务器
    // const formData = new FormData();
    // formData.append('file', new Blob([fileBuffer]), '自定义文件名.pdf');
    // await fetch('后端上传接口', { method: 'POST', body: formData });
  }

  await browser.close();
})();

核心逻辑说明

  • 请求拦截:通过page.setRequestInterception(true)开启拦截,根据URL后缀识别下载请求,跳过普通页面资源请求。
  • Buffer获取:调用response.buffer()直接提取响应的二进制数据,转为JS原生Buffer对象。
  • Buffer的典型用法:
    • 写入本地文件:借助fs模块将Buffer写入磁盘。
    • 文本解析:对文本格式文件,用toString()转为字符串后处理内容。
    • 网络上传:将Buffer包装成Blob,通过FormData提交到后端接口。

注意事项

  • 需根据实际下载文件的后缀,调整请求拦截的判断规则。
  • 等待Buffer获取的时长可根据文件大小、网络速度灵活调整,也可以用waitForFunction监听fileBuffer是否非空,替代固定时长等待,提升可靠性。

内容的提问来源于stack exchange,提问作者Rudee Sayuki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:22:38