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

如何动态修改Selenium WebDriver代理IP?可否借助JS插件实现?

Selenium WebDriver 代理IP动态修改实现方案

原有代码失效原因

你使用的JS代码调用的是火狐旧版XPCOM特权接口,仅支持在火狐扩展的特权上下文运行,直接通过Selenium的execute_script方法注入没有调用权限,因此完全不会生效。

正确实现方案

根据使用场景分为两类实现方式:

场景1:浏览器启动时设置静态代理

无需运行中修改代理的场景下,直接通过启动参数/配置文件设置即可,兼容性最好。

Chrome/Edge 实现

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

proxy_host = "替换为你的代理IP"
proxy_port = 替换为你的代理端口

# 方式1:通过Proxy类统一配置
proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = f"{proxy_host}:{proxy_port}"
proxy.ssl_proxy = f"{proxy_host}:{proxy_port}"
proxy.ftp_proxy = f"{proxy_host}:{proxy_port}"

options = webdriver.ChromeOptions()
options.proxy = proxy
driver = webdriver.Chrome(options=options)

# 方式2:直接传入启动参数
options = webdriver.ChromeOptions()
options.add_argument(f"--proxy-server=http://{proxy_host}:{proxy_port}")
driver = webdriver.Chrome(options=options)

Firefox 实现

from selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "替换为你的代理IP")
profile.set_preference("network.proxy.http_port", 替换为你的代理端口)
profile.set_preference("network.proxy.ssl", "替换为你的代理IP")
profile.set_preference("network.proxy.ssl_port", 替换为你的代理端口)
profile.update_preferences()

driver = webdriver.Firefox(firefox_profile=profile)

场景2:浏览器运行中动态切换代理(无需重启)

需要不重启浏览器更换代理的场景,Selenium 4+ 可通过CDP(Chrome DevTools Protocol)实现,无需额外安装插件。

Chrome/Edge 实现

def update_chrome_proxy(driver, proxy_host, proxy_port, bypass_list="localhost,127.0.0.1"):
    # 调用CDP接口设置代理规则
    driver.execute_cdp_cmd("Network.setProxy", {
        "proxyRules": f"http={proxy_host}:{proxy_port};https={proxy_host}:{proxy_port};ftp={proxy_host}:{proxy_port}",
        "proxyBypassList": bypass_list
    })
    # 清空cookie并刷新页面使新代理生效
    driver.delete_all_cookies()
    driver.refresh()

# 调用示例
update_chrome_proxy(driver, "192.168.1.1", 8080)

Firefox 实现

新版Firefox同样支持CDP协议,开启远程调试配置后即可使用上述相同的execute_cdp_cmd方法调用,仅需要在启动时额外添加配置:

options = webdriver.FirefoxOptions()
options.set_preference("moz:debuggerAddress", True)
driver = webdriver.Firefox(options=options)

注意事项

  • 如果代理需要账号密码认证,Chrome/Edge无法直接通过命令行或CDP传入,需要额外打包一个小型扩展处理代理认证弹窗
  • Selenium 3及以下版本不支持原生CDP调用,建议升级到Selenium 4+使用动态代理切换功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:10