定时执行Chromedriver爬虫超时后,如何自动关闭浏览器窗口?
解决ChromeDriver超时后残留浏览器窗口的问题
这个问题我之前帮不少开发者解决过——当Selenium脚本因为超时崩溃时,残留的Chrome窗口确实很烦人,尤其是用Windows任务计划自动运行的场景。下面给你几个可靠的解决方案,从基础到进阶都有:
1. 用try-finally块确保浏览器始终关闭
这是最基础也是最稳妥的异常处理方式,不管脚本是正常执行完成,还是因为超时/其他异常终止,finally块里的代码都会执行,保证浏览器进程被彻底终止。
from selenium import webdriver from selenium.common.exceptions import TimeoutException driver = None try: # 初始化ChromeDriver driver = webdriver.Chrome() # 设置页面加载超时为30秒(和你当前的超时时间一致) driver.set_page_load_timeout(30) # 尝试访问目标网页 driver.get("你的目标网页URL") # 这里写你的网页爬取逻辑 # ... except TimeoutException: print("页面加载超时,准备关闭浏览器") # 不管有没有异常,都会执行这个块 finally: if driver is not None: # 用quit()而不是close()! # close()只关闭当前窗口,quit()会终止整个ChromeDriver进程和所有关联窗口 driver.quit()
2. 使用上下文管理器(with语句)更简洁
Python的上下文管理器会自动管理资源生命周期,with块结束时,不管有没有异常,都会自动调用driver.quit(),代码更简洁,也不容易出错。
from selenium import webdriver from selenium.common.exceptions import TimeoutException # 用with包裹driver初始化,自动处理关闭逻辑 with webdriver.Chrome() as driver: driver.set_page_load_timeout(30) try: driver.get("你的目标网页URL") # 爬取逻辑写在这里 # ... except TimeoutException: print("页面加载超时") # with块结束后,driver会自动执行quit(),无需手动调用
3. 极端情况:强制杀死Chrome进程
如果因为某些异常(比如Driver进程卡死)导致driver.quit()失效,你可以在finally块里加上强制杀死Windows进程的命令,彻底清理残留窗口:
import os from selenium import webdriver from selenium.common.exceptions import TimeoutException driver = None try: driver = webdriver.Chrome() driver.set_page_load_timeout(30) driver.get("你的目标网页URL") # 爬取逻辑 # ... except TimeoutException: print("页面加载超时") finally: # 先尝试正常关闭 if driver is not None: try: driver.quit() except Exception as e: print(f"正常关闭失败,强制杀死进程: {e}") # 强制杀死所有Chrome相关进程(谨慎使用,确保没有其他用户正在使用Chrome) os.system("taskkill /f /im chrome.exe /t")
关键注意点:
- 永远用
driver.quit()而不是driver.close():close()仅关闭当前活动窗口,若脚本打开了多个窗口,残留窗口会继续存在;quit()会终止整个ChromeDriver服务和所有关联的浏览器进程。 - 任务计划的补充设置:如果你的任务计划设置了“错过计划执行时间后,下次开机时立即执行”,可以确保脚本在开机后自动重试,同时上面的代码会保证每次执行后都清理浏览器窗口。
内容的提问来源于stack exchange,提问作者Anish Khanna
相关产品推荐
相关产品推荐

