IT & Programming/python
파이썬 웹드라이버 최신상태 유지방법
오스카리
2025. 5. 12. 03:08
파이썬에서 웹 자동화를 할 때 사용하는 **웹드라이버(WebDriver)**는 Selenium과 함께 쓰이며, 웹 브라우저(Chrome, Edge 등)의 버전과 정확히 일치해야 합니다. 이를 최신 상태로 유지하는 방법은 여러 가지가 있으며, 각각의 종류, 사용 방법, 장단점을 아래와 같이 정리해드립니다.
1. 수동 다운로드 및 설치
사용 방법
- 크롬 버전 확인 → chrome://version
- 크롬 버전에 맞는 드라이버 다운로드:
https://sites.google.com/chromium.org/driver/ - 시스템 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 사용 |
반응형