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

时间:2019-11-13 05:05:03

标签: 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:
        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

当firefox winodw显示时,我注意到任务管理器中有6个过程,就像这样 enter image description here

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

enter image description here

然后我测试方法2

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

enter image description here

您可以看到仍然有5个进程处于活动状态,只有1个进程消失了,我不知道为什么,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

通过 Mozilla Firefox 执行自动测试时,您已经发现可能有六个 Mozilla Firefox 进程正在运行可以通过Windows任务管理器的Processes标签查看。

Multi-Process Firefox


多进程Firefox

根据Multi-Process Firefox: everything you need to know文章,以提高浏览器的稳定性,性能和安全性。 Firefox 已将稳定的Firefox中的内容进程数增加到四个,现在是多进程Firefox,也称为电解 e10S 。多进程体系结构有助于将任务分解为进程,因为 Electrolysis 功能可在后台子进程中托管,渲染或执行与Web相关的内容,这些子进程可通过各种ipdl协议与“父” Firefox浏览器进行通信。此外,多进程Firefox将NPAPI插件,媒体播放和Web内容移至子进程,从而将其与浏览器的核心分开。


详细信息

在运行进程管理器(即Windows Task Manager)时,您会观察到多个firefox.exe进程,这实际上意味着已启用电解。显然,Firefox应该像以前一样运行,但是理想情况下启用多进程功能应该可以立即提高浏览器的性能和稳定性。但是,您可能会发现内存使用率比平常高。 Mozilla确认,带电解的Firefox将使用约 20% RAM 。您可以更改Firefox用于其多进程功能的进程数。


此用例

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

  

您可以在Selenium : How to stop geckodriver process impacting PC memory, without calling driver.quit()?

中找到详细的讨论

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


Outro

您可以在Many process of Google Chrome (32 bit)

中找到相关的讨论