Selenium使用Chrome Webdriver加代理频繁出现ERR_EMPTY_RESPONSE问题求助
常见原因及对应解决方案
- 代理本身稳定性问题
你当前使用的是公开代理节点,这类节点普遍存在用户多、负载波动大、带宽不足的问题,部分代理服务商还会对免费/低价节点设置请求频率限制,短时间内多次请求就会主动断开连接返回空响应。手动刷新刚好赶上代理节点负载回落、限流周期结束就会加载成功,这也是你10次左右才能成功一次的核心诱因。建议优先替换为私密代理、住宅代理这类稳定性更高的代理资源。 - 目标站点反爬策略拦截
仅替换UA和代理不足以绕过大部分站点的反爬检测,Selenium启动的Chrome默认携带window.navigator.webdriver等自动化特征,站点检测到后会直接主动断开TCP连接,返回空响应。手动刷新时浏览器会重新发起握手,部分短周期临时封禁的规则刚好到期就会加载成功。 - Selenium代理配置兼容问题
你当前使用DesiredCapabilities配置代理的方式是Selenium 3.x的旧方案,Selenium 4.x+以及高版本Chrome浏览器对该配置的兼容性很差,偶发代理握手失败、代理不生效的问题,也会触发ERR_EMPTY_RESPONSE报错。 - 浏览器运行参数缺失
Chrome默认的共享内存、沙箱等限制在自动化运行场景下容易触发资源不足,导致页面加载中断返回空响应。
可直接复用的优化后代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait import time PROXY = "35.230.111.164:8888" options = webdriver.ChromeOptions() # 代理配置改用Options直接传入,兼容性更好 options.add_argument(f"--proxy-server={PROXY}") # 基础稳定性参数 options.add_argument("--window-size=1920,1080") options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-extensions") options.add_argument("--disable-gpu") # 绕过Selenium自动化检测参数 options.add_argument("--disable-blink-features=AutomationControlled") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option("useAutomationExtension", False) user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" options.add_argument(f"user-agent={user_agent}") driver = webdriver.Chrome(options=options) # 移除webdriver特征 driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" }) wait = WebDriverWait(driver, 20) # 增加自动重试逻辑,不用手动刷新 max_retries = 10 for i in range(max_retries): try: driver.get("https://whatismyipaddress.com/") # 可自定义页面加载成功的判断逻辑,比如校验目标元素是否存在 break except Exception as e: print(f"第{i+1}次加载失败,重试中...") time.sleep(2) driver.implicitly_wait(10) # 后续业务逻辑
排查验证方法
先脱离Selenium,直接用requests库挂载该代理多次请求目标站点,如果同样频繁出现连接中断、空响应的问题,即可确认是代理本身的问题,优先替换代理资源即可。
内容的提问来源于stack exchange,提问作者m0r
相关产品推荐
相关产品推荐

