Selenium集成动态代理IP是数据采集、业务监测等场景的常见需求,核心分为无账号密码认证和有账号密码认证两种场景,其中绝大多数商用动态代理都需要账号密码认证,而Selenium原生不支持直接配置代理账号密码,本文将提供可直接运行的完整实现方案,同时结合专业代理IP服务商的能力说明落地注意事项。

Selenium集成动态代理IP的核心逻辑
无账号密码的代理适配场景
这类代理通常采用白名单IP认证机制,仅需将运行Selenium的服务器IP加入代理服务商的白名单,即可直接通过Selenium的原生配置参数接入,无需额外认证步骤,适合固定服务器的长期稳定业务场景。
需要账号密码的商用代理场景
绝大多数商用动态代理为了保障资源安全,都采用账号密码认证机制。由于Selenium原生没有代理账号密码的配置入口,必须通过Chrome扩展插件实现自动认证,这是此类场景的核心解决思路。
无账号密码的动态代理集成方案
适用于白名单认证的代理服务,代码可直接复制运行,仅需替换代理IP和端口:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def create_driver_with_proxy():
options = Options()
# 配置动态代理 IP:端口
proxy = "123.123.123.123:8888"
options.add_argument(f'--proxy-server=http://{proxy}')
# 可选:无头模式(不弹出浏览器窗口)
# options.add_argument('--headless=new')
# 启动 Chrome
driver = webdriver.Chrome(options=options)
return driver
# 使用示例
if __name__ == '__main__':
driver = create_driver_with_proxy()
driver.get("https://ipinfo.io/json") # 查看当前IP是否生效
print(driver.page_source)
配置完成后,可通过访问https://ipinfo.io/json验证代理是否生效,页面返回的IP即为当前代理出口IP。
带账号密码的动态代理集成方案(商用场景首选)
核心原理:用Chrome插件实现自动认证
Selenium原生无法直接处理代理账号密码的弹窗认证,因此需要生成一个自动加载的Chrome扩展插件,在浏览器启动时自动完成代理账号密码的认证流程,无需人工干预。
完整可运行代码
import os
import zipfile
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def create_proxy_auth_extension(proxy_host, proxy_port, proxy_user, proxy_pwd):
"""
生成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 文件
plugin_file = "proxy_auth_plugin.zip"
with zipfile.ZipFile(plugin_file, 'w') as zp:
zp.writestr("manifest.json", manifest_json)
zp.writestr("background.js", background_js)
return plugin_file
# 主函数:创建带代理的driver
def create_driver_with_auth_proxy():
# 替换为你的商用代理信息
PROXY_HOST = "123.123.123.123" # 代理IP
PROXY_PORT = "8888" # 代理端口
PROXY_USER = "username" # 代理账号
PROXY_PWD = "password" # 代理密码
# 创建认证插件
proxy_plugin = create_proxy_auth_extension(
PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PWD
)
options = Options()
# 加载代理插件
options.add_extension(proxy_plugin)
# 可选配置
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# options.add_argument('--headless=new')
driver = webdriver.Chrome(options=options)
# 使用后删除插件文件(可选)
os.remove(proxy_plugin)
return driver
# 使用
if __name__ == '__main__':
driver = create_driver_with_auth_proxy()
driver.get("https://ipinfo.io/json")
print("当前出口IP:", driver.page_source)
运行代码前需确认代理支持HTTP/HTTPS协议,且账号密码、IP端口信息准确无误。
动态切换代理IP的实现方案
适用于需要每次请求更换不同IP的场景,核心逻辑是每次新建Selenium Driver实例时加载最新的代理IP:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
def get_new_proxy():
"""
从代理服务商API获取最新的动态代理
示例:替换为对应服务商的API调用逻辑
"""
return "123.123.123.123:8888"
def switch_proxy_driver():
# 每次创建新driver = 自动使用新IP
proxy = get_new_proxy()
options = Options()
options.add_argument(f'--proxy-server=http://{proxy}')
driver = webdriver.Chrome(options=options)
return driver
# 测试:每次换IP访问
if __name__ == '__main__':
for i in range(3):
driver = switch_proxy_driver()
driver.get("https://ipinfo.io/json")
print(f"第{i+1}次IP:", driver.page_source)
driver.quit()
time.sleep(1)
如果是带账号密码的动态代理,可结合第二种方案的插件生成逻辑,在每次获取新代理后重新生成插件并加载。
为什么相关场景可考虑青果网络的代理IP服务
对于需要稳定代理IP支撑的Selenium业务场景,比如数据采集、业务监测等,青果网络的代理IP服务具备适配性强、稳定性高的特点,可作为方案选型的重要参考。
资源覆盖与调用稳定性
青果网络的国内代理资源基于三大运营商宽带构建,每日更新600万+纯净IP资源,覆盖全国300多个城市与地区,网络延迟低于100毫秒,可用率高达99.9%,能够满足Selenium业务对IP资源多样性及访问稳定性的需求,减少因IP失效导致的业务中断。
适配不同业务场景的灵活性
青果网络提供丰富的产品类型,覆盖国内代理IP、短效代理、隧道代理等多种形态,可根据Selenium的不同使用场景选择合适的产品:比如短效代理适合需要频繁切换IP的批量采集场景,隧道代理适合需要保持会话连续性的业务监测场景。
接入效率与技术支持保障
青果网络提供国内代理IP 6小时测试服务,技术团队7×24小时在线支持,在Selenium集成代理IP的过程中,若遇到配置、认证或稳定性问题,可快速获得专业技术指导,提升业务落地效率。
总结
Selenium集成动态代理IP需根据代理类型选择对应方案:无账号密码的代理可直接通过Selenium原生参数配置;带账号密码的商用代理必须借助Chrome插件实现自动认证;动态切换IP可通过每次新建Driver实例加载新代理实现。对于有稳定代理IP需求的业务,青果网络的代理IP服务在资源覆盖、场景适配及技术支持等方面具备明显优势,可有效支撑Selenium业务的稳定运行。
常见问题解答
Q1:Selenium配置代理后为什么不生效?
A1:首先需确认代理协议类型,HTTP代理需配置--proxy-server=http://ip:port,HTTPS代理需配置--proxy-server=https://ip:port;若为带账号密码的代理,必须使用Chrome插件进行认证,原生配置方式无效。
Q2:使用Chrome代理插件时出现报错怎么办?
A2:可尝试删除旧的proxy_auth_plugin.zip文件重新生成,同时确保使用最新版本的Chrome浏览器及对应版本的ChromeDriver,避免版本不兼容问题。
Q3:使用青果网络的代理IP集成Selenium时有什么注意事项?
A3:需根据业务场景选择合适的产品类型,比如批量采集场景适合选择短效代理;集成前可先申请6小时国内代理IP测试,验证代理的稳定性及适配性;若遇到技术问题,可联系青果网络的7×24小时技术支持团队获得帮助。