개발고생일지/파이썬

[Selenium] DeprecationWarning: executable_path has been deprecated 오류 해결 방법

Fartist 2023. 3. 5. 06:00
728x90
- 목차
1. 'DeprecationWarning: executable_path has been deprecated' 오류
2. 해결 방법
3. 결과
갈무리

[그림 1] Python Selenium executable_path 오류 해결 방법
[그림 1] Python Selenium executable_path 오류 해결 방법


1.  DeprecationWarning: executable_path has been deprecated 오류

[사진 2] Selenium(셀레니움) 'DeprecationWarning: executable_path has been deprecated' 오류
[사진 2] Selenium(셀레니움) 'DeprecationWarning: executable_path has been deprecated' 오류 화면

 파이썬에서 Selenium(셀레니움) 라이브러리를 사용하는 도중에 'DeprecationWarning: executable_path has been deprecated' 오류가 발생했습니다. 기존에 동적 웹 페이지를 불러올 때 Selenium에서 크롬 브라우저 드라이버를 통해서 작업했다면, 이제부터는 OS에 설치된 크롬 브라우저를 직업 사용하여 작업할 수 있도록 변경되었습니다. 그래서 업데이트가 되지 않은 기술관련 서적의 예시 중에서 이 부분에서 오류가 발생할 수 있습니다.


2.  해결 방법

 기존의 방식은 selenium 라이브러리에서 webdriver를 불러와서 webdriver의 Chrome 메서드를 사용해서 크롬 웹 브라우저 드라이버를 불러옵니다. 아래는 그 방식의 코드입니다.

from selenium import webdriver

driver = webdriver.Chrome('웹 브라우저 드라이버 파일경로')

driver.get("크롤링 하려는 동적 웹페이지 주소")

[코드 1] 기존 방식의 Selenium webdriver 사용방식

 [코드 1]을 실행하면 주피터 노트북에서 다음과 같은 경고 메시지를 띄어줍니다. 

/var/folders/mb/nsy54j_j63374vp_fq9k57600000gn/T/ipykernel_16226/2747057698.py:3: DeprecationWarning: executable_path has been deprecated, please pass in a Service object driver = webdriver.Chrome('/Users/yi_mac/Documents/230304_Python_WebCrawling/chromedriver_mac_arm64/chromedriver.exe') 

'executable_path'가 사용되지 않으니 주의하라는 경고 표시입니다. 이 경고표시가 떠도 웹 브라우저를 호출하긴 합니다. 다만 BeautifulSoup으로 파싱을 하는 과정에서 제대로 작동을 안 합니다. 그래서 다음과 같이 Selenium의 다른 방식으로 동적 웹 페이지에 접근할 겁니다.


 먼저 webdriver_manager를 설치해줍니다.

[그림 3] 설치하려는 가상환경 설정
[그림 3] 설치하려는 가상환경 설정

 글쓴이가 사용하는 가상환경에서 사용할 예정이기 때문에 base에서 기존에 만들어둔 가상환경으로 바꿉니다. 가상환경 설정하는 방법은 아래의 링크에서 확인할 수 있습니다.

2023.02.26 - [개발고생일지/파이썬] - M1 Mac(맥북)에서 아나콘다 초기 설정

 

M1 Mac(맥북)에서 아나콘다 초기 설정

- 목차 들어가는 말 1. 아나콘다로 가상 환경 확인하기 2. 가상 환경 설정하기 3. 라이브러리 설치(선택 사항) 4. 가상 환경 삭제 5. 터미널에서 주피터 노트북 종료하기 들어가는 말 아나콘다는 다

applecoconut.tistory.com

 [코드 2]를 참고하여 'webdriver_manager'를 설치합니다.

pip install webdriver_manager

[코드 2] webdriver_manager 설치

[그림 4] webdriver_manager 설치 완료
[그림 4] webdriver_manager 설치 완료

 설치가 끝났다면 주피터 노트북을 실행하여 다음 [코드 3]을 입력합니다.

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

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

driver.implicitly_wait(3)
driver.get("크롤링하려는 동적 웹 페이지 주소")

[코드 3] 업데이트된 새로운 코드

 기존 코드에서 두 줄이 추가 혹은 변경되었습니다. 코드를 실행하면 이전의 경고문은 등장하지 않고, 크롤링 하려는 웹 페이지가 정상적으로 호출되는 것을 확인할 수 있습니다.


3.  결과

from bs4 import BeautifulSoup 

page = driver.page_source

bs_obj = BeautifulSoup(page, "html.parser")
bs_obj

[코드 4] 불러온 웹 페이지를 BeautifulSoup을 사용하여 파싱

 이제 BeautifulSoup을 이용해 정적 웹 페이지를 파싱했을 때처럼 코드를 실행하면 정상적으로 동적 웹 페이지의 html 문서 내용을 불러올 수 있습니다.


갈무리

 웹 크롤링을 알아가는 과정에서 비교적 최근에 출판된 책에서 조차 예제가 매끄럽게 진행되지 않는 경우가 있네요. 22년 1월에 1쇄 발행된 책에서 막힐 줄은 몰랐습니다. 1년의 시간은 기술영역에서는 변화가 심한 것 같습니다. 혹시 저와 비슷한 상황에 놓은 분들이 이 글로 도움을 받으셨으면 좋겠습니다.

반응형