Chromedriver 종료 - Chromedriver jonglyo

[C#] Selenium 프로그램 종료 후 종료되게 하기와 Close,Quit, Dispose 차이 알아보기

Selenium에서 종료하는 명령어는 총 3가지가 있습니다. driver.Dispose(); driver.Close(); driver.Quit(); 다 종료하다는 의미를 가지고 있는데 그 차이가 무엇인지 오늘 알아보고, 프로그램 종료 후 Selenium 서..

pgh268400.tistory.com

차밍이

파이썬/자동화

[Python] selenium 종료하기 close와 quit의 차이점

2022. 4. 18. 18:44

목차

    요약

    Close 는 하나의 Tab만 종료함

    Quit은 Webdriver 전체를 종료함

    하나의 탭만 종료하고 기존의 webdriver 연결을 유지하려면 Close를 사용하면 된다.

    전체 Driver를 종료하고 프로그램을 끝내려면 Quit을 사용하면 된다.

    끝!

    Close

    close()현재 selenium webdriver가 활성화되어 있는 Tab만 종료

    2개 이상의 webdriver 탭이 열려있다면 현재 활성화되어 있는 webdriver만 종료

    나머지 webdriver는 연결 유지

    Quit

    quit()는 dispose() 함수를 불러와 열려있는 모든 webdriver를 종료하고 세션을 마침

    프로그램을 종료할 때 quit()을 사용하지 않는다면 webdriver 세션이 완벽하게 종료되지 않아 메모리 누수가 발생할 수 있다.

    하나의 webdriver가 열려있다면 close()와 quit() 어느 것을 사용해도 동일한 작업을 수행

    하지만 2개 이상의 webdriver가 열려있다면 close()와 quit() 다르게 작동 하는것을 유의해야함

    Reference

    https://daewoonginfo.blogspot.com/2019/06/python-selenium-close-quit.html

    selenium을 함수에서 사용할 경우. 자동으로 꺼지는 현상이 있다. 

    이를 방지하는 아주 간단한 방법이 있다. 일단 현상부터 알아보자.

    기본적인 chrome driver로  구글을 켜는 함수를 작성해보자.

    from selenium import webdriver
    import os
    import chromedriver_autoinstaller as AutoChrome
    import shutil
    
    def selenium_test():
        chrome_ver = AutoChrome.get_chrome_version().split('.')[0]
        path = os.path.join(os.getcwd(),chrome_ver)
        path = os.path.join(path,'chromedriver.exe')
        print(path)
        URL = 'https://www.google.co.kr/'
        driver = webdriver.Chrome(str(path))
        driver.get(url=URL)

    먼저 함수 설명을 하면 여기서 chrome_ver은 최신 크롬드라이버가 들어있는 폴더명을 뜻한다. 자세한것은 아래 링크를 통해 확인하자. "크롬드라이버 자동 업데이트 함수 작성">>

    https://trading-for-chicken.tistory.com/19

    06. selenium에 필요한 chrome_driver 자동 업데이트 기능 만들기.chromedriver_autoinstaller

    목표 : 현재 크롬 버전을 확인하여 최신 크롬드라이버로 업데이트 하고 구버전 크롬드라이버는 자동 삭제 selenium을 사용하기 위해서는 최신버전의 chrome_driver가 필수이다. 만약 크롬 드라이버가

    trading-for-chicken.tistory.com

    Chromedriver 종료 - Chromedriver jonglyo

    그리고 os.path.join을 통해 크롬드라이버 경로를 path에 지정해준다. 그리고 selenium을 통해서 구글을 열어준다.

    분명 구글창 open까지는 문제 없는데 바로 꺼지게 된다. 이유는 크롬드라이버를 함수에서 실행할 경우 함수가 종료 될 때 셀레니움도 함께 종료되기 때문이다. 즉, 셀레니움을 통한 크롬제어창이 꺼지지 않게 하기 위해서는 단순히 함수가 종료되지 않게 하면된다. 이때 while문을 이용한다.

    from selenium import webdriver
    import os
    import chromedriver_autoinstaller as AutoChrome
    import shutil
    
    def selenium_test():
        chrome_ver = AutoChrome.get_chrome_version().split('.')[0]
        path = os.path.join(os.getcwd(),chrome_ver)
        path = os.path.join(path,'chromedriver.exe')
        print(path)
        URL = 'https://www.google.co.kr/'
        driver = webdriver.Chrome(str(path))
        driver.get(url=URL)
        
        while(True):
        	pass

    여기처럼 while(True):pass 를 추가시켜줌으로써 while문을 지속 수행해 함수가 종료되지 않게하여 selenium제어창을 유지 할 수 있다.

    여느때와 변함없이 웹크롤링을 하려고 하는데 

    어제까지만 해도 잘 돌아가던 웹크롤러가 갑자기 먹통 ㄷㄷㄷ;

    크롬창이 잠깐 켜졌다가 순식간에 지 맴대로 꺼져버려서 크롤링이 안되는 상황이었다.

    에러 로그를 보니 URL도 제대로 받았고 창도 성공적으로 켜졌으나

    원인 모를 이유로 인해 chromeDriver가 강제종료 되는 현상이 나타났다.

    그러다 문득 어제 퇴근할때 쯤 크롬 브라우저가 업데이트 할 거냐고 물어봐서 까짓거 하거라 하고 확인을 눌렀던 것이 생각났다.

    아, 문제는 바로 내 손에서 나왔구나...

    크롬 브라우저의 엔진버전과 현재 사용하고있는 chromeDriver의 버전사이에 호환성 문제일 것 같다... 싶어서

    언능 새 버전의 chromeDriver를 받았더니 아주 잘된다.

    chromeDriver Download Page Link

    후...

    결론

    아무거나 막 업데이트 하지말자.

    어디서 어떻게 문제가 터질지 모르니까...

    업데이트를 해도 괜찮은 지 생각해보고, 찾아보고, 물어보고 하자.

    # Chrome WebBrowser 버전 확인방법

    1. 크롬 브라우저 오른쪽 상단  모양 클릭

    Chromedriver 종료 - Chromedriver jonglyo

    2. 메뉴 최하단 도움말 -> Chrome 정보 이동

    Chromedriver 종료 - Chromedriver jonglyo

    3. Chrome 버전 확인

    Chromedriver 종료 - Chromedriver jonglyo