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

如何使用Python动态修改Selenium Chrome的IP地址(无需重启浏览器实例)

Dynamic Proxy/IP Change for Chrome Selenium Without Restarting the Instance

Great question—this is a super common pain point when you need to preserve your scraper's progress while switching IPs. The good news is Chrome supports dynamic proxy configuration via its DevTools Protocol (CDP)—this lets you swap out proxies without restarting the browser or losing your current session.

Here's a practical, step-by-step breakdown with code examples:

1. Core Solution: Use Chrome DevTools Protocol (CDP)

Chrome's CDP lets you send runtime commands to the browser, including updating proxy settings on the fly. This works for both non-authenticated and password-protected proxies, and keeps your existing tabs, cookies, and scraper state intact.

Example Code (Python)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# Initialize your Chrome driver as usual (keep this instance running)
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
# Add anti-detection flags if needed (optional but recommended for scrapers)
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=chrome_options)

# Function to update proxy dynamically
def update_chrome_proxy(driver, proxy_url):
    # Format options: 
    # - Non-authenticated: "http://proxy_ip:port" or "socks5://proxy_ip:port"
    # - Authenticated: "http://username:password@proxy_ip:port"
    proxy_config = {
        "proxy": {
            "httpProxy": proxy_url,
            "httpsProxy": proxy_url,
            "socksProxy": proxy_url,
            "noProxy": ""  # Add comma-separated domains to bypass proxy if needed
        },
        "mode": "fixed_servers"
    }
    # Send CDP command to apply the new proxy
    driver.execute_cdp_cmd("Network.setProxy", proxy_config)
    # Flush cache and enable network to ensure changes take effect
    driver.execute_cdp_cmd("Network.enable", {})
    driver.execute_cdp_cmd("Network.clearBrowserCache", {})

# Usage: Swap to a new proxy mid-scrape
update_chrome_proxy(driver, "http://192.168.1.100:8080")  # Non-authenticated proxy
# Or for password-protected proxies:
# update_chrome_proxy(driver, "http://my_proxy_user:my_pass@192.168.1.100:8080")

# Verify the proxy is working (optional)
driver.get("http://icanhazip.com")
print("Current IP:", driver.find_element("tag name", "body").text)

Key Details:

  • Proxy Type Support: Works with HTTP, HTTPS, SOCKS4, and SOCKS5 proxies—just adjust the URL scheme (e.g., socks5://proxy_ip:port).
  • Session Preservation: All your active tabs, filled forms, and saved cookies stay intact since we're modifying the running browser instance directly.
  • Authentication Handling: CDP natively supports authenticated proxies—no extra workarounds needed, just include the credentials in the proxy URL.

2. Why Firefox Methods Fail for Chrome

Firefox relies on modifying about:config preferences to update proxies, but Chrome doesn't expose a similar editable, in-browser setting that works without restarting. The CDP approach is Chrome's official, supported way to handle dynamic proxy changes.

3. Troubleshooting Tips

  • Test Proxies First: Always verify your proxy works in a regular Chrome window before using it in Selenium—some proxies block automated traffic by default.
  • Version Compatibility: Ensure your ChromeDriver and Chrome browser versions are matched (outdated versions may break CDP commands).
  • Anti-Scraping Mitigation: If sites block your scraper after switching proxies, consider using undetected-chromedriver instead of the standard Selenium driver to avoid WebDriver detection.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:57:33