使用Proxy时Selenium出现ERR_CONNECTION_RESET错误求助
解决Selenium配置Proxy时出现net::ERR_CONNECTION_RESET的问题
针对你遇到的配置代理后触发net::ERR_CONNECTION_RESET、关闭代理则正常的情况,结合你的代码和排查情况,给出以下具体解决方案:
1. 修正代理索引的线程安全问题
你的代码中每个线程都固定使用profiles.proxies[0](函数内i=0会在每次线程启动时重置),导致多线程并发使用同一代理,极易触发目标服务器或代理服务商的并发限制,直接引发连接重置。
修改为线程安全的代理轮询逻辑:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager import time import random import profiles import threading # 全局计数器与锁,保证线程安全 proxy_lock = threading.Lock() current_proxy_index = 0 def adnan(): global current_proxy_index # 线程安全地获取下一个代理索引 with proxy_lock: idx = current_proxy_index current_proxy_index = (current_proxy_index + 1) % len(profiles.proxies) proxy = profiles.proxies[idx] ua = profiles.useragent[idx] options = webdriver.ChromeOptions() options.add_argument(f'user-agent={ua}') options.add_argument('--disable-dev-shm-usage') options.add_argument('--no-sandbox') options.add_argument(f'--proxy-server={proxy}') #options.add_extension('chameleon.xpi') options.add_argument('--start-maximized') options.add_argument("--incognito") options.headless = False s = webdriver.Chrome(ChromeDriverManager().install(), options=options) s.implicitly_wait(5) try: s.get("https://proxs.ru/myreferer.php") time.sleep(100) except Exception as e: print(f"线程出错: {e}") finally: s.quit() for e in range(5): threading.Thread(target=adnan).start() time.sleep(3)
2. 确保代理格式与协议匹配
Chrome的--proxy-server参数要求明确代理协议(如http://、socks5://),若你的profiles.proxies仅存储ip:port格式,Chrome会默认使用HTTP协议,若代理实际为SOCKS5类型则会导致连接失败。
检查并修正代理格式:
- HTTP代理:
http://192.168.1.1:8080 - SOCKS5代理:
socks5://192.168.1.1:1080
3. 排除系统级代理干扰
Windows 10的系统代理设置(如VPN残留、自动配置脚本)可能覆盖Chrome的指定代理,导致连接异常。在ChromeOptions中添加参数强制禁用系统代理:
options.add_argument('--no-proxy-server') # 忽略系统代理,仅使用指定代理 options.add_argument('--ignore-certificate-errors') # 规避部分代理的证书验证问题
同时手动检查Win10代理设置:
- 打开「设置」→「网络和Internet」→「代理」,确保「自动检测设置」关闭,且无其他手动代理配置。
4. 优化Chrome自动化检测规避
部分代理服务商或目标网站会拒绝自动化工具的请求,添加以下参数规避Chrome的自动化特征:
options.add_argument('--disable-blink-features=AutomationControlled') options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False)
5. 验证代理在多线程场景下的可用性
单线程验证有效的代理,在多线程并发请求时可能被临时封禁。在启动Chrome前添加代理有效性测试:
import requests def test_proxy(proxy_addr): proxy_dict = { 'http': proxy_addr, 'https': proxy_addr } try: response = requests.get("https://proxs.ru/myreferer.php", proxies=proxy_dict, timeout=10) return response.status_code == 200 except Exception: return False # 在adnan函数中使用: if not test_proxy(proxy): print(f"代理 {proxy} 不可用,跳过") return
内容的提问来源于stack exchange,提问作者privon
相关产品推荐
相关产品推荐

