如何在循环中关闭并重启Selenium浏览器实例以释放内存?
问题分析与解决方案
错误原因拆解
- 重复初始化Driver:你一开始先创建了
driver = webdriver.Chrome(),之后才配置options并重新赋值driver,这不仅多余,还可能残留无效会话。 - 关闭顺序错误:
driver.quit()会彻底终止浏览器会话并关闭所有窗口,之后再调用driver.close()必然报错,因为会话已经不存在了。 - 重启Driver未传入配置:重新创建
driver = webdriver.Chrome()时没有带之前的options参数,导致新浏览器实例没加载你的用户配置文件,自然没有登录状态的Cookie。 - 路径转义问题: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
相关产品推荐
相关产品推荐

