如何退出使用Python通过GeckoDriver和Selenium启动的所有Firefox进程

如何退出使用Python通过GeckoDriver和Selenium启动的所有Firefox进程,python,selenium,firefox,geckodriver,selenium-firefoxdriver,Python,Selenium,Firefox,Geckodriver,Selenium Firefoxdriver,我正在使用python 3.7+selenium+geckodriver.exe+firefox 70.0.1x64,我知道driver.quit()可以关闭firefox窗口,但在某些情况下我无法完全退出firefox,我不知道为什么,这是我的代码: from selenium import webdriver import time def func1(): driver = webdriver.Firefox() i = 0 while True:

我正在使用python 3.7+selenium+geckodriver.exe+firefox 70.0.1x64,我知道
driver.quit()
可以关闭firefox窗口,但在某些情况下我无法完全退出firefox,我不知道为什么,这是我的代码:

from selenium import webdriver
import time

def func1():
    driver = webdriver.Firefox()
    i = 0
    while True:
        try:
            if i > 10 and driver is not None:
                driver.quit()
                driver = None
                print('quit success')
            i += 1
            print(i)
            time.sleep(1)
        except KeyboardInterrupt:
            if driver is not None:
                driver.quit()
                driver = None
                print('keyboard quit success')

if __name__ == '__main__':
    func1()
使用此代码,有两种方法可以关闭firefox窗口:

1-10秒

2-使用Ctrl+C

然后我测试方法1

python test1.py
当FirefoxWinODW出现时,我注意到TaskManager中有6个进程,如下所示

然后我等了10秒钟,一切都好了,6个过程结束了,就像这样:

然后我测试方法2

我在10秒内按Ctrl+C,结果如下:

你可以看到还有5个进程还活着,只有1个进程不见了,我不知道为什么,有人能帮我吗?非常感谢

当通过Mozilla Firefox执行自动化测试时,正如您所观察到的,可能有六个Mozilla Firefox进程正在运行,这可以通过Windows任务管理器的
进程
选项卡观察到


多进程Firefox 根据这篇文章,为了提高浏览器的稳定性、性能和安全性,Firefox已经将内容进程的数量增加到4个,以保证Firefox中稳定的用户群,现在是多进程Firefox,也称为电解e10S。多进程体系结构有助于将任务划分为进程,因为功能在后台子进程中承载、呈现或执行与web相关的内容,这些子进程通过各种ipdl协议与“父”Firefox浏览器通信。此外,多进程Firefox将NPAPI插件、媒体播放和web内容移动到子进程,从而将它们与浏览器核心分离


细节 当您运行进程管理器时,您可以观察到几个
firefox.exe
进程,即Windows任务管理器,它本质上意味着启用了电解。显然,Firefox应该像以前一样运行,但理想情况下,启用多进程功能可以立即提高浏览器的性能和稳定性。但是,您可能会注意到RAM的使用率高于正常情况。Mozilla证实,Firefox的电解功能将使用大约20%的内存。您可以更改Firefox多进程功能使用的进程数


这个用例 在您的第一个用例中,当您调用
driver.quit()
时,父Firefox进程和所有子Firefox进程以及父Firefox进程都会以编程方式销毁

您可以在中找到详细的讨论

在您的第二个用例中,在打印4之后,当发生
时,您按下了Ctrl和c键,并且您的程序被中止,可能GeckoDriver会失去对Mozilla Firefox浏览器进程的控制。但是,仍然1进程通过
driver.quit()
终止,但其余进程仍然悬空


奥特罗
你可以在

中找到相关的讨论,非常感谢,我认为你是对的,在我测试后,我发现在我按Ctrl+C后,6个进程变为5个进程,甚至没有驱动程序。quit(),这一定是因为Ctrl+C导致geckodriver之前关闭firefox,我决定用“键盘”模块代替Ctrl+C。问题解决了。谢谢。