带有 Selenium 的 Python 脚本在手动关闭应用程序时使 firefox.exe 运行

标签 python selenium selenium-webdriver firefox geckodriver

我有一个在 Selenium 上运行的简单脚本。 我用它制作了一个 .exe 文件,它工作得很好,但我注意到一个问题。 .exe 按预期打开控制台,但如果我在脚本运行时手动关闭控制台,它会在“进程”选项卡中打开 firefox.exe。

zombie processes after manually closing .exe

我的问题是:如果脚本的执行被手动中断,我如何让 Python 关闭这些进程?

我猜我需要捕获异常,但是如果我们手动停止程序,Python 会抛出什么异常?

最佳答案

理想情况下,调用quit() 会删除WebDriver 的当前实例。变体和当前浏览上下文

但是,如果您通过关闭控制台手动中断脚本的执行,浏览上下文 会在视觉上关闭但数量众多 browser processes仍会继续消费CPUmemory


解决方案

在这些情况下,您必须使用以下任一解决方案显式终止 Browser 进程和 WebDriver 实例:

  • Java 解决方案(Windows):

    import java.io.IOException;
    
    public class Kill_ChromeDriver_GeckoDriver_IEDriverserver 
    {
        public static void main(String[] args) throws Exception 
        {
            Runtime.getRuntime().exec("taskkill /F /IM geckodriver.exe /T");
            Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe /T");
            Runtime.getRuntime().exec("taskkill /F /IM IEDriverServer.exe /T");
        }
    }
    
  • Python 解决方案(Windows):

    import os
    os.system("taskkill /f /im geckodriver.exe /T")
    os.system("taskkill /f /im chromedriver.exe /T")
    os.system("taskkill /f /im IEDriverServer.exe /T")
    
  • Python 解决方案(跨平台):

    import os
    import psutil
    
    PROCNAME = "geckodriver" # or chromedriver or IEDriverServer
    for proc in psutil.process_iter():
        # check whether the process name matches
        if proc.name() == PROCNAME:
            proc.kill()
    

引用资料

您可以在以下位置找到一些详细的讨论:

关于带有 Selenium 的 Python 脚本在手动关闭应用程序时使 firefox.exe 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62955373/

相关文章:

python - 在Python中重新排列图像

java - 如何在Java(Selenium)中从十进制数中删除不需要的零。但是如果最后一位数字不为0,那么应该显示它

c# - 有没有更快的方法来使用 Selenium C# 填充输入表单

ruby-on-rails - 在 Capybara 浏览列表?

firefox - Selenium WebDriver无法与Firefox 20连接

python - 为什么在 pygame 中屏幕上的位图文本后面有一个矩形?

python - 使用 pybind11 混合类型转换和不透明类型

python - 在 Python 3.4 中重写代码时出现 Bad Zip File 错误

java - 关闭另一个 iframe 时,Selenium 切换到错误的 iframe

java - Selenium 2/WebDriver 迁移问题 WebDriver 未选择正确的元素