DeprecationWarning: executable_path has been deprecated 해결하기

상황

기존에는 아래와 같이 "chromedriver경로" 에 여기로부터 크롬 드라이버 최신 버전을 다운받아 크롬 웹 드라이버를 실행하고 있었습니다.

from selenium import webdriver


def set_chrome_driver():
    chrome_options = webdriver.ChromeOptions()
    driver = webdriver.Chrome("chromedriver경로", options=chrome_options)
    return driver

그런데 어느 순간부터 pytest 실행 시 아래와 같은 warning이 뜨기 시작했습니다.
DeprecationWarning: executable_path has been deprecated, please pass in a Service object

해결 방법

  1. webdriver-manager 패키지를 설치합니다.
$ pip install webdriver-manager
  1. 아래와 같이 Service 객체에 webdriver-manager의 ChromeDriverManager를 사용하여 크롬 드라이버를 다운받은 경로가 아닌 현재 OS에 설치된 크롬 브라우저를 사용하도록 수정합니다.
    (참고로, 'service' 키워드 인수는 Selenium 4부터 사용되는 거 같습니다.)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager


def set_chrome_driver():
    chrome_options = webdriver.ChromeOptions()
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
    return driver

재실행 결과

pytest 재실행 시, 아래와 같이 warning 없이 깔끔하게 테스트 결과 노출되는 것을 확인할 수 있었습니다.

예전에는 다운받은 크롬 드라이버가 현재 사용중인 크롬 브라우저 버전보다 낮아서 발생하는 SessionNotCreatedException을 많이 겪었었는데, 이제 더 이상 수동으로 크롬 드라이버를 다운받을 필요가 없어 편해졌네요 :)

Reference

좋은 웹페이지 즐겨찾기