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

如何在循环中关闭并重启Selenium浏览器实例以释放内存?

问题分析与解决方案

错误原因拆解

  1. 重复初始化Driver:你一开始先创建了driver = webdriver.Chrome(),之后才配置options并重新赋值driver,这不仅多余,还可能残留无效会话。
  2. 关闭顺序错误:driver.quit()会彻底终止浏览器会话并关闭所有窗口,之后再调用driver.close()必然报错,因为会话已经不存在了。
  3. 重启Driver未传入配置:重新创建driver = webdriver.Chrome()时没有带之前的options参数,导致新浏览器实例没加载你的用户配置文件,自然没有登录状态的Cookie。
  4. 路径转义问题:Windows路径里的单反斜杠\在Python中会被解析为转义字符,可能导致配置文件路径识别失败。

修改后的完整代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def init_driver():
    # 封装Driver初始化逻辑,方便重复调用
    options = Options()
    # 用原始字符串避免路径转义问题,或者用双反斜杠
    options.add_argument(r"user-data-dir=C:\Users\Name\Desktop\ProjectProfile\1")
    # detach设为False,确保quit能彻底关闭浏览器进程
    options.add_experimental_option("detach", False)
    options.set_capability("pageLoadStrategy", "eager")
    driver = webdriver.Chrome(options=options)
    driver.maximize_window()
    return driver

# 初始化第一个Driver实例
driver = init_driver()
x = 0
while x <= 10:
    driver.get("https://example.com")
    My_code()  # 你的业务逻辑函数
    
    if x == 5:
        # 先彻底关闭旧的Driver会话
        driver.quit()
        # 重新初始化Driver,自动加载配置文件
        driver = init_driver()
    
    x += 1  # 补上循环递增,避免无限循环

# 循环结束后关闭最后一个Driver实例
driver.quit()

关键修改说明

  • 封装初始化函数:把Driver的配置和创建逻辑封装成init_driver(),每次重启都调用这个函数,确保配置一致,避免重复代码。
  • 修复路径转义:用原始字符串r"路径"或者双反斜杠\\,保证配置文件路径被正确识别。
  • 调整detach选项:设为False,确保driver.quit()能彻底关闭浏览器进程,避免内存残留。
  • 正确关闭与重启:只调用driver.quit()关闭旧会话,然后用带options的init_driver()创建新实例,保证加载用户配置和登录状态。

额外优化建议

  • 可以把重启间隔(比如5次)改成变量,方便后续调整。
  • 给My_code()添加异常捕获,避免单个任务失败导致脚本崩溃,异常处理中也要确保Driver被正确关闭。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:12:52