Selenium SessionNotCreatedException 해결 완벽 가이드 ChromeDriver 버전 불일치 오류 종결

Selenium으로 크롤링 자동화를 구축했는데 Chrome이 자동 업데이트되면서 "SessionNotCreatedException: This version of ChromeDriver only supports Chrome version..." 오류가 반복적으로 발생한다면, 이제 드라이버 버전 관리 방식을 근본적으로 바꿔야 할 시점입니다. Selenium 4.6 이후부터는 Selenium Manager가 내장되어 있어 수동으로 chromedriver를 관리할 필요가 사라졌으며, 외부 패키지인 webdriver_manager를 활용하면 더욱 안정적인 자동화 환경을 구축할 수 있습니다. 이 글에서는 버전 불일치 오류의 원인과 해결책, 그리고 Chrome 자동 업데이트 제어 방법까지 실무에서 검증된 솔루션을 제시합니다.

1. SessionNotCreatedException 오류 원인 진단

과거 Selenium 3.x 시절에는 Chrome 브라우저 버전에 정확히 일치하는 ChromeDriver 바이너리를 수동으로 다운로드하여 PATH에 등록하거나 코드에서 경로를 명시해야 했습니다. 이로 인해 발생하는 주요 문제는 다음과 같습니다.

  • Chrome 자동 업데이트: 사용자 PC에서 Chrome이 121.0.6167.85에서 121.0.6167.161로 자동 업데이트되면 기존 ChromeDriver는 즉시 호환성을 잃습니다.
  • 드라이버 버전 관리 부담: 개발 환경, 스테이징, 프로덕션 서버마다 Chrome 버전이 다를 경우 각각 다른 ChromeDriver를 배포해야 합니다.
  • CI/CD 파이프라인 장애: Jenkins나 GitHub Actions에서 컨테이너 이미지가 업데이트될 때마다 드라이버 버전 불일치로 빌드가 실패합니다.

핵심 원인: Chrome 브라우저와 ChromeDriver 간 메이저/마이너 버전 불일치가 발생하면 WebDriver 프로토콜 통신이 실패하며 SessionNotCreatedException이 발생합니다. 이는 Selenium 자체의 문제가 아니라 브라우저-드라이버 간 인터페이스 호환성 문제입니다.


Selenium SessionNotCreatedException 해결 완벽 가이드 ChromeDriver 버전 불일치 오류 종결




2. Selenium Manager를 활용한 자동 해결 (권장)

Selenium 4.6.0 이상 버전에서는 Selenium Manager가 기본 탑재되어 있어 별도 설정 없이 드라이버를 자동으로 관리합니다. 다음 절차를 따르십시오.

2-1. Selenium 버전 확인 및 업그레이드

# 현재 설치된 버전 확인
pip show selenium

# 최신 버전으로 업그레이드
pip install selenium --upgrade

# conda 환경에서 설치한 경우
conda activate <가상환경명>
pip uninstall selenium
pip install selenium

2-2. 기존 ChromeDriver 제거 (중요)

시스템 PATH에 수동으로 설치한 chromedriver 바이너리가 존재하면 Selenium Manager가 동작하지 않습니다. 다음 위치를 확인하고 파일을 삭제하십시오.

  • Windows: C:\Program Files\chromedriver.exe, C:\Windows\System32\chromedriver.exe
  • Linux/Mac: /usr/local/bin/chromedriver, /usr/bin/chromedriver
  • 프로젝트 로컬: ./drivers/chromedriver 등 상대 경로

2-3. 코드 수정 (Selenium 4 표준 방식)

from selenium import webdriver

# Selenium Manager가 자동으로 적절한 ChromeDriver를 다운로드
driver = webdriver.Chrome()

# Headless 모드 등 옵션 추가 시
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(options=options)

동작 원리: Selenium Manager는 실행 시 시스템의 Chrome 버전을 탐지하고, 호환되는 ChromeDriver를 ~/.cache/selenium (Linux/Mac) 또는 %LOCALAPPDATA%\selenium (Windows) 디렉토리에 자동 다운로드하여 사용합니다. 이미 캐시된 드라이버가 있으면 재사용합니다.

