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

Playwright跳转PDF链接时goto函数报net::ERR_ABORTED错误如何处理

Playwright访问报错原因及PDF获取方案

报错核心原因

  • 目标链接为PDF直下链接,默认配置下page.goto期望完成HTML页面导航,遇到下载类响应时会主动中断导航,抛出net::ERR_ABORTED属于该场景下的正常触发错误。
  • 若会话凭证(Cookie、身份校验头)未完整注入到Playwright的浏览器上下文,服务端会主动拒绝请求导致连接中断。

可行解决方案

方案1:监听下载事件获取PDF

无需处理page.goto的中断报错,提前监听下载事件即可捕获返回的PDF文件:

// 先注册下载监听,再触发访问
const downloadTask = page.waitForEvent('download');
// 忽略goto抛出的ABORTED错误
await page.goto('https://nfse.blumenau.sc.gov.br/contrib/app/nfse/rel/rp_nfse_v23.aspx?s=61154301&e=00165960000101&f=2BED3D1E8', {
  waitUntil: 'commit',
  failOnStatusCode: false
}).catch(() => {});
const downloadResult = await downloadTask;
// 转换为Buffer
const pdfBuffer = await downloadResult.createReadStream().then(stream => {
  const chunks = [];
  return new Promise((resolve, reject) => {
    stream.on('data', chunk => chunks.push(chunk));
    stream.on('end', () => resolve(Buffer.concat(chunks)));
    stream.on('error', reject);
  });
});

方案2:直接发起API请求(效率更高)

如果你已经持有有效会话,可直接从浏览器上下文导出凭证发起HTTP请求,无需走页面导航:

// 提取当前上下文下目标站点的有效Cookie
const siteCookies = await page.context().cookies(['https://nfse.blumenau.sc.gov.br']);
const cookieHeader = siteCookies.map(item => `${item.name}=${item.value}`).join('; ');
// 发起请求获取PDF
const response = await fetch('https://nfse.blumenau.sc.gov.br/contrib/app/nfse/rel/rp_nfse_v23.aspx?s=61154301&e=00165960000101&f=2BED3D1E8', {
  headers: {
    'Cookie': cookieHeader,
    'User-Agent': await page.evaluate(() => navigator.userAgent)
  }
});
const pdfBuffer = Buffer.from(await response.arrayBuffer());

注意事项

  • 确保注入的会话凭证对应域名、路径正确,无过期或遗漏参数。
  • 若访问超时可适当延长page.goto或请求的timeout配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:57:03