Python Selenium使用代理时Firefox卡住不跳转、代理IP不生效问题
问题核心原因
你代码中存在一处明显的逻辑错误:
driver = webdriver.Firefox(capabilities=firefox_capabilities) driver = webdriver.Firefox()
第一行你创建了带代理配置的火狐驱动实例,第二行你又重新创建了一个不带任何配置的全新火狐驱动实例,直接覆盖了之前带配置的driver变量。最终执行get请求的驱动没有任何代理配置,同时第一次启动的带配置的火狐实例未被正常接管,程序一直等待连接响应,你手动终止后就触发了socket接收超时的报错。
修复方案
1. 基础修复
直接删除重复的实例化代码driver = webdriver.Firefox()即可,修改后代码如下:
from selenium import webdriver firefox_capabilities = webdriver.DesiredCapabilities.FIREFOX firefox_capabilities["marionette"] = True PROXY = "40.91.94.165:3128" firefox_capabilities["proxy"] = { "proxyType": "MANUAL", "httpProxy": PROXY, "ftpProxy": PROXY, "sslProxy": PROXY, # 可选配置:不需要走代理的地址 "noProxy": "localhost,127.0.0.1" } # 仅实例化一次带配置的驱动 driver = webdriver.Firefox(capabilities=firefox_capabilities) driver.get("https://wtfismyip.com")
2. 高版本Selenium兼容方案
如果你使用的是Selenium 4.x版本,DesiredCapabilities配置方式已被弃用,更推荐使用Options配置代理:
from selenium import webdriver from selenium.webdriver.firefox.options import Options PROXY = "40.91.94.165:3128" proxy_host, proxy_port = PROXY.split(":") proxy_port = int(proxy_port) options = Options() options.set_preference("network.proxy.type", 1) options.set_preference("network.proxy.http", proxy_host) options.set_preference("network.proxy.http_port", proxy_port) options.set_preference("network.proxy.ssl", proxy_host) options.set_preference("network.proxy.ssl_port", proxy_port) options.set_preference("network.proxy.ftp", proxy_host) options.set_preference("network.proxy.ftp_port", proxy_port) options.set_preference("network.proxy.no_proxies_on", "localhost,127.0.0.1") driver = webdriver.Firefox(options=options) driver.get("https://wtfismyip.com")
额外排查项
如果修改代码后代理仍然不生效,可按以下顺序排查:
- 先验证代理本身可用性:在本地火狐浏览器手动配置该代理,访问IP查询站点,确认代理可正常连接、IP正确,排除代理失效、端口不通的问题
- 检查版本匹配:确保geckodriver版本和本地安装的火狐浏览器版本对应,Selenium 3.x及以上版本必须配套使用geckodriver
- 若代理需要身份认证,需额外配置火狐的代理认证规则,修改对应配置项
内容的提问来源于stack exchange,提问作者swaziland
相关产品推荐
相关产品推荐

