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

定时执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:37:58