Python

[Selenium] DeprecationWarning: executable_path has been deprecated, please pass in a Service object 해결하기

메바동 2023. 1. 1. 00:50
728x90

 

셀레니움을 회사에서는 예전에 만들어놓은 패키지들로 설치를 했었기에 몰랐었는데, 이번에 본가 데스크톱에 파이썬과 셀레니움을 설치하고 사용해보니 지원 중단 경고가 뜨고 있었다.

 

executable_path가 지원 중단되었으니, 서비스 객체를 넘기라고 되어있는데 이게 무슨 말인가 싶어 찾아보았다.

 

찾아보니 2021년 10월 22일에 수정된 Selnium 4.0 Beta 1 변경 로그에 드라이버 인스턴스화 시 Options와 Service 인수를 제외한 인수들을 사용하지 않기로 되어 있다고 한다.

 

그러니까 기존에는 브라우저에 맞는 드라이버를 다운로드한 뒤, 셀레니움 드라이버 인스턴스화 시 해당 브라우저 드라이버의 경로를 executable_path로 전달해주어야 했는데, 4.0 버전 이후부터는 Service 인수를 사용하여 해당 브라우저 드라이버의 경로를 전달해주어야 한다.

 

from selenium import webdriver
from selenium.webdriver.chrome.service import Service


def get_chrome_driver():
	options = webdriver.ChromeOptions()
	# option 추가

	chrome_path = r'{chromedriver 경로}'
	driver = webdriver.Chrome(service=Service(chrome_path), options=options)
    
	return driver

 

Chrome Service를 기준으로 하면 매개변수는 다음과 같다.

 

Service(exeuctable_path: str = 'chromedriver', port: int = 0, 
	service_args: Optional[List[str], None] = None, 
	log_path: Optional[str, None] = None, 
	env: Optional[Mapping[str, str], None] = None)

# executable_path: chromedriver 실행 파일의 설치 경로
# port: 실행할 서비스의 포트, 기본적으로 운영 체제가 결정하는 0
# service_args: 실행 파일을 시작할 때 하위 프로세스에 전달할 인수 목록
# log_path: 실행 파일에 -log-path로 전달할 문자열
# env: 새 프로세스에 대한 환경 변수 매핑

 

 

드라이버 인스턴스화 시 직접 executable_path를 전달했을 때, 위와 같이 나타나던 경고가

 

 

Service 객체로 전달했을 때, 나타나지 않는 것을 확인할 수 있다.

728x90