Python chromedriver 종료 - Python chromedriver jonglyo

보통 selenium으로 크롤링을 하거나 인터넷으로 하는 단순 반복 작업을 하게 됩니다. 이럴 때에 처음에는 잘 동작하는지 눈으로 확인하곤 하지만, 정상 동작한다면 굳이 크롬 창을 띄워서 확인하고 싶지 않은 경우가 있을 텐데요. 이때 background에서 selenium을 실행하는 방법을 알아 보겠습니다.

selenium으로 chrome driver를 실행할 때 옵션을 주면 됩니다. 코드로 확인해 보겠습니다.

from selenium import webdriver

# 옵션 생성
options = webdriver.ChromeOptions()
# 창 숨기는 옵션 추가
options.add_argument("headless")

# driver 실행
driver = webdriver.Chrome(chrome_driver_dir, options=options)

"""
원하는 작업 실행
"""

# driver 종료
driver.quit()

위와 같이 코드를 실행하면 창이 켜지지 않은 채로 동작하고 있습니다. 창이 보이지 않기 때문에 보여드릴 방법이 없네요.. 원하는 작업을 할 때 option을 추가해서 직접 실행해보시면 됩니다!

단, 주의해야 할 점은 창이 보이지 않는다고 동작이 멈춘게 아니기 때문에, 원하는 작업이 끝났으면 quit() 함수로 반드시 종료해주어야 합니다. 그러지 않으면 backgroud에서 chrome이 계속 리소스를 잡아먹고 있게 됩니다.

python으로 브라우저 컨트롤시에 selenium를 이용해서 컨트롤하는 경우

드라이버 생성을 특정함수 안에서 하게 되면 함수가 종료될때 브라우저도 같이 종료되는데,

가끔 종료되지 않았으면 할때 아래 방법대로 하면 됩니다.(다른 방법도 있을건데 잘 몰라서..)

 

핵심은 option에 add_experimental_option를 추가하고 "detach"를 True로 활성화 하면됩니다.

 

Edge의 경우(Chrome이나 다른 브라우저는 확인하지 않아서 잘 모름, 뭐 비슷하지 않을까 합니다.)

 

pip install msedge-selenium-tools

 

from msedge.selenium_toos import Edge, EdgeOption

이렇게 하면 from selenium import webdriver를 하지 않아도 됩니다.(당연히 msedgedriver.exe도 받지 않아도 되고)

 

edge_options = EdgeOptions()

edge_options.use_chromium = True

edge_options.add_experimental_option("detach", True)

 

browser = Edge(options=edge_options)

browser.get("http://~")

공유하기

게시글 관리

구독하기In CAPAS

'기타' 카테고리의 다른 글

VSCode에서 Rust개발하기 - 개발환경설정(Windows 10)  (0)2021.03.23앞으로  (0)2015.03.10컬러매치  (0)2013.11.14


WRITTEN BYCAPAS

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()를 시행해봅니다.

 

Python chromedriver 종료 - Python chromedriver jonglyo

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을 많이 사용하는듯함.)

 

 

 

공유하기

게시글 관리

구독하기파일의 IT 블로그

저작자표시 비영리 변경금지

  • 카카오스토리
  • 트위터
  • 페이스북

'프로그래밍 > 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