如何在Selenium WebDriver中配置带认证的代理
更新于:
标准的ChromeDriver --proxy-server=http://ip:port 启动参数会忽略内嵌的 user:pass 登录凭据,并导致浏览器弹窗卡住等待手动登录。为了在Selenium中顺畅使用 VinaProxy 认证HTTP(S)代理,推荐通过 selenium-wire 传参,或者加载一段轻量级的Chrome onAuthRequired 后台扩展。
http://user:pass@ip:port (selenium-wire / Chrome proxy extension)- 1 个IP₫40,000
- 5+ 个IP₫35,000
- 10+ 个IP₫25,000
- 20+ 个IP₫25,000
- 50+ 个IP₫25,000
- 100+ 个IP₫25,000
- 200+ 个IP₫25,000
- 500+ 个IP₫25,000
- 1000+ 个IP₫22,000
- 2000+ 个IP₫20,000
- 1 个IP₫75,000
- 3+ 个IP₫70,000
- 5+ 个IP₫65,000
- 10+ 个IP₫60,000
- 50+ 个IP₫60,000
- 100+ 个IP₫60,000
- 200+ 个IP₫60,000
- 500+ 个IP₫55,000
在Selenium中实现代理身份认证的两种可靠方案
根据你的开发语言与所使用的浏览器驱动架构选择最合适的方案:
| 实现方案 | 配置代码示例 | 最佳适用场景 |
|---|---|---|
selenium-wire(Python) | seleniumwire_options={'proxy': {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}} | Python下最快上手的方案;支持在会话运行中动态切换代理IP |
| Chrome Auth 扩展 | 加载处理 chrome.webRequest.onAuthRequired 的ZIP扩展 | 适用于Python、Java、C#标准Selenium及 undetected-chromedriver |
| 迁移至 Playwright | browser.newContext({ proxy: { server, username, password } }) | 原生支持上下文级代理认证,完全无需打包扩展 |
基于代理的Selenium爬虫性能调优建议
- 将
options.page_load_strategy = 'eager',使WebDriver在DOM结构就绪后立即交互,避免等待第三方统计脚本拖慢速度 - 在无头模式下使用
--headless=new(Chrome 109+),确保Chrome扩展与代理认证行为与有界面模式完全一致 - 如果是纯文本电商数据抓取,可通过Chrome首选项禁用图片渲染以节约带宽并大幅提升渲染性能
- 务必将驱动启动与操作代码包裹在
try / finally: driver.quit()块中,防止后台残留僵尸Chromium进程
操作步骤
- 1
安装 selenium-wire
在Python虚拟环境中运行
pip install selenium-wire。 - 2
定义你的 VinaProxy 代理字典
按格式配置凭据:
sw_options = {'proxy': {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}}。 - 3
使用 seleniumwire_options 启动 Chrome
实例化浏览器对象:
driver = webdriver.Chrome(seleniumwire_options=sw_options)。 - 4
验证出口IP地址
访问
driver.get('https://vinaproxy.com/api/my-ip'),验证返回的JSON数据与购买的代理IP相符。
常见问题
为什么在ChromeOptions中设置'--proxy-server=http://user:pass@ip:port'不起作用?
Chromium内核出于安全设计会直接剥离启动参数中的 user:pass@ 凭据。使用 selenium-wire、onAuthRequired 扩展或迁移到 Playwright 可完美解决此问题。
在selenium-wire中能否不重启Chrome动态更换代理?
可以。随时在代码中为 driver.proxy = {'http': 'http://...', 'https': 'http://...'} 赋予新字典,即可无缝热切换上游代理。
Chrome代理扩展能在无头(Headless)模式下正常工作吗?
可以,只要使用 --headless=new 参数代替旧版的 --headless 即可保证扩展正常加载并认证。
使用不限流量的静态IP大规模运行Selenium WebDriver
覆盖7个国家的独享IPv4与静态住宅ISP代理,即时开通。
购买Selenium代理