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

Selenium使用带认证代理时add_to_capabilities报错解决方案咨询

解决Selenium中带用户名密码的代理配置问题

问题背景

之前长期使用的Selenium代理配置代码报错,提示AttributeError: 'Proxy' object has no attribute 'add_to_capabilities',且代理为带用户名密码的认证类型,无法直接通过--proxy-server参数配置。

报错信息

(selenium) C:\DEVNEU\Python-Diverses\Selenium>python test.py
Checking Browser driver...
Traceback (most recent call last):
  File "C:\DEVNEU\Python-Diverses\Selenium\test.py", line 25, in <module>
    prox.add_to_capabilities(capabilities)
    ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'Proxy' object has no attribute 'add_to_capabilities'. Did you mean: 'to_capabilities'?

解决方案

1. 修复代理配置方法报错

Selenium版本更新后,Proxy对象的add_to_capabilities()方法已被移除,需改用to_capabilities()方法生成配置并更新到capabilities中。

2. 配置带用户名密码的认证代理

Chrome不再支持直接在代理URL中嵌入用户名密码(如http://user:pass@host:port),可通过Chrome DevTools协议(CDP)注入认证凭证,无需额外依赖库。

完整示例代码

import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.support.ui import WebDriverWait

print(f"Checking Browser driver...")
os.environ['WDM_LOG'] = '0'
options = Options()
options.add_argument("start-maximized")
options.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 1})
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('excludeSwitches', ['enable-logging'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
srv = Service()

# 代理信息
HOSTNAME = "196.247.168.34"
PORT = "12345"
PROXY_USER = "your_proxy_username"  # 替换为实际代理用户名
PROXY_PASS = "your_proxy_password"  # 替换为实际代理密码

# 配置代理基础信息
prox = Proxy()
prox.proxy_type = ProxyType.MANUAL
prox.http_proxy = prox.ssl_proxy = f"{HOSTNAME}:{PORT}"
capabilities = webdriver.DesiredCapabilities.CHROME
# 替换原add_to_capabilities方法
capabilities.update(prox.to_capabilities())

driver = webdriver.Chrome(service=srv, options=options, desired_capabilities=capabilities)
waitWD = WebDriverWait(driver, 5)

# 通过CDP配置代理认证
driver.execute_cdp_cmd('Network.enable', {})
driver.execute_cdp_cmd('Network.setAuthCredentials', {
    'origin': f'http://{HOSTNAME}:{PORT}',
    'username': PROXY_USER,
    'password': PROXY_PASS
})

driver.get("https://whatismyipaddress.com/")
input("Press!")
driver.quit()

备选方案(监听认证请求)

如果上述方法无效,可通过监听Network.authRequired事件来动态响应认证请求:

# 在driver启动后添加以下代码
def handle_auth(event):
    if event['params']['type'] == 'proxy':
        driver.execute_cdp_cmd('Network.continueWithAuth', {
            'requestId': event['params']['requestId'],
            'authChallengeResponse': {
                'response': 'ProvideCredentials',
                'username': PROXY_USER,
                'password': PROXY_PASS
            }
        })

driver.add_event_listener('Network.authRequired', handle_auth)
driver.execute_cdp_cmd('Network.enable', {})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:57:40