3. webdriver_manager 패키지를 활용한 대안

Selenium Manager가 제대로 동작하지 않거나 더 세밀한 제어가 필요한 경우 webdriver_manager 라이브러리를 사용할 수 있습니다. 이 패키지는 브라우저 버전을 실시간으로 확인하고 매칭되는 드라이버를 자동으로 설치합니다.

3-1. 설치 및 기본 사용법

# 설치
pip install webdriver-manager

# Selenium 3.x 호환 방식 (레거시)
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())

# Selenium 4.x 권장 방식 (Service 객체 사용)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))

3-2. 주의사항 (Selenium 4 사용자 필독)

Selenium 4.x에서 ChromeDriverManager().install()이 반환하는 문자열 경로를 직접 webdriver.Chrome()에 전달하면 AttributeError: 'str' object has no attribute 'start' 오류가 발생합니다. 반드시 Service 객체로 래핑해야 합니다.

3-3. 로그 출력 제어

# 드라이버 다운로드 로그 숨기기
import os
os.environ['WDM_LOG_LEVEL'] = '0'

from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))

실무 팁: CI/CD 환경에서는 webdriver_manager가 매번 네트워크를 통해 드라이버를 확인하므로 빌드 시간이 증가할 수 있습니다. Docker 이미지를 사용한다면 특정 버전의 Chrome과 ChromeDriver를 이미지에 미리 포함시키고 Selenium Manager를 비활성화하는 것이 더 효율적입니다.

4. Chrome 자동 업데이트 제어 (Windows 환경)

개발 환경에서 Chrome 버전을 고정해야 하는 경우 자동 업데이트를 비활성화할 수 있습니다. 단, 보안 패치가 적용되지 않으므로 프로덕션 환경에서는 권장하지 않습니다.

4-1. 작업 스케줄러에서 업데이트 작업 비활성화

  1. Win + Q 단축키로 검색 창을 열고 "작업 스케줄러" 입력 후 실행
  2. 작업 스케줄러 라이브러리에서 다음 2개 작업을 찾아 우클릭 → 사용 안 함 선택
    • GoogleUpdateTaskMachineCore
    • GoogleUpdateTaskMachineUA

4-2. 업데이트 실행 파일 이름 변경

  1. Win + E로 파일 탐색기 실행
  2. 주소창에 C:\Program Files (x86)\Google\Update 입력
  3. GoogleUpdate.exe 파일을 GoogleUpdate.bak 또는 GoogleUpdate.exe.disabled로 이름 변경

원상복구: 파일명을 원래대로 되돌리고 작업 스케줄러에서 "사용" 상태로 변경하면 자동 업데이트가 다시 활성화됩니다. Linux/Mac 환경에서는 패키지 관리자(apt, yum, brew)의 hold 기능을 사용하십시오.

5. 정리 및 실행 가이드

SessionNotCreatedException 오류는 Chrome-ChromeDriver 버전 불일치가 근본 원인이며, Selenium 4.6 이상에서는 Selenium Manager가 이를 자동으로 해결합니다. 기존 수동 설치 방식에서 벗어나 다음 절차를 따르십시오.

  • 단기 해결: pip install selenium --upgrade로 업그레이드 후 시스템의 chromedriver 바이너리 삭제
  • 중기 해결: webdriver_manager 패키지를 도입하여 드라이버 자동 관리 체계 구축
  • 장기 해결: Docker 기반 CI/CD 환경에서 Chrome 버전을 명시적으로 고정하고 Selenium Manager 캐시를 이미지에 포함

Action Item: 지금 당장 터미널에서 pip show selenium을 실행하여 버전을 확인하고, 4.6.0 미만이라면 pip install selenium --upgrade를 실행하십시오. 그 다음 프로젝트 코드에서 chromedriver 경로 지정 코드를 모두 제거하고 driver = webdriver.Chrome()으로 단순화하면 대부분의 버전 불일치 문제가 해결됩니다.


#함께 읽으면 좋은 글

Python ModuleNotFoundError No module named pandas 해결 방법 총정리 : 바로보기

댓글