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

Lad*_*018 5 python firefox selenium selenium-firefoxdriver geckodriver

我正在使用 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()
Run Code Online (Sandbox Code Playgroud)

通过这段代码,有两种方法可以关闭 Firefox 窗口:

1-等待 10 秒。

2-使用 Ctrl+C。

然后我测试方法1

python test1.py
Run Code Online (Sandbox Code Playgroud)

当firefox winodw显示时,我注意到任务管理器中有6个进程,就像这样 在此输入图像描述

然后我等了10秒,一切都很好,6个进程消失了,像这样:

在此输入图像描述

然后我测试方法2

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

在此输入图像描述

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

Deb*_*anB 4

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

多进程火狐


多进程火狐

根据文章多进程 Firefox:提高浏览器稳定性、性能和安全性所需了解的一切Firefox已将内容进程的数量增加到四个,以保证 Firefox 中的稳定人口,现在是多进程 Firefox,也称为如电解e10S。多进程架构有助于将任务分离为进程,因为Electrothesis功能在后台子进程中托管、渲染或执行 Web 相关内容,这些子进程通过各种 ipdl 协议与“父”Firefox 浏览器进行通信。此外,多进程 Firefox 将 NPAPI 插件、媒体播放和 Web 内容移动到子进程,从而将它们与浏览器的核心分开。


细节

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


这个用例

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

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

在你的第二个用例中,你按下了Ctrl4c,当发生时,你的程序被中止,大概GeckoDriver失去了对Mozilla Firefox浏览器进程的控制。然而,仍有1 个进程被终止,但其余进程仍然悬空。KeyboardInterruptdriver.quit()


尾奏

您可以在Google Chrome(32位)的许多进程中找到相关讨论