Puppeteer 是用于浏览器自动化的强大 Node.js 库,用户在使用 Puppeteer 时,可能会在尝试配置代理设置时遇到各种错误。其中一个比较特殊的错误是 Er_noo_supported_proxies
尤其是在使用 socks5h 协议时。本博客旨在分析该错误,解释其原因,并提供解决问题的方法。
什么是 Puppeteer?
木偶师 被广泛用于浏览器自动化、网络搜索和网络应用程序测试。它提供了一个无头版本的 Chrome 浏览器(或 Chromium),允许用户在浏览器环境中使用 JavaScript 编写操作脚本。它的主要功能之一包括配置网络设置(包括代理),这使它成为那些希望在代理后自动执行搜刮任务的用户的首选。
什么是 SOCKS5 和 SOCKS5H?
在深入研究错误之前,了解 SOCKS5 和 SOCKS5H 之间的区别非常重要:
- SOCKS5 是一种多功能代理协议,可通过 TCP 连接传输数据。它支持多种应用,包括浏览、电子邮件和 P2P 传输。
- SOCKS5H (SOCKS5 with hostname resolution)扩展了 SOCKS5,在代理服务器上而不是本地机器上解析 DNS 查询。这一新增的隐私层可确保 DNS 请求不会泄漏,因此,socks5h 成为某些有安全意识的用户的首选。
为什么会出现 ERR_NO_SUPPORTED_PROXIES 错误?
当 Puppeteer 无法正确配置和连接指定的代理时,会出现 ERR_NO_SUPPORTED_PROXIES 错误。当用户尝试使用 Puppeteer 的 socks5h 协议时,经常会发生这种情况。
导致这一错误的因素有几个:
不支持的代理协议:Puppeteer 本机支持某些类型的代理,但对其他代理(如 socks5h)可能有问题。如果不支持代理协议,Puppeteer 将抛出 ERR_NO_SUPPORTED_PROXIES 错误。
错误配置的代理设置:代理配置设置不正确或提供无效的代理 URL 可能会导致此错误。
DNS 解析冲突:由于 socks5h 在代理服务器上解析 DNS 查询,因此 DNS 解析或代理服务器本身的任何问题都可能引发错误。
过时的 "傀儡廻 "版本:旧版本的 Puppeteer 可能不完全支持高级代理配置,包括 SOCKS5 或 SOCKS5H。
如何修复 Puppeteer 中的 "ERR_NO_SUPPORTED_PROXIES
以下是如何排除和解决此错误的分步指南:
步骤 1.验证代理协议支持
虽然 socks5h 提供 DNS 泄露保护,但 Puppeteer 本身并不支持 socks5h 协议,但它支持 socks5。 你可以先查看 Puppeteer 文档,了解代理支持情况。在大多数情况下,切换到 SOCKS5 可以解决 "puppeteer""err_no_supported_proxies""socks5h "的问题。下面是一个如何使用 SOCKS5 代理设置 Puppeteer 的示例:
const browser = await puppeteer.launch({
args: ['--proxy-server=socks5://'proxy-host':'proxy-port'']; }.
});
如果你的项目由于 DNS 解析问题而需要使用 socks5h,你可以考虑使用代理管理插件(下一步将解释)。
步骤 2.将 Puppeteer 升级到最新版本
确保你使用的 Puppeteer 版本是最新的。新版本通常会引入修正和新功能,包括改进代理支持。更新 Puppeteer:
npm install puppeteer@latest
步骤 3.使用带有代理插件的 Puppeteer Extra
如果您的项目必须使用 socks5h,请考虑使用 puppeteer-extra-plugin-proxy 插件。该插件扩展了 Puppeteer 的代理功能,支持更高级的代理配置,包括 socks5h。
npm install puppeteer-extra puppeteer-extra-plugin-proxy
然后,在你的 Puppeteer 脚本中
const puppeteer = require('puppeteer-extra');
const pluginProxy = require('puppeteer-extra-plugin-proxy');
puppeteer.use(pluginProxy({
proxyUrl:'socks5h://'proxy-host':'proxy-port'
}));
puppeteer.launch().then(async browser => {
const page = await browser.newPage();
await page.goto('https://example.com');
await browser.close();
});
这种设置允许 Puppeteer 使用 socks5h 协议,同时绕过 ERR_NO_SUPPORTED_PROXIES。
步骤 4.检查代理服务器设置
最后,必须验证代理服务器设置的正确性。确保代理服务器支持 socks5h,并且没有可能阻止 Puppeteer 连接的限制。
第 5 步选择支持 DNS 解析的代理服务器
在使用 Puppeteer 和代理服务器时,代理服务器提供商的选择对避免 ERR_NO_SUPPORTED_PROXIES 等错误至关重要。如果对 socks5h 没有严格要求,但需要防止 DNS 泄露,那么可以考虑使用能安全处理 DNS 解析的高质量代理服务。为此,OkeyProxy 提供了强大的代理解决方案,可处理 SOCKS5 协议,是 Puppeteer 项目的理想选择。
与 OkeyProxy用户可从中受益:
- 高速稳定:可靠的代理连接可确保网络搜索或自动化任务顺利进行,不会出现中断。
- 支持 SOCKS5:OkeyProxy 完全支持 SOCKS5 协议,使其与 Puppeteer 配置完美契合。
- 全球覆盖:OkeyProxy 拥有遍布全球的庞大代理服务器网络,无论身处何地,都能确保最佳性能。
对于那些寻求性能、隐私和兼容性平衡的用户来说,OkeyProxy 是将代理与 Puppeteer 集成的顶级选择。DNS 解析和高级代理选项的附加优势可确保安全、匿名的网页浏览或自动化。
注册 和 联系 OkeyProxy 团队 获得 1GB 免费试用!
结论
Puppeteer 中的 ERR_NO_SUPPORTED_PROXIES 错误通常源于使用了不支持的代理协议(如 socks5h)。通过验证代理设置,将 Puppeteer 更新到最新版本,或使用 puppeteer-extra-plugin-proxy 等插件,可以有效解决这一问题。此外,选择像 OkeyProxy 这样可靠的代理提供商,可以确保使用 Puppeteer 的浏览器自动化工作流程顺畅安全。
掌握这些故障排除技巧,Puppeteer 用户就能绕过与代理相关的错误,在自动化项目中取得成功。