### [代理IP怎么配Selenium做自动化?Chrome和Firefox的代理设置详解](https://www.jiyueip.com/article/13557) **Published:** 2026-07-30T09:31:47 **Author:** 斑斓助理 **Excerpt:** Selenium做网页自动化时配代理IP,不像浏览器里手点两下就能搞定——Chrome和Firefox的代理配置方式不同、有账号密码的SOCKS5代理更麻烦、无头模式下的代理行为还有坑。本文把Python + Selenium四种代理配置方 Selenium做网页自动化时配代理IP,不像浏览器里手点两下就能搞定——Chrome和Firefox的代理配置方式不同、有账号密码的SOCKS5代理更麻烦、无头模式下的代理行为还有坑。本文把Python + Selenium四种代理配置方法讲清楚。 ## 方式一:Chrome启动参数加代理(最简单) 适用于无认证的HTTP/SOCKS5代理。在ChromeOptions里直接加启动参数: ``` from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--proxy-server=http://代理IP:端口') # SOCKS5代理用下面这行: # chrome_options.add_argument('--proxy-server=socks5://代理IP:端口') driver = webdriver.Chrome(options=chrome_options) driver.get('https://ipleak.net') ``` 优点是一行代码完事。缺点:不支持代理认证(Chrome启动参数没办法传用户名密码)。如果你的代理IP需要账号密码认证(大部分付费代理都需要),这个方法不行。 ## 方式二:selenium-wire拦截请求(支持认证) selenium-wire 库在Selenium和浏览器之间加了一层代理,可以拦截和修改每个请求,当然也能设代理认证: ``` pip install selenium-wire from seleniumwire import webdriver options = { 'proxy': { 'http': 'http://用户名:密码@代理IP:端口', 'https': 'http://用户名:密码@代理IP:端口', # SOCKS5写法 # 'http': 'socks5://用户名:密码@代理IP:端口', } } driver = webdriver.Chrome(seleniumwire_options=options) driver.get('https://ipleak.net') ``` 天行IP的代理节点都有认证(用户名+密码),用这种方式可以直接传认证信息。天行IP静态代理月付6元起,邀请码 **blsj** 享折扣。 selenium-wire的局限:比原生Selenium慢一些(多了一层代理处理),有些复杂网站的JavaScript行为可能受影响。简单抓取场景没问题,高频采集场景性能会有损耗。 ## 方式三:Firefox的profile方式(最灵活) Firefox代理配置比Chrome灵活——支持SOCKS5远程DNS、支持认证。用Firefox Profile预设好代理配置: ``` from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.firefox_profile import FirefoxProfile profile = FirefoxProfile() # SOCKS5代理设置 profile.set_preference('network.proxy.type', 1) profile.set_preference('network.proxy.socks', '代理IP') profile.set_preference('network.proxy.socks_port', 端口号) profile.set_preference('network.proxy.socks_version', 5) profile.set_preference('network.proxy.socks_remote_dns', True) # 加这一行,DNS查询也走代理,防止DNS泄漏 # HTTP代理设置(如果用HTTP代理) # 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', 端口) firefox_options = Options() firefox_options.profile = profile driver = webdriver.Firefox(options=firefox_options) ``` Firefox自动弹认证框的问题:有代理认证时Selenium需要自动填用户名密码。用AutoAuth扩展可以自动处理,或者用PyAutoGUI模拟键盘输入——但后者不稳定。更推荐用undetected-chromedriver(见方式四)。 ## 方式四:undetected-chromedriver(防检测+代理) 普通Selenium会被大部分网站检测出来(navigator.webdriver = true)。undetected-chromedriver 能绕过这个检测,同时也能配代理: ``` pip install undetected-chromedriver import undetected_chromedriver as uc options = uc.ChromeOptions() options.add_argument('--proxy-server=http://用户名:密码@代理IP:端口') # uc的Chrome支持在代理URL里带认证信息 driver = uc.Chrome(options=options) driver.get('https://ipleak.net') ``` 实测undetected-chromedriver的速度和原生Selenium几乎一样,防检测效果好,代理认证也支持。是目前做自动化采集的首选搭配。 ## 验证代理是否生效 不管用哪种方式,配完后在代码里加一行验证: ``` driver.get('https://api.ipify.org') print(driver.page_source) # 应该显示代理IP,不是你本地IP ``` 如果返回的是你本机IP,说明代理配置没生效——检查代理地址和端口有没有打错,代理是否认证失败(认证失败时Selenium会静默退回到直连,不报错)。 ## IP轮换:每次请求换一个新IP 采集场景需要频繁换IP。可以在代理IP平台提取一批IP,然后随机选一个配到每个driver实例: ``` import random proxy_list = [ "http://user:pass@ip1:port1", "http://user:pass@ip2:port2", # ...更多代理 ] for url in target_urls: proxy = random.choice(proxy_list) options = uc.ChromeOptions() options.add_argument(f'--proxy-server={proxy}') driver = uc.Chrome(options=options) try: driver.get(url) # 处理页面... finally: driver.quit() # 用完就关,释放资源 ``` 每处理一个URL就启动一个带新IP的浏览器实例——这是最有效但最资源的轮换方式。如果要频繁轮换,用Selenium Grid + 动态代理池更专业,但门槛也更高。 ## 常见问题 ### 加了代理后Selenium打开网页超级慢? 代理IP的延迟+代理认证+页面加载,三重延迟叠加。解决办法:用离目标网站最近的代理节点;加pageLoadStrategy参数设为eager(不等页面完全加载);代理池里预先验证延迟低的IP再用。 ### Chrome无头模式(headless)代理不生效? 这是Chrome的老bug——某些版本的无头模式忽略–proxy-server参数。升级ChromeDriver和Chrome到最新版通常能解决。实在不行换Firefox无头模式,或者用undetected-chromedriver的无头模式。 ### 网站检测到我用了代理怎么办? 普通代理IP很容易被检测——机房IP段、HTTP头里的代理特征、WebRTC泄漏都是线索。升级方案:用住宅IP代替机房IP(鲸云IP独享住宅代理);用undetected-chromedriver隐藏自动化痕迹;关掉WebRTC;随机化User-Agent和窗口大小。防检测是系统工程,不是换个库就能解决的。 **Tags:** HTTP代理, SOCKS5代理, 代理IP, 数据采集合规 **Categories:** 行业洞察 ---