Selenium 4.1代理配置问题:使用Selenium-Wire仍显示原IP
解决Selenium-Wire代理配置不生效问题
以下是针对性的解决思路和修正方案:
1. 修正代理URL格式
代码中代理URL末尾的斜杠可能导致解析异常,先调整URL拼接逻辑:
seleniumwire_options = { "proxies": { "https": f"http://{user}:{pwd}@{end}", "http": f"http://{user}:{pwd}@{end}", 'verify_ssl': False } }
2. 直接给Firefox配置代理参数
Selenium-Wire的代理有时会和Firefox自身设置冲突,直接为浏览器配置代理更可靠:
firefox_options = Options() # 分离代理地址和端口 proxy_host, proxy_port = end.split(':') proxy_port = int(proxy_port) # 设置代理类型为手动配置 firefox_options.set_preference("network.proxy.type", 1) # 配置HTTP代理 firefox_options.set_preference("network.proxy.http", proxy_host) firefox_options.set_preference("network.proxy.http_port", proxy_port) # 配置HTTPS代理 firefox_options.set_preference("network.proxy.ssl", proxy_host) firefox_options.set_preference("network.proxy.ssl_port", proxy_port) # 关闭本地地址绕过(确保所有请求走代理) firefox_options.set_preference("network.proxy.no_proxies_on", "") # 设置代理认证信息 firefox_options.set_preference("network.proxy.socks_username", user) firefox_options.set_preference("network.proxy.socks_password", pwd)
3. 检查依赖版本兼容性
- 确保Selenium-Wire、Selenium、geckodriver、Firefox的版本相互匹配,版本不兼容会导致代理失效。
- 尝试更新到最新稳定版:
pip install --upgrade selenium selenium-wire,同时下载对应Firefox版本的geckodriver。
4. 排查外部干扰
- 关闭系统代理、VPN或其他网络工具,避免它们覆盖代码中的代理配置。
- 先用命令行测试代理可用性,确认代理本身能正常工作:
curl -x http://jesbeqki:1wbt8dnqtu8w@2.56.119.93:5074 https://httpbin.org/ip
修正后的完整代码
from seleniumwire import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options import time user = 'jesbeqki' pwd = '1wbt8dnqtu8w' end = '2.56.119.93:5074' proxy_host, proxy_port = end.split(':') proxy_port = int(proxy_port) firefox_options = Options() # 配置Firefox代理参数 firefox_options.set_preference("network.proxy.type", 1) firefox_options.set_preference("network.proxy.http", proxy_host) firefox_options.set_preference("network.proxy.http_port", proxy_port) firefox_options.set_preference("network.proxy.ssl", proxy_host) firefox_options.set_preference("network.proxy.ssl_port", proxy_port) firefox_options.set_preference("network.proxy.no_proxies_on", "") firefox_options.set_preference("network.proxy.socks_username", user) firefox_options.set_preference("network.proxy.socks_password", pwd) seleniumwire_options = { "proxies": { "https": f"http://{user}:{pwd}@{end}", "http": f"http://{user}:{pwd}@{end}", 'verify_ssl': False } } driver = webdriver.Firefox(options=firefox_options, seleniumwire_options=seleniumwire_options) driver.get('https://httpbin.org/ip') text = driver.find_element(By.TAG_NAME, 'body').text print(text) time.sleep(3) driver.quit()
内容的提问来源于stack exchange,提问作者Sourav
相关产品推荐
相关产品推荐

