IT & Programming/python

파이썬 웹드라이버 최신상태 유지방법

오스카리 2025. 5. 12. 03:08

파이썬에서 웹 자동화를 할 때 사용하는 **웹드라이버(WebDriver)**는 Selenium과 함께 쓰이며, 웹 브라우저(Chrome, Edge 등)의 버전과 정확히 일치해야 합니다. 이를 최신 상태로 유지하는 방법은 여러 가지가 있으며, 각각의 종류, 사용 방법, 장단점을 아래와 같이 정리해드립니다.


1. 수동 다운로드 및 설치

사용 방법

  1. 크롬 버전 확인 → chrome://version
  2. 크롬 버전에 맞는 드라이버 다운로드:
    https://sites.google.com/chromium.org/driver/
  3. 시스템 PATH에 등록하거나, 스크립트에서 직접 경로 지정
from selenium import webdriver
driver = webdriver.Chrome(executable_path="C:/경로/chromedriver.exe")

장점

  • 간단하고 직관적
  • 오프라인 환경에서도 사용 가능

단점

  • 크롬 업데이트마다 수동으로 드라이버도 다시 받아야 함
  • 자동화 작업이 중단될 수 있음

 2. webdriver_manager 모듈 사용 (권장)

사용 방법

pip install webdriver-manager
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

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

장점

  • 자동으로 크롬 버전에 맞는 드라이버를 설치
  • 운영체제별로 알아서 처리
  • 유지보수가 쉬움

단점

  • 처음 실행 시 설치 시간이 걸릴 수 있음
  • 실행 시마다 인터넷 연결 필요
  • 자동 캐싱되긴 하지만, 강제로 특정 버전을 고정하려면 설정 필요

 3. undetected-chromedriver (우회용 웹드라이버 자동 업데이트 포함)

사용 방법

pip install undetected-chromedriver
import undetected_chromedriver as uc
driver = uc.Chrome()

장점

  • 크롤링 탐지 우회 가능 (사이트에 따라 셀레니움 감지 방지)
  • 웹드라이버 자동 다운로드 지원 포함
  • 실제 브라우저처럼 동작함

단점

  • 일반적인 셀레니움 코드와 약간 다름
  • 크롬 자동 업데이트 시 호환성 문제가 발생할 수 있음
  • 설치 용량 다소 큼

 4. 직접 버전 매칭 자동화 (Chrome 버전 → URL 접속 후 드라이버 다운로드)

개념

  • 파이썬으로 로컬 Chrome 버전 확인
  • 그에 맞는 chromedriver 버전을 자동으로 받아오는 스크립트 작성

예: winreg, requests, zipfile 등을 조합해 자동화 가능

장점

  • 버전 완전 일치 가능
  • 배포 시 자동화 가능

단점

  • 구현 복잡
  • 다양한 OS 대응 어려움
  • 유지보수 부담

 방식별 비교 요약

방법 자동화 인터넷 필요 설정 복잡도 유지관리 추천도

수동 다운로드 X X 낮음 높음 낮음
webdriver_manager (권장) O O 낮음 낮음 높음
undetected-chromedriver O O 중간 중간 중간~높음 (탐지 우회용)
버전 매칭 자동화 스크립트 O O 높음 높음 낮음

추천 결론

  • 일반 자동화: webdriver_manager 사용 (가장 쉽고 안정적)
  • 탐지 우회 필요 시: undetected-chromedriver
  • 내부망/보안환경: 수동 다운로드 or 사내 저장소 연동 방식

 

 webdriver_manager 사용 시 버전 고정, 캐시 설정, 로컬 드라이버 유지 관리 등 실무에 유용한 예제와 팁을 정리해드립니다.


1. webdriver_manager 기본 사용법 (자동 최신버전 다운로드)

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())
  • 처음 실행 시 크롬 버전 감지 후 맞는 드라이버 자동 다운로드
  • 이후 실행 시 캐시된 드라이버를 재사용

 2. 특정 버전으로 고정하는 방법

특정 크롬드라이버 버전으로 고정하고 싶다면 다음과 같이 사용합니다:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager(version="114.0.5735.90").install())
  • 위 코드는 114.0.5735.90 버전의 드라이버만 설치함
  • 크롬 브라우저 버전과 반드시 호환되어야 함

 3. 캐시 위치 지정 (드라이버 재다운로드 방지)

from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeType

driver_path = ChromeDriverManager(
    cache_valid_range=365,  # 며칠 동안 캐시를 유지할지 (기본: 1일)
    path=".webdriver_cache",  # 드라이버 저장 디렉토리 지정
    chrome_type=ChromeType.GOOGLE  # 일반 Chrome (브레이브 브라우저 등도 지원)
).install()
  • .webdriver_cache 폴더를 로컬에 만들어 캐시된 드라이버 유지
  • 팀 프로젝트나 CI/CD 환경에서 일관성 유지에 유용

 4. 드라이버가 이미 존재하면 재설치하지 않기

from pathlib import Path
from selenium import webdriver

DRIVER_PATH = Path("drivers") / "chromedriver.exe"
if not DRIVER_PATH.exists():
    from webdriver_manager.chrome import ChromeDriverManager
    DRIVER_PATH = ChromeDriverManager().install()

driver = webdriver.Chrome(executable_path=str(DRIVER_PATH))
  • 드라이버가 이미 있으면 설치 생략
  • 로컬 디렉토리에서 관리하고 싶을 때 유용

 5. 크롬 브라우저 버전과 드라이버 버전 확인 팁

크롬 버전 확인 (윈도우):

import winreg

def get_chrome_version():
    path = r"SOFTWARE\Google\Chrome\BLBeacon"
    try:
        key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, path)
        value, _ = winreg.QueryValueEx(key, "version")
        return value
    except Exception:
        return None

print(get_chrome_version())

웹드라이버 버전 확인:

chromedriver --version

 보너스: 드라이버 충돌 방지를 위한 옵션 설정 예시

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-gpu")

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)

마무리 요약

목표 코드 요약

자동 최신 설치 ChromeDriverManager().install()
특정 버전 고정 version="버전명" 지정
캐시 폴더 변경 path="폴더명"
기존 드라이버 우선 사용 Path.exists()로 조건 처리
브라우저/드라이버 버전 확인 winreg, chromedriver --version 사용

 

반응형