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

How to quit all the Firefox processes which gets initiated through GeckoDriver and Selenium using Python

我正在使用 python 3.7 + selenium + geckodriver.exe + firefox 70.0.1x64,我知道 driver.quit() 可以关闭 firefox window,但在某些情况下我可以没有完全退出 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 window:

1-等待 10 秒。

2-使用 Ctrl+C。

那我测试方法1

python test1.py

当firefox winodw显示时,我注意到任务管理器中有6个进程,像这样

然后我等了10秒,一切正常,6个进程没了,像这样:

那我测试方法2

我在 10 秒内按了 Ctrl+C,结果是这样的:

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

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


多进程 Firefox

根据文章 Multi-Process Firefox: everything you need to know 提高浏览器的稳定性、性能和安全性 Firefox 已将 Firefox 中的内容进程数量增加到 4现在是多进程 Firefox,也称为 Electrolysise10S。多进程架构有助于将任务分成多个进程,因为 Electrolysis 功能在后台子进程中托管、呈现或执行 Web 相关内容,这些子进程通过各种 ipdl 与 "parent" Firefox 浏览器通信协议。此外,多进程 Firefox 将 NPAPI 插件、媒体播放和 Web 内容移动到子进程,从而将它们与浏览器的核心分开。


详情

当您 运行 进程管理器时,您可以观察到几个 firefox.exe 进程,即 Windows 任务管理器,它本质上意味着 Electrolysis 已启用。显然 Firefox 应该 运行 和以前一样,但理想情况下启用多进程功能应该会立即提高浏览器的性能和稳定性。但是,您可能会注意到 RAM 使用率高于平时。 Mozilla 确认带有 Electrolysis 的 Firefox 将使用大约 20% 更多 RAM。您可以更改 Firefox 为其多进程功能使用的进程数。


这个用例

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

You can find a detailed discussion in

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


结尾

您可以在

中找到相关讨论