gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:22:56 42 4
gpt4 key购买 nike

我使用的是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个进程消失了,我不知道为什么,有人可以帮助我吗?非常感谢!

最佳答案

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

Multi-Process Firefox

<小时/>

多进程 Firefox

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

<小时/>

详细信息

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

<小时/>

这个用例

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

You can find a detailed discussion in Selenium : How to stop geckodriver process impacting PC memory, without calling driver.quit()?

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

<小时/>

片尾

您可以在Many process of Google Chrome (32 bit)中找到相关讨论

关于python - 如何使用 Python 退出通过 GeckoDriver 和 Selenium 启动的所有 Firefox 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58830622/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com