首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从内存中释放Selenium chromedriver.exe

从内存中释放Selenium chromedriver.exe
EN

Stack Overflow用户
提问于 2014-01-24 06:40:48
回答 28查看 174.1K关注 0票数 121

我设置了一段python代码来运行Selenium chromedriver.exe。在运行结束时,我让browser.close()关闭实例。(browser = webdriver.Chrome())我认为它应该从内存中释放chromedriver.exe (我使用的是Windows7)。但是,每次运行后,内存中都会保留一个chromedriver.exe实例。我希望有一种方法可以用python编写一些东西来终止chromedriver.exe进程。显然,browser.close()不能完成这项工作。谢谢。

EN

回答 28

Stack Overflow用户

发布于 2014-01-24 06:48:04

对于Selenium API,您确实应该调用browser.quit(),因为此方法将关闭所有窗口并终止进程。您仍然应该使用browser.quit()

然而,在我的工作场所,我们注意到在Java平台中执行chromedriver测试时出现了一个巨大的问题,即使在使用了browser.quit()之后,chromedriver.exe实际上仍然存在。为了应对这个问题,我们创建了一个类似下面的批处理文件,它只是强制关闭了进程。

kill_chromedriver.bat

代码语言:javascript
复制
@echo off
rem   just kills stray local chromedriver.exe instances.
rem   useful if you are trying to clean your project, and your ide is complaining.

taskkill /im chromedriver.exe /f

由于chromedriver.exe不是一个巨大的程序,也不会消耗太多内存,所以您不应该每次都运行它,而是只在它出现问题时运行。例如,在Eclipse中运行Project->Clean时。

票数 85
EN

Stack Overflow用户

发布于 2014-01-24 06:47:59

browser.close()将只关闭当前的chrome窗口。

browser.quit()应该关闭所有打开的窗口,然后退出webdriver。

票数 46
EN

Stack Overflow用户

发布于 2016-02-29 13:05:28

从理论上讲,调用browser.Quit将关闭所有浏览器选项卡并终止该进程。

然而,在我的例子中,我无法做到这一点-因为我并行运行了多个测试,我不想用一个测试来关闭对其他测试的窗口。因此,当我的测试运行完后,仍然有许多"chromedriver.exe“进程在运行。

为了克服这个问题,我编写了一个简单的清理代码(C#):

代码语言:javascript
复制
Process[] chromeDriverProcesses =  Process.GetProcessesByName("chromedriver");

foreach(var chromeDriverProcess in chromeDriverProcesses)
{
    chromeDriverProcess.Kill();
}
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21320837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档