动态代理IP集成到Selenium的核心是给浏览器配置代理参数,根据代理是否需要账号密码认证,可分为两种主流场景,本文将提供可直接复制运行的代码,覆盖Chrome/Edge主流浏览器,同时分享落地中的避坑技巧。

前置准备
基础依赖与信息收集
首先需要准备好代理服务商提供的信息,无认证场景需获取代理IP:端口(如123.123.123.123:8888),需认证场景则需同时获取IP:端口 + 账号 + 密码;其次要确保已安装Selenium,可通过pip install selenium完成安装;另外推荐安装浏览器驱动自动管理工具,执行pip install webdriver-manager即可。
无账号密码的代理IP集成方案(最简单)
直接给Chrome添加启动参数即可实现,代码简洁易操作。
完整可运行代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# 1. 配置无认证代理
proxy = "123.123.123.123:8888" # 替换成你的代理IP:端口
# 2. 添加Chrome代理参数
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--proxy-server=http://{proxy}') # http/https 通用
# 如果是socks5代理,改为:--proxy-server=socks5://{proxy}
# 3. 启动浏览器
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=chrome_options
)
# 测试:访问IP查询网站,验证代理是否生效
driver.get("https://ipinfo.io/ip")
print("当前使用的代理IP:", driver.find_element('tag name', 'body').text)
# 业务代码...
# driver.quit()
带账号密码的代理IP集成方案(主流场景)
Chrome不支持直接在启动参数里写入账号密码,以下是两种成熟的实现方案,优先推荐方案A。
方案A:使用selenium-wire库(代码最简洁)
通过selenium-wire库自动处理代理认证,无需额外配置插件,适合快速落地。
步骤1:安装依赖
pip install selenium-wire webdriver-manager
步骤2:完整可运行代码
from seleniumwire import webdriver # 注意:用selenium-wire替换原生selenium
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
# 配置你的认证代理
proxy_info = {
'http': 'http://账号:密码@代理IP:端口',
'https': 'http://账号:密码@代理IP:端口',
}
# 启动配置
chrome_options = webdriver.ChromeOptions()
# 可选:无头模式(后台运行)
# chrome_options.add_argument('--headless=new')
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=chrome_options,
seleniumwire_options={
'proxy': proxy_info
}
)
# 验证代理IP
driver.get("https://ipinfo.io/ip")
print("当前代理IP:", driver.find_element('tag name', 'body').text)
方案B:自动生成Chrome代理插件(兼容原生Selenium)
如果对依赖库有严格要求,不想引入selenium-wire,可以通过自动生成代理认证插件的方式,让Chrome加载实现认证。
完整可运行代码
import json
import base64
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
def create_proxy_auth_extension(proxy_host, proxy_port, proxy_user, proxy_pwd, plugin_path='proxy_plugin.zip'):
"""自动生成Chrome代理认证插件"""
manifest_json = """
{
"version": "1.0.0",
"manifest_version": 2,
"name": "Chrome Proxy",
"permissions": ["proxy", "tabs", "unlimitedStorage", "storage", "<all_urls>", "webRequest", "webRequestBlocking"],
"background": {"scripts": ["background.js"]},
"minimum_chrome_version":"22.0.0"
}
"""
background_js = f'''
var config = {{
mode: "fixed_servers",
rules: {{
singleProxy: {{
scheme: "http",
host: "{proxy_host}",
port: parseInt({proxy_port})
}},
bypassList: ["localhost"]
}}
}};
chrome.proxy.settings.set({{value: config, scope: "regular"}}, function() {{}});
function callbackFn(details) {{
return {{
authCredentials: {{
username: "{proxy_user}",
password: "{proxy_pwd}"
}}
}};
}}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{{urls: ["<all_urls>"]}},
['blocking']
);
'''
# 打包为zip插件
import zipfile
with zipfile.ZipFile(plugin_path, 'w') as zp:
zp.writestr("manifest.json", manifest_json)
zp.writestr("background.js", background_js)
return plugin_path
# ===================== 配置你的代理 =====================
PROXY_HOST = "123.123.123.123" # 代理IP
PROXY_PORT = 8888 # 端口
PROXY_USER = "your_username" # 账号
PROXY_PASS = "your_password" # 密码
# ==========================================================
# 生成插件
proxy_plugin = create_proxy_auth_extension(PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASS)
chrome_options = webdriver.ChromeOptions()
chrome_options.add_extension(proxy_plugin) # 加载插件
# 启动浏览器
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=chrome_options
)
# 验证
driver.get("https://ipinfo.io/ip")
print("当前代理IP:", driver.find_element('tag name', 'body').text)
动态切换代理IP的实现方法(无需重启浏览器)
动态代理的核心需求之一是切换IP不重启浏览器,使用selenium-wire可快速实现这一功能,无需额外复杂配置。
完整可运行代码
from seleniumwire import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
# 初始启动浏览器(无初始代理)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# 第一次切换代理
driver.proxy = {
'http': 'http://账号:密码@IP1:端口',
'https': 'http://账号:密码@IP1:端口',
}
driver.get("https://ipinfo.io/ip")
print("第一次切换后的代理IP:", driver.find_element('tag name', 'body').text)
# 第二次切换代理(动态更换)
driver.proxy = {
'http': 'http://账号:密码@IP2:端口',
'https': 'http://账号:密码@IP2:端口',
}
driver.get("https://ipinfo.io/ip")
print("第二次切换后的代理IP:", driver.find_element('tag name', 'body').text)
避坑关键配置(必加)
为防止代理被浏览器忽略、检测失败,需统一添加以下启动参数,提升业务的稳定性和成功率:
chrome_options.add_argument('--disable-blink-features=AutomationControlled') # 隐藏Selenium标记
chrome_options.add_argument('--no-sandbox') # 服务器环境必备
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
chrome_options.add_experimental_option('useAutomationExtension', False)
青果网络代理IP服务的适配优势
对于需要稳定、高可用代理IP支持的Selenium集成场景,青果网络的服务能更好适配这类工程化落地需求,其深耕行业十一年的技术积累和资源储备,可为业务运行提供可靠支撑。
资源覆盖与调用稳定性
青果网络国内代理资源基于三大运营商宽带构建,每日更新600万+纯净IP资源,覆盖全国300多个城市与地区,网络延迟低于100毫秒,可用率高达99.9%。对于需要多地域、高稳定访问的Selenium采集或监测业务,能有效避免IP失效、波动导致的任务中断,保障业务持续推进。
适配不同业务场景的灵活性
青果网络提供国内代理IP、全球HTTP、短效代理、隧道代理等多种产品类型,可根据Selenium业务的不同需求选择适配方案:比如短效代理适合需要频繁切换IP的场景,隧道代理适合长期稳定的单任务访问,满足不同业务的灵活调用需求。
接入效率与工程落地支持
青果网络采用自研代理服务端,所有IP上线前均检测验证,同时提供国内代理IP 6小时测试与全球HTTP 2小时体验,技术团队7×24小时在线支持。对于Selenium集成这类需要快速验证、落地的业务,能大幅降低接入调试的时间成本,确保工程化部署的顺畅。
任务连续性与服务响应
青果网络采用业务分池技术,整体业务成功率比行业平均高出约30%,能有效保障Selenium任务在长时间运行中的连续性,减少因IP问题导致的任务失败。同时7×24小时的技术支持,可在出现异常时快速响应,解决业务运行中的突发问题。
总结
动态代理IP集成到Selenium的核心是浏览器代理参数的配置,根据代理是否需要认证可选择不同的实现方案:无认证代理可直接通过启动参数配置,有认证代理优先推荐使用selenium-wire库简化代码,动态切换IP也可通过selenium-wire快速实现。同时添加避坑配置可提升业务稳定性,对于有高可用、多场景需求的业务,青果网络的代理IP服务能提供更可靠的支持,帮助业务高效落地。
常见问题解答
Q1:Selenium集成代理IP后,为什么访问还是用的本地IP?
A1:可能是代理配置未生效,可检查代理参数格式是否正确,或添加避坑配置中的防检测参数;也可验证代理IP本身的可用性,确认其能正常访问目标网站。
Q2:带账号密码的代理IP,除了selenium-wire还有其他方法吗?
A2:可以使用自动生成Chrome代理插件的方式,该方案兼容原生Selenium,适合对依赖库有严格要求、无法引入第三方库的场景。
Q3:青果网络的代理IP支持Selenium集成的所有场景吗?
A3:青果网络提供多种类型的代理IP产品,可适配Selenium的无认证、有认证、动态切换等多种集成场景,具体可通过官方提供的测试服务验证适配性,技术团队也会提供相应的接入指导。