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

Selenium循环调用driver.get(url)无报错无日志却偶尔失效如何解决

Selenium循环调用driver.get无报错失效问题排查

该问题不是Selenium的driver.get方法本身的Bug,主要由配置、运行环境、业务侧拦截三类因素导致,具体原因和修复方案如下:

核心原因

  • 日志被主动禁用:你代码中添加了options.add_experimental_option("excludeSwitches", ["enable-logging"])配置,直接关闭了ChromeDriver的运行日志输出,就算驱动层面出现请求错误、进程异常也不会有任何日志提示。
  • 无超时设置导致请求挂死:Selenium默认未开启页面加载超时限制,当遇到网络波动、目标站点响应缓慢、静态资源加载卡住时,driver.get会一直处于等待状态,不会往下执行后续代码也不会抛出异常,表现出来就是方法失效。
  • 反爬拦截导致加载结果不符合预期:高频循环访问公共站点(尤其是谷歌服务)会触发站点的频次控制规则,返回429状态码、验证码页面或者直接断开连接,driver.get只要收到HTTP响应就会判定执行完成,不会自动校验返回内容是否符合预期,很容易被误认为是方法失效。
  • 长时运行的进程资源泄露:上千次循环的长时运行场景下,Chrome浏览器和Chromedriver进程会出现内存溢出、句柄泄露的问题,导致后续驱动命令无响应。

修复方案

  • 移除禁用日志的配置行,开启ChromeDriver日志输出,方便定位底层报错原因。
  • 初始化driver后添加超时配置,调用driver.get时套异常捕获逻辑,超时后自动重试:
from selenium import webdriver
import time

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument("--disable-webgl")
path = r'chromedriver.exe'
driver = webdriver.Chrome(path,options=options)

# 新增超时设置
driver.set_page_load_timeout(30)
driver.set_script_timeout(30)
driver.implicitly_wait(10)

for x in range(1000):
    try:
        url = "https://www.palabrasaleatorias.com/random-words.php"
        driver.get(url)
        # 简单校验加载结果
        assert "palabrasaleatorias" in driver.current_url
        # 增加请求间隔
        time.sleep(1)
        url = "https://www.google.ru/imghp?hl=ru"
        print(x,"Test[1]")
        driver.get(url)
        assert "google.ru" in driver.current_url
        print(x,"Test[2]")
        time.sleep(1)
    except Exception as e:
        print(f"第{x}次请求出错:{str(e)}")
        # 出错后刷新重试
        driver.refresh()
# 每300次循环可以加一个重启driver的逻辑,释放资源
driver.close()
  • 每运行200-300次循环就主动关闭当前driver,重启新的driver进程,避免资源累积溢出。

内容的提问来源于stack exchange,提问作者Ruslan Shamsiev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:09:03