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

使用Puppeteer下载需Cookie验证的PDF报错,寻求解决方案

Puppeteer导入Cookie下载PDF时出现net::ERR_ABORTED错误的解决方法

我需要使用Puppeteer从需导入Cookie才能访问的网站下载PDF文件,已尝试以下代码:

const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('http://www.africau.edu/images/default/sample.pdf');
  await page.setCookie({
    "domain": "africau.edu",
    "hostOnly": false,
    "httpOnly": false,
    "name": "test",
    "path": "/",
    "sameSite": "unspecified",
    "secure": false,
    "session": true,
    "value": "testvalue",
    "id": 1
});
  await page.pdf({ path: 'sample.pdf', format: 'A4' });

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

但运行时出现如下错误:

C:\Users\Khaniini\project\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:194
                    ? new Error(`${response.errorText} at ${url}`)
                      ^

Error: net::ERR_ABORTED at http://www.africau.edu/images/default/sample.pdf
    at navigate (C:\Users\Khaniini\project\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:194:23)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async FrameManager.navigateFrame (C:\Users\Khaniini\project\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:170:21)
    at async Frame.goto (C:\Users\Khaniini\project\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:589:16)
    at async Page.goto (C:\Users\Khaniini\project\node_modules\puppeteer\lib\cjs\puppeteer\common\Page.js:1089:16)
    at async C:\Users\Khaniini\project\index.js:15:3

问题原因与解决步骤

1. 错误核心原因

  • Cookie设置时机错误:先调用page.goto再设置Cookie,此时请求已发送,Cookie未被携带,导致请求因权限问题被中止。
  • PDF链接直接下载:访问PDF链接时,服务器可能直接返回下载响应而非渲染页面,page.goto无法完成导航流程,抛出ERR_ABORTED错误。
  • Cookie参数无效:Cookie对象中的id字段是Puppeteer不支持的参数,可能导致Cookie设置失败。

2. 修正后的代码示例

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

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // 先设置Cookie,确保后续请求携带认证信息
  await page.setCookie({
    "domain": "africau.edu",
    "hostOnly": false,
    "httpOnly": false,
    "name": "test",
    "path": "/",
    "sameSite": "unspecified",
    "secure": false,
    "session": true,
    "value": "testvalue"
    // 移除无效的id字段
  });

  try {
    // 尝试正常导航并生成PDF(适用于PDF可被页面渲染的场景)
    await page.goto('http://www.africau.edu/images/default/sample.pdf', {
      waitUntil: 'networkidle0',
      timeout: 60000
    });
    await page.pdf({ path: 'sample.pdf', format: 'A4' });
  } catch (error) {
    // 若导航失败(直接下载场景),改用获取响应内容并写入文件
    const response = await page.goto('http://www.africau.edu/images/default/sample.pdf', {
      responseType: 'arraybuffer'
    });
    const pdfBuffer = await response.buffer();
    fs.writeFileSync('sample.pdf', pdfBuffer);
  }

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

3. 关键优化点

  • 调整Cookie设置顺序:先调用page.setCookie再发起请求,确保Cookie被正确携带。
  • 移除无效参数:删除Cookie对象中的id字段,避免设置失败。
  • 兼容两种场景:同时处理PDF可渲染和直接下载的情况,提升代码健壮性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:24:18