一、为什么Selenium需要搭配代理IP?
用Selenium做自动化测试或数据采集时,最头疼的就是被目标网站识别封锁。同一个IP频繁访问,轻则验证码拦截,重则直接封禁IP地址。这时候代理IP就像给浏览器穿上了"隐身衣",通过动态切换出口IP让网站以为是不同用户在操作。
以天启代理为例,他们提供的高匿名住宅级IP能完美模拟真实用户网络环境。相比普通机房IP,这类代理更难被识别为机器流量,特别适合需要长期稳定运行的自动化场景。
二、Selenium设置代理的三种核心方式
不同浏览器驱动有各自的代理配置方法,这里演示最常用的Chrome和Firefox方案:
方案1:Chrome浏览器设置from selenium import webdriver proxy = "112.85.130.221:5328" 天启代理提供的IP端口 options = webdriver.ChromeOptions() options.add_argument(f'--proxy-server=http://{proxy}') driver = webdriver.Chrome(options=options)方案2:Firefox浏览器设置
profile = webdriver.FirefoxProfile() profile.set_preference("network.proxy.type", 1) profile.set_preference("network.proxy.http", "112.85.130.221") profile.set_preference("network.proxy.http_port", 5328) driver = webdriver.Firefox(firefox_profile=profile)方案3:带认证的代理设置
当天启代理的某些IP需要账号密码认证时,可以通过插件注入凭证:
from selenium.webdriver.common.proxy import Proxy, ProxyType proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy': '112.85.130.221:5328', 'sslProxy': '112.85.130.221:5328', 'socksUsername': 'tianqi', 'socksPassword': '123456' })
三、动态代理IP的进阶玩法
固定IP用久了仍会被识别,建议结合天启代理的API接口动态获取IP。这里给出两种实战方案:
轮换策略 | 实现方式 | 适用场景 |
---|---|---|
定时更换 | 每10分钟调用天启API获取新IP | 长期运行的任务 |
异常触发 | 当出现验证码或403错误时切换IP | 高反爬网站 |
示例代码实现动态切换:
import requests def get_proxy(): resp = requests.get("https://api.tianqi.pro/getips?type=json") return resp.json()['proxy'] 在每次操作前刷新代理 driver.quit() 先关闭旧实例 new_proxy = get_proxy() 重新初始化带新代理的浏览器实例
四、必须注意的五个避坑指南
在实际使用中,我们遇到过这些典型问题:
- IP纯净度问题:某些代理池的IP被滥用,天启代理采用自建机房+运营商合作模式保证IP质量
- 协议不匹配:确保代理协议(HTTP/HTTPS/SOCKS5)与目标网站一致
- 超时设置:建议设置页面加载超时(page_load_timeout)避免卡死
- Header指纹:配合修改User-Agent等参数强化匿名性
- 流量特征:控制操作间隔时间,模拟人类行为模式
五、常见问题QA
Q:设置了代理但访问失败怎么办?
A:先单独测试代理IP是否可用(如curl测试),再检查Selenium配置格式。天启代理提供实时可用性检测接口,建议集成到程序中。
Q:如何处理网站要求的HTTPS代理?
A:天启代理的节点默认支持HTTP/HTTPS/SOCKS5全协议,设置时注意协议头写法:--proxy-server=https://...
Q:遇到证书错误怎么解决?
A:添加options.add_argument('--ignore-certificate-errors')
参数,或使用天启的纯净IP避免SSL证书异常。
Q:如何验证代理是否生效?
A:访问https://httpbin.org/ip
查看返回的IP是否变化,天启代理的IP都会显示真实的地理位置信息。