Selenium执⾏完毕未关闭chromedrivergeckodriver进程的解决办法。。。
操作chrome浏览器需要有ChromeDriver驱动来协助。webdriver中关浏览器关闭有两个⽅法,⼀个叫quit,⼀个叫close。
1/**
2  * Close the current window, quitting the browser if it's the last window currently open.
3*/
4void close();
5
6/**
7  * Quits this driver, closing every associated window.
8*/
9void quit();
通过查看以上官⽅声明⽂档,可以看出close⽅法是关闭当前窗⼝,这个当前如何理解?就是driver实例操作的页⾯,叫当前。如果当前窗⼝只有⼀个tab,那么这个close⽅法就相当于关闭了
浏览器。quit⽅法就是直接退出并关闭所有关联的tab窗⼝。所以,close⽅法⼀般关闭⼀个tab,quit⽅法才是我们认为的完全关闭浏览器⽅法。为了证明这个,我们⽤⼀个例⼦去演⽰:
1package lessons;
2
3import org.openqa.selenium.By;
4import org.openqa.selenium.WebDriver;
5import org.openqa.selenium.chrome.ChromeDriver;
6
7public class FindElement_LinkText {
8
9public static void main(String[] args) throws Exception {
10
11        System.setProperty("webdriver.chrome.driver", ".\\Tools\\");
12
13        WebDriver driver = new ChromeDriver();
14        driver.manage().window().maximize();
15
16        ("www.baidu");
17
18        driver.close();
19//driver.quit();
20    }
21
22 }
通过切换注销最后两⾏代码,分别运⾏,观察这两种⽅法的实际效果。当使⽤close⽅法的时候,因为只有百度⾸页这个tab,所以会关闭浏览器,但是通过查看任务管理器发
现,ChromeDriver进程仍存在内存中。如果使⽤quit⽅法,整个浏览器都直接关闭,ChromeDriver进程也会被结束。
ChromeDriver是轻量级的服务,在单任务或不需要频繁启动浏览器的情况下,使⽤driver.quit()关闭浏览器,可以正常结束ChromeDriver进程。若在⼀个⽐较⼤的套件中频繁的启动关闭,会
增加⼀个⽐较明显的延时导致浏览器进程不被关闭的情况发⽣,为了避免这⼀状况我们可以通过ChromeDriverService来控制ChromeDriver进程的⽣死,达到⽤完就关闭的效果避免进程占
⽤情况出现(Running the  in a child process)。具体实现如下:
1 ChromeDriverService service = new ChromeDriverService.Builder() .usingChromeDriverExecutable(new File("E:\\Selenium WebDriver\\chromedriver_win_23.0.1240.0\\")).usingAnyFreePort().build(
2 service.start();
3 driver = new ChromeDriver();
("www.baidu");
5 driver.quit();
6// 关闭 ChromeDriver 接⼝
7 service.stop();
以上讨论的均是java版的实现,对于python来说是使⽤service库来实现控制chromedriver的开启和关闭。
1from selenium.webdriver.chrome.service import Service
创建的时候需要把的位置写在Service的XXX部分,需要调⽤他的命令⾏⽅法,不然报错,然后启动就可以了。
1 c_service = Service('xxx')
2 c_servicemand_line_args()
3 c_service.start()
4 driver = webdriver.Chrome()
chrome浏览器官方("www.baidu")
关闭的时候⽤quit⽽不是采⽤close,close只会关闭当前页⾯,quit会退出驱动并且关闭所关联的所有窗⼝,最后执⾏完以后就关闭。
driver.quit()
c_service.stop()
嫌⿇烦也可以直接使⽤python的os模块执⾏下⾯两句话结束进程
1 os.system('taskkill / /F')
2 os.system('taskkill / /F')

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。