首页 > 解决方案 > 如何在使用 Selenium 和 Python 执行测试后关闭 Headless Firefox

问题描述

我一直在关注教程来学习如何使用 Selenium,并且我刚刚成功运行了以下代码:

from selenium.webdriver import Firefox
from selenium.webdriver.firefox.options import Options

opts = Options()opts.headless=True
assert opts.headless # Operating in headless mode
browser = Firefox(options=opts)browser.get('https://bandcamp.com')
browser.find_element_by_class('playbutton').click()

如何确保无头 Firefox 不再运行?我运行了这段代码两次,现在两首歌曲正在相互播放。任何帮助表示赞赏,我只是想确保后台没有运行任何东西!

标签: pythonseleniumfirefoxgeckodriverheadless

解决方案


无论是基于 GUI 的浏览器还是浏览器,在测试执行结束时,您应该始终调用browser.quit()哪个调用/shutdown endpoint,然后WebDriver实例和浏览上下文都被完全销毁,关闭所有页面/选项卡/窗口。

因此,您的有效代码块将是:

# previous lines of code
browser.find_element_by_class('playbutton').click()
browser.quit()

您可以在PhantomJS web driver stays in memory中找到详细讨论


然而,在极少数情况下,可能会有WebDriver的残留实例,例如ChromeDriver占用内存,在这些情况下,您需要在触发下一个测试执行之前用蛮力杀死它们,如下所示:

  • Python解决方案(Windows):

    import os
    
    os.system("taskkill /f /im geckodriver.exe /T")
    os.system("taskkill /f /im chromedriver.exe /T")
    os.system("taskkill /f /im IEDriverServer.exe /T")
    
  • Python解决方案(跨平台):

    import os
    import psutil
    
    PROCNAME = "geckodriver" # or chromedriver or IEDriverServer
    for proc in psutil.process_iter():
        # check whether the process name matches
        if proc.name() == PROCNAME:
        proc.kill()
    

您可以在 Selenium 中找到详细讨论:如何在不调用 driver.quit() 的情况下停止影响 PC 内存的 geckodriver 进程?


推荐阅读