我有一个在 Selenium 上运行的简单脚本。 我用它制作了一个 .exe 文件,它工作得很好,但我注意到一个问题。 .exe 按预期打开控制台,但如果我在脚本运行时手动关闭控制台,它会在“进程”选项卡中打开 firefox.exe。
我的问题是:如果脚本的执行被手动中断,我如何让 Python 关闭这些进程?
我猜我需要捕获异常,但是如果我们手动停止程序,Python 会抛出什么异常?
最佳答案
理想情况下,调用quit()
会删除WebDriver 的当前实例。变体和当前浏览上下文。
但是,如果您通过关闭控制台手动中断脚本的执行,浏览上下文 会在视觉上关闭但数量众多 browser processes仍会继续消费CPU和 memory
解决方案
在这些情况下,您必须使用以下任一解决方案显式终止 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/