杰瑞科技汇

Python Selenium如何正确退出?

核心方法对比

driver.quit()

这是最推荐、最常用的退出方法。

Python Selenium如何正确退出?-图1
(图片来源网络,侵删)
  • 功能:关闭所有由 WebDriver 会话打开的浏览器窗口,并彻底终止 WebDriver 进程
  • 结果
    • 所有浏览器窗口关闭。
    • 浏览器进程结束。
    • WebDriver 进程(如 chromedriver.exe)被销毁,释放所有相关资源。
  • 使用场景:当一个测试脚本运行完毕,或者你想完全结束当前会话时,都应该使用 driver.quit(),它能确保没有残留进程,是“干净”的退出方式。

driver.close()

  • 功能:只关闭当前活动的浏览器窗口或标签页。
  • 结果
    • 当前窗口关闭。
    • 如果这是唯一打开的窗口,那么整个浏览器和 WebDriver 进程也会随之关闭。
    • 如果还有其他窗口打开,WebDriver 进程会继续在后台运行,管理剩余的窗口。
  • 使用场景:当你打开了多个窗口或标签页,只想关闭其中一个时使用,但在大多数自动化测试场景中,我们通常只有一个会话窗口,close() 的使用频率远低于 quit()

代码示例

下面是一个完整的示例,展示了如何使用 quit(),并处理可能出现的异常。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import WebDriverException
# 1. 初始化 WebDriver (这里以 Chrome 为例)
try:
    driver = webdriver.Chrome()
    driver.implicitly_wait(10) # 设置隐式等待
    # 2. 打开一个网页
    driver.get("https://www.example.com")
    print(f"当前页面标题: {driver.title}")
    # 3. 模拟一些操作 (例如点击一个链接,打开新窗口)
    # 假设这个链接会打开一个新标签页
    # link = driver.find_element(By.LINK_TEXT, "More information...")
    # link.click()
    # print(f"点击后窗口句柄数量: {len(driver.window_handles)}")
    # 4. 完成操作后,退出会话
    print("操作完成,正在退出浏览器...")
    driver.quit()  # <-- 推荐使用 quit()
    print("浏览器已成功退出。")
except WebDriverException as e:
    print(f"WebDriver 操作出错: {e}")
    # 即使在出错时,也最好尝试退出
    if 'driver' in locals() and driver:
        driver.quit()
except Exception as e:
    print(f"发生未知错误: {e}")
    # 即使在出错时,也最好尝试退出
    if 'driver' in locals() and driver:
        driver.quit()
finally:
    # finally 块中的代码无论如何都会执行
    print("脚本执行结束。")

最佳实践和推荐用法

  1. 总是使用 driver.quit():在你的测试脚本或自动化任务的最后,使用 driver.quit() 是标准做法,它能确保会话被完全清理,避免资源泄露。

  2. 使用 try...finally 结构:这是最健壮的方式,无论脚本是正常执行完毕还是中途抛出异常,finally 块中的代码都会被执行,这样可以保证即使脚本出错,driver.quit() 也会被调用,防止浏览器和驱动进程残留。

    driver = webdriver.Chrome()
    try:
        # ... 你的自动化操作 ...
        driver.get("https://www.baidu.com")
        print("页面加载成功")
    finally:
        print("执行退出操作")
        driver.quit()
  3. 使用 with 语句 (Python 3.10+):对于支持 WebDriver 上下文管理器的版本(Selenium 4+ 对某些驱动支持更好),可以使用 with 语句,它会自动在代码块执行完毕后调用 quit(),非常优雅。

    Python Selenium如何正确退出?-图2
    (图片来源网络,侵删)
    # 注意:此功能依赖于 Selenium 4+ 和驱动的支持
    from selenium import webdriver
    # 使用 with 语句,会自动调用 quit()
    with webdriver.Chrome() as driver:
        driver.get("https://www.python.org")
        print(f"页面标题: {driver.title}")
    # 退出 with 块后,driver.quit() 会被自动调用
    print("已自动退出浏览器。")

如何检查是否正确退出?

如果你不确定是否正确退出,可以检查你的任务管理器(Windows)或活动监视器(macOS)。

  • 错误情况(使用 close() 或未退出):你可能会看到 chrome.exechromedriver.exe 进程还在后台运行。
  • 正确情况(使用 quit():在脚本运行完毕后,这些进程应该会自动消失。
方法 driver.quit() driver.close()
功能 关闭所有窗口,终止整个 WebDriver 会话 只关闭当前活动窗口
进程影响 销毁浏览器和 WebDriver 进程 可能残留 WebDriver 进程
推荐度 ⭐⭐⭐⭐⭐ (强烈推荐,用于脚本结束) ⭐⭐ (用于多窗口场景)
使用场景 测试脚本结束,需要完全清理资源 需要在多个窗口/标签页间切换并关闭其中一个

记住这个简单的规则:当一个任务完成时,用 quit()

Python Selenium如何正确退出?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