You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:36:04