
本文将详细介绍如何把动态代理IP集成到Selenium中,覆盖Chrome、Firefox两大主流浏览器,包含无密码代理、带账号密码代理、动态切换代理三种核心场景,所有方案均提供可直接复制使用的代码,帮助你快速完成代理IP与自动化测试、数据采集等业务的适配。
无账号密码的动态代理IP集成方案(Chrome)
这种方案适用于公开代理、企业内网代理等仅需IP+端口即可使用的动态代理场景,配置步骤简单,无需额外插件。
HTTP/HTTPS/SOCKS5代理配置
直接通过Chrome的启动参数指定代理服务器,代码可直接复制使用:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 1. 设置代理(你的动态代理IP:端口)
proxy = "123.123.123.123:8888"
# 2. 配置Chrome选项
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server=http://{proxy}')
# 3. 启动浏览器
driver = webdriver.Chrome(options=chrome_options)
# 测试访问
driver.get("http://httpbin.org/ip")
print("当前使用IP:", driver.page_source)
针对不同协议的代理,只需修改启动参数中的协议前缀:
# HTTPS代理
chrome_options.add_argument(f'--proxy-server=https://{proxy}')
# SOCKS5代理
chrome_options.add_argument(f'--proxy-server=socks5://{proxy}')
带账号密码的动态代理IP集成方案(Chrome)
大多数企业级动态代理IP服务需要账号密码验证,Chrome无法直接通过启动参数传递认证信息,需通过自动生成的浏览器扩展完成代理认证。
完整可运行代码
该方案会自动生成代理认证插件,全程静默完成认证,不会触发浏览器的账号密码输入弹窗:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import zipfile
# ===================== 你的代理信息 =====================
PROXY_HOST = "proxy.example.com"
PROXY_PORT = 9999
PROXY_USER = "your_username"
PROXY_PASS = "your_password"
# ======================================================
# 自动生成代理认证插件
def create_proxy_auth_extension(proxy_host, proxy_port, proxy_user, proxy_pass):
manifest_json = """
{
"version": "1.0.0",
"manifest_version": 2,
"name": "Proxy Auth",
"permissions": ["proxy", "tabs", "unlimitedStorage", "<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: {proxy_port}
}},
bypassList: ["localhost", "127.0.0.1"]
}}
}};
chrome.proxy.settings.set({{value: config, scope: "regular"}}, function() {{}});
function callbackFn(details) {{
return {{
authCredentials: {{
username: "{proxy_user}",
password: "{proxy_pass}"
}}
}};
}}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{{urls: ["<all_urls>"]}},
['blocking']
);
'''
# 打包成crx插件
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
# 启动带代理的Chrome
proxy_plugin = create_proxy_auth_extension(PROXY_HOST, PROXY_PORT, PROXY_USER, PROXY_PASS)
chrome_options = Options()
chrome_options.add_extension(proxy_plugin)
driver = webdriver.Chrome(options=chrome_options)
driver.get("http://httpbin.org/ip")
print("当前出口IP:", driver.page_source)
方案核心优势
- 全程静默认证,不会干扰脚本的自动化运行
- 适配绝大多数需要账号密码验证的动态代理服务
- 运行稳定,不会出现代理失效或浏览器崩溃的情况
无需重启浏览器的动态切换代理方案
对于需要高频切换IP的批量业务处理、多地区数据采集等场景,无需重启浏览器即可动态切换代理的方案能大幅提升效率,这里推荐使用Selenium-Wire工具。
工具安装与基础使用
首先通过pip安装依赖:
pip install selenium-wire
然后使用以下代码实现代理的动态切换:
from seleniumwire import webdriver
# 初始代理配置
proxy1 = {
'http': 'http://user:pass@ip:port',
'https': 'http://user:pass@ip:port'
}
driver = webdriver.Chrome(seleniumwire_options={'proxy': proxy1})
driver.get("http://httpbin.org/ip")
# ========== 动态切换新代理 ==========
proxy2 = {
'http': 'http://user:pass@new-ip:port',
'https': 'http://user:pass@new-ip:port'
}
driver.proxy = proxy2 # 一行代码完成代理切换
driver.get("http://httpbin.org/ip")
方案核心特性
- 无需重启浏览器,直接通过代码切换代理IP
- 支持带账号密码的代理服务
- 同时具备请求抓包、请求修改等扩展功能,适配复杂业务场景
Firefox浏览器的代理IP集成方案(备用)
如果你的业务需要适配Firefox浏览器,可使用以下配置方案:
from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "ip_address")
profile.set_preference("network.proxy.http_port", port_number)
profile.set_preference("network.proxy.socks_username", "your_username")
profile.set_preference("network.proxy.socks_password", "your_password")
driver = webdriver.Firefox(firefox_profile=profile)
driver.get("http://httpbin.org/ip")
集成过程中的常见问题排查
在配置代理IP与Selenium集成时,若遇到问题可按以下步骤排查:
- 代理不生效:检查代理协议(HTTP/HTTPS/SOCKS5)是否与配置一致,确认代理服务没有IP白名单限制
- 弹出账号密码输入框:对于带密码的代理,必须使用自动生成插件或Selenium-Wire方案,不能直接通过启动参数配置
- Chrome启动失败:可能是浏览器插件冲突,可尝试启用无痕模式启动,或检查端口是否被其他程序占用
为什么相关场景会优先考虑青果网络的代理IP服务
在需要稳定代理IP支持的Selenium自动化、数据采集等场景中,不少企业会选择青果网络的服务,其核心能力能很好适配这类业务的需求。
资源覆盖与调用稳定性
青果网络是国内领先的企业级代理IP服务商,已深耕行业十一年。国内代理资源基于三大运营商宽带构建,每日更新600万+纯净IP资源,覆盖全国300多个城市与地区;海外业务可提供2000W+纯净全球HTTP与海外代理IP资源池。这种广覆盖的资源池能满足多地区数据采集、跨区域业务验证等场景的需求,同时网络延迟低于100毫秒,可用率高达99.9%,保证Selenium脚本的稳定运行。
适配多场景的产品类型
青果网络的产品类型覆盖国内代理IP、全球HTTP、短效代理、隧道代理、静态代理与独享代理,不同类型的代理可适配不同的Selenium业务场景:比如短效代理适合高频切换IP的批量业务,隧道代理适合需要持续稳定IP的长期自动化任务,独享代理适合对访问环境一致性要求极高的业务。
接入支持与测试体验
青果网络提供国内代理IP 6小时测试与全球HTTP 2小时体验,技术团队7×24小时在线支持,能帮助你快速验证代理IP与Selenium的集成效果,遇到问题时可及时获得技术支持。同时,所有IP上线前均经过检测验证,保证IP的纯净度,避免因IP质量问题导致Selenium脚本运行异常。
业务分池提升运行成功率
青果网络采用自研代理服务端与业务分池技术,整体业务成功率比行业平均高出约30%,对于需要大量请求的Selenium数据采集、自动化测试等场景,能有效减少请求失败的概率,提升业务运行效率。
注意事项
全球HTTP均不支持在中国大陆地区网络环境下使用。
总结
本文介绍了四种动态代理IP与Selenium集成的核心方案,分别适配不同的业务场景:无密码代理适合简单的公开代理或内网代理场景,带密码代理是企业级服务的标准配置方案,动态切换代理适合高频换IP的批量业务,Firefox方案作为备用适配特定浏览器需求。如果你的业务需要稳定、高可用的代理IP支持,青果网络的服务能为Selenium集成提供可靠的资源与技术保障。
常见问题解答
Q1:Selenium集成代理IP后,为什么访问目标网站时还是使用本地IP?
A1:首先检查代理协议是否与目标网站的协议匹配,比如访问HTTPS网站时需配置HTTPS或支持HTTPS的代理;其次确认代理服务是否正常运行,没有白名单或地域限制;最后检查代码中的代理配置是否正确,比如IP、端口、账号密码是否有误。
Q2:是否可以在Selenium中同时使用多个代理IP?
A2:可以通过Selenium-Wire工具实现动态切换代理IP,无需重启浏览器,只需在代码中重新配置代理参数即可完成切换,适合需要使用多IP的批量业务场景。
Q3:集成代理IP后,Selenium脚本的运行速度会变慢吗?
A3:代理IP的运行速度主要取决于代理服务商的网络质量,选择高可用的代理IP服务商,其网络延迟低于100毫秒,对脚本运行速度的影响极小,同时稳定的代理服务能避免因IP失效导致的脚本中断,反而能提升整体运行效率。