如何为selenium.webdriver.Remote配置代理?出现SessionNotCreatedException如何解决
问题原因
- Selenium版本兼容问题:Selenium 3.141+尤其是Selenium 4以后,直接修改全局
DesiredCapabilities.FIREFOX的写法已经被废弃,远端Grid节点识别参数时会出现异常,导致会话创建失败。 - 代理参数配置错误:
noProxy字段不能设为None,Firefox无法解析该值,应该传入空字符串或者不需要走代理的域名/IP列表;同时proxyType推荐使用官方枚举类ProxyType.MANUAL而不是手动写字符串,避免不同版本的参数映射异常。 - 代理可用性问题:如果你的代理需要用户名密码认证,当前的配置方式完全不生效,Firefox不支持直接在代理地址中携带认证信息,没有配置对应认证规则的情况下会触发会话创建失败。
- 节点版本不匹配:本地Selenium版本、远端Grid节点的geckodriver版本、Firefox浏览器版本三者存在兼容冲突时,哪怕代理配置正确也会抛出该异常。
修正后的代码示例
from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.common.proxy import Proxy, ProxyType proxy_addr = '***.***.***.***:****' # 配置代理 proxy = Proxy() proxy.proxy_type = ProxyType.MANUAL proxy.http_proxy = proxy_addr proxy.ssl_proxy = proxy_addr proxy.ftp_proxy = proxy_addr proxy.no_proxy = '' # 配置Firefox参数 options = Options() options.add_argument("--disable-gpu") # 将代理配置添加到options中 proxy.add_to_options(options) # 初始化Remote驱动 driver = webdriver.Remote( command_executor='http://***.***.***.***:****/wd/hub', options=options )
补充排查步骤
如果修改后还是报错,按以下顺序排查:
- 先去掉代理配置,直接启动Remote驱动,确认是否能正常创建会话,排除版本不兼容、节点不可用的问题
- 确认代理地址可以正常访问,没有IP白名单限制,不需要认证(如果需要认证要额外配置Firefox的偏好设置写入用户名密码,或者使用代理客户端做本地转发去掉认证)
- 查看远端Grid节点的运行日志,定位具体的会话创建失败原因,日志里会给出比本地更详细的报错信息。
内容的提问来源于stack exchange,提问作者JPN
相关产品推荐
相关产品推荐

