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
相关产品推荐
相关产品推荐

