在Selenium中配置代理遇ERR_NO_SUPPORTED_PROXIES错误求助
解决Selenium Chrome代理认证的ERR_NO_SUPPORTED_PROXIES问题
你遇到的问题是Chrome不支持直接在--proxy-server参数里嵌入用户名和密码,虽然curl可以这么用,但Chrome的命令行参数对这种格式的处理有限制,尤其是当用户名包含特殊字符(比如你的username-cc-DE里的-)时更容易触发这个错误。
下面是两种可行的解决办法:
方法一:用Chrome扩展自动完成代理认证
创建一个简单的Chrome扩展,在页面加载时自动注入代理认证信息:
创建扩展文件结构:
manifest.jsonbackground.js
编写
manifest.json:
{ "manifest_version": 3, "name": "Proxy Auth AutoFill", "version": "1.0", "permissions": ["proxy", "tabs", "storage", "webRequest", "webRequestAuthProvider"], "background": { "service_worker": "background.js" }, "host_permissions": ["<all_urls>"] }
- 编写
background.js:
const proxyUsername = 'username-cc-DE'; const proxyPassword = 'password'; chrome.webRequest.onAuthRequired.addListener( (details, callbackFn) => { callbackFn({ authCredentials: { username: proxyUsername, password: proxyPassword } }); }, { urls: ['<all_urls>'] }, ['blocking'] );
- 在Selenium中加载这个扩展:
修改你的代码,添加加载扩展的参数:
const chromeOptions = new Options(); // 设置代理(不带用户名密码) chromeOptions.addArguments(`--proxy-server=http://someurl:30001`); // 加载本地扩展(替换为你的扩展文件夹路径) chromeOptions.addArguments(`--load-extension=/path/to/your/proxy-extension-folder`); const driver = new webdriver.Builder() .withCapabilities(webdriver.Capabilities.chrome()) .setChromeOptions(chromeOptions) .build(); await driver.get("https://google.com");
方法二:使用Chrome DevTools Protocol (CDP) 设置代理认证
通过CDP直接向Chrome发送认证指令,这种方法不需要创建扩展:
const chromeOptions = new Options(); chromeOptions.addArguments(`--proxy-server=http://someurl:30001`); const driver = new webdriver.Builder() .withCapabilities(webdriver.Capabilities.chrome()) .setChromeOptions(chromeOptions) .build(); // 通过CDP设置代理认证 await driver.executeCdpCommand('Network.enable', {}); await driver.executeCdpCommand('Network.setExtraHTTPHeaders', { headers: { 'Proxy-Authorization': 'Basic ' + Buffer.from('username-cc-DE:password').toString('base64') } }); await driver.get("https://google.com");
注意:如果你的代理需要针对HTTPS请求认证,CDP的方法可能需要额外处理,而扩展方法的兼容性更好,适合大多数场景。
内容的提问来源于stack exchange,提问作者user567
相关产品推荐
相关产品推荐

