news 2026/9/9 21:17:52

Puppeteer 访问 HTTP 页面报 net::ERR_BLOCKED_BY_CLIENT 怎么解决

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Puppeteer 访问 HTTP 页面报 net::ERR_BLOCKED_BY_CLIENT 怎么解决

Puppeteer 访问 HTTP 页面报 net::ERR_BLOCKED_BY_CLIENT 怎么解决

【免费下载链接】puppeteerJavaScript API for Chrome and Firefox项目地址: https://gitcode.com/GitHub_Trending/puppeteer1/puppeteer

用 Puppeteer 驱动的 Chrome 执行page.goto('http://...')访问一个远程 HTTP 站点时,导航会抛出net::ERR_BLOCKED_BY_CLIENT,而不是正常加载页面。这不是网络故障,也不是 Puppeteer 的 bug:Puppeteer 默认下载的 Chrome for Testing 构建中启用了 Chrome 的HttpsFirstBalancedModeAutoEnable特性,它会对访问 HTTP 站点的导航显示警告页,并让这次导航请求以net::ERR_BLOCKED_BY_CLIENT报错结束(该错误可以被捕获并从警告页恢复)。本地 HTTP 主机不会触发警告,远程主机才可能触发,所以同一个脚本在访问localhost时正常、访问线上 HTTP 地址时报错,是文档明确描述的典型现象。

适用条件

先确认你的环境命中以下条件,这个错误才可能由该特性引起:

  • 浏览器是 Puppeteer 默认下载的Chrome for Testing(docs/supported-browsers.md:Puppeteer 自 v20.0.0 起下载并使用 Chrome for Testing,此前版本下载的是 Chromium)。
  • 导航目标是HTTP(非 HTTPS)的远程地址。访问本地 HTTP 主机不会触发该警告。
  • 使用channel指定系统安装的普通 Chrome、或用executablePath指定其他浏览器时,是否命中取决于对应 Chrome 是否启用了该特性,需要按实际版本确认。

可以用browser.version()确认当前浏览器。文档给出的返回格式示例为"Chrome/61.0.3153.0""HeadlessChrome/61.0.3153.0"(文档示例,实际版本号以运行时输出为准),据此可以对照 支持浏览器版本表 判断当前 Puppeteer 版本对应的 Chrome 构建。

方案一:启动参数禁用该特性(推荐)

官方 troubleshooting 文档 给出的做法是在puppeteer.launch()args选项中传入--disable-features=HttpsFirstBalancedModeAutoEnable

const browser = await puppeteer.launch({ args: ['--disable-features=HttpsFirstBalancedModeAutoEnable'], });

args是 LaunchOptions 中「Additional command line arguments to pass to the browser instance」的选项,即附加传给浏览器进程(此处为 Chrome)的命令行参数。这个参数会在启动时关闭HttpsFirstBalancedModeAutoEnable特性,之后page.goto('http://...')会按常规导航流程执行,不会再抛出net::ERR_BLOCKED_BY_CLIENT

方案二:捕获错误并点击警告页按钮

troubleshooting 文档同时说明该错误 "can be caught and recovered from":发生错误时 Chrome 会显示一个带「继续导航」按钮的警告页,这个按钮可以通过 Puppeteer 点击。因此也可以在脚本中捕获page.goto()抛出的错误,再点击警告页上的按钮完成导航。适合不方便改启动参数、或希望保留该特性行为的场景;具体选择器需要针对当前 Chrome 版本的警告页实现自行确认,文档只说明了按钮可被 Puppeteer 点击,未给出选择器示例。

验证方式

  • 使用方案一后,重新运行访问 HTTP 页面的脚本:page.goto('http://...')正常解析、不再抛出net::ERR_BLOCKED_BY_CLIENT,页面按预期加载。
  • 如果仍报错,先确认两点:目标是否为远程 HTTP 主机(本地主机本就不应触发);启动代码中是否真的带上了--disable-features=HttpsFirstBalancedModeAutoEnable参数,且浏览器为 Puppeteer 默认下载的 Chrome for Testing。
  • 其他错误码(如net::ERR_FAILED)属于不同的导航失败原因,参见 Frame.goto() 的异常说明,不要归因到本特性。

边界与后续

  • 该问题只与「Chrome for Testing + HTTP 远程导航」组合相关,与代理配置、CSP、请求拦截无关,不要把net::ERR_BLOCKED_BY_CLIENT与代理/拦截类问题混同排查。
  • 关于该特性的上游背景,troubleshooting 文档指向了 Chrome 的 bug 跟踪编号 378022921(外部链接,按官方原文保留);如需跟踪特性变化,以 Chrome 官方渠道为准。
  • 完整的浏览器与 Puppeteer 版本对照见 支持浏览器列表,可用于确认当前版本默认下载的是哪个 Chrome for Testing 构建。

【免费下载链接】puppeteerJavaScript API for Chrome and Firefox项目地址: https://gitcode.com/GitHub_Trending/puppeteer1/puppeteer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 21:17:25

编译原理课设指南:手写词法/语法分析器与解释器

简介:面向编译原理课程设计的高校学生,这份资源整合了完整的实验代码与报告,覆盖词法分析、LL(1)语法分析、LR(0)/SLR(1)语法分析、四元式生成及汇编代码生成等核心环节,适合作为课程设计或期末项目的参考蓝本。资源包共14个文件&…

作者头像 李华
网站建设 2026/9/9 21:16:58

如何在 Linux 上安装 AppFlowy 构建依赖并从源码首次构建应用

如何在 Linux 上安装 AppFlowy 构建依赖并从源码首次构建应用 【免费下载链接】AppFlowy Bring projects, wikis, and teams together with AI. AppFlowy is the AI collaborative workspace where you achieve more without losing control of your data. The leading open so…

作者头像 李华
网站建设 2026/9/9 21:16:33

VB.NET实现桌面应用自动更新:版本校验、下载替换与回滚

简介:这套基于VB.NET实现的软件自动更新程序,面向桌面应用开发者,解决客户端版本分发与升级维护难题。资源完整包含自动更新客户端、Web服务端及配置文件,覆盖从版本检查、更新包下载到本地替换安装的核心流程。压缩包共40个文件&…

作者头像 李华
网站建设 2026/9/9 21:16:28

ardupilot.7z 在 Linux 下的解压、校验与加密分发

简介:ArduPilot 开源飞控源码的预打包压缩包,面向在 Ubuntu 下开展无人机、机器人与航模开发的研究者和开发者,专门解决从 GitHub 克隆源码缓慢、环境准备耗时的问题,适用于二次开发、学习研究与仿真调试等场景。压缩包整体约 200…

作者头像 李华