最近需要做一个定时操作浏览器的任务,决定使用Selenium
库。由于对Python
不太熟悉,看Selenium
官方文档发现支持C#,果断决定使用C#进行操作。但是在执行过程中,发现每次程序结束后,chromedriver.exe
在后台残留无法清除,使用官方提供的driver.quit()
也没什么用。在网上查找解决方案,尝试了后发现都没有用处。此时,想到了Stack Overflow
,果然,集合全球的智慧是没有什么解决不了的问题的。我在这里作为一个搬运工,将代码摘抄下面。
using System.Diagnostics;
using System.Management;
public void KillProcessAndChildren(string p_name)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher
("Select * From Win32_Process Where Name = '"+ p_name +"'");
ManagementObjectCollection moc = searcher.Get();
foreach (ManagementObject mo in moc)
{
try
{
KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
}
catch (ArgumentException)
{
break;
}
}
}
public void KillProcessAndChildren(int pid)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher
("Select * From Win32_Process Where ParentProcessID=" + pid);
ManagementObjectCollection moc = searcher.Get();
foreach (ManagementObject mo in moc)
{
try
{
KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
}
catch
{
break;
}
}
try
{
Process proc = Process.GetProcessById(pid);
proc.Kill();
}
catch (ArgumentException)
{
// Process already exited.
}
}
//调用函数
try
{
KillProcessAndChildren("chromedriver.exe");
}
catch
{
}