Selenium에서 종료하는 명령어는 총 3가지가 있습니다.
driver.Dispose();
driver.Close();
driver.Quit();
다 종료하다는 의미를 가지고 있는데 그 차이가 무엇인지 오늘 알아보고,
프로그램 종료 후 Selenium 서비스를 완전히 종료하는 법을 알려드리겠습니다.
IWebDriver driver = new InternetExplorerDriver(); //선언
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
driver.Close();
}
우선 Selenium 종료를 위해 driver.Close()를 시행해봅니다.
Selenium이 컨트롤 하고있는 웹 브라우저는 꺼지지만 다음과 같은 콘솔 창이 남아있게 됩니다.
이것으로 알 수 있는건 driver.Close()는 현재 Selenium이 컨트롤하고 있는 (활성화된) 창을 닫는 기능을 한다는 걸 알 수 있습니다.
웹 브라우저가 꺼진 이유는 제가 창을 하나만 열어놔서 그렇습니다. 탭을 여러 만들면 활성화된
창 하나만 딱 종료됩니다.
활성화된 창만 닫기 때문에 현재 창을 닫고 새로 창을 만들어서 재활용이 가능합니다.
즉 Selenium 서비스가 메모리에 그대로 상주하고 있습니다.
만약 Selenium을 완벽히 제거하기 위해선 close()를 사용해선 안됩니다.
IWebDriver driver = new InternetExplorerDriver(); //선언
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
driver.Quit();
}
그다음은 driver.Quit()입니다.
시행 시 웹 드라이버, 열린 모든 창을 닫습니다. 아까 같은 콘솔 창이 남아있지 않고 같이 종료된 것을 확인 가능합니다.
driver.Quit()이 작동하게 되면 driver.Dispose()를 호출합니다.
driver.Dispose()의 역할은 웹 드라이버, 열린 모든 창을 닫습니다.
즉 driver.Quit()의 역할, driver.Dispose()의 역할은 동일하다고 볼 수 있습니다.
정리
driver.Close()는 현재 Selenium이 작업하는 활성화된 창 하나를 종료함
(실제로 웹 드라이버는 종료되지 않고 메모리에 그대로 상주하기 때문에 웹 드라이버를 계속 재활용 가능함.)
창 하나에서만 작업한 경우 언뜻 보면 Quit()과 동일해 보이나 Selenium 서비스가 완전하게 종료되지 않는다.
즉 이것으로 종료됐다고 생각하고 웹 드라이버를 계속 선언하면 메모리에 계속 쌓이기 때문에
메모리 누수 문제가 발생할 수 있다.
driver.Quit() = driver.Dispose()로 브라우저에서 열린 모든 창, 웹 드라이버를 종료함
결론
IWebDriver driver = new InternetExplorerDriver(); //선언
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
driver.Quit();
}
프로그램 종료 시에 Selenium을 깔끔하게 지우고 싶다면
위 코드 driver.Quit()을 이용하세요. (대부분 dispose가 아니라 quit을 많이 사용하는듯함.)
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 자연스러운 정렬(natural sort) 사용하기 (0) | 2020.09.16 |
---|---|
[C#] Selenium IEDRIVER이 작동하지 않을때 해결법 (0) | 2020.03.23 |
[C#] 음성인식 검색기 만들기 0편. 구상 (0) | 2020.03.23 |
[C#] NAUDIO 로 마이크 볼륨레벨 가져오기 (0) | 2020.03.21 |
[C#] 구글 API를 이용한 마이크 음성인식 (0) | 2020.03.20 |