DEV/Etc

[Etc] 셀레니움 크롬 드라이버 자동 설치(webdriver-manager)

l-eazzy 2023. 11. 3. 17:14

1. 개요

동적 사이트를 크롤링 할때 많이 사용되는 라이브러리 중 하나가 셀레니움이다.

 

셀레니움은 브라우저를 직접 컨트롤하여 얻어지는 내용을

파싱하여 사용하는 형태이기 때문에 브라우저를 컨트롤할 드라이버가 필수이다.

 

하지만 기존 셀레니움을 이용하여 크롤링을 진행하는 분들은 알겠지만

웹 브라우저의 버전과 드라이버의 버전이 맞지 않으면 실행이 되지 않는 문제를 쉽게 볼 수 있다.

 

이 때문에 브라우저의 자동 업데이트를 못하게 막는 등의 작업이 들어갔을 것이다.

(이 작업도 완벽하진 않아서 자동 업데이트가 되버리는 경우가 종종 발생한다.)

 

이런 문제를 해결하고자 나온 것이 webdriver-manager 이다.

 

 

webdriver-manager

Library provides the way to automatically manage drivers for different browsers

pypi.org

 

이번 포스팅에서는 결과를 파싱해서 가져오는 과정은 진행하지 않을 생각이다.

우리가 사용하고자 하는 webdriver-manager 적용하는 부분만 구현할 예정이다.

 

 

 

2. 구현

이번 구현 단계에서 사용할 언어Python3,

셀레니움 버전Selenium4 버전을 사용할 예정이고

브라우저Chrome 을 사용할 것이다.

 

셀레니움은 3, 4 버전 간의 차이가 좀 있는 편이기에 공식 문서를 참고해주길 바란다.

 

 

a. Package

먼저 사용된 Package에 대한 정보이다.

 

requirements.txt 파일로 정의하였으며,

Python 프로젝트에 사용된 라이브러리를 한번에 정리해서 뽑고 싶다면 아래 명령어를 터미널에 입력하면 된다.

$ pip freeze > requirements.txt

 

 

b. Driver 생성

드라이버를 생성하는 코드는 정말 간단하다.

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

# chrome option 세팅
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)      # 프로세스가 종료된 후 Selenium Browser가 자동으로 종료되지 않도록

#... 이외 옵션 생략!

# OS에 설치된 Chrome Driver 버전에 맞게 Install
chrome_driver = ChromeDriverManager().install()
print("드라이버 설치 완료 : ", chrome_driver)

# driver 생성
driver = webdriver.Chrome(service=ChromeService(chrome_driver), options=chrome_options)

# 접속하고자 하는 페이지 uri
driver.get("https://www.naver.com")

 

 

 

실행 로그를 보면

첫 구동 시에는 드라이버를 다운로드 하는 Log를 확인할 수 있는데,

현재 테스트 당시에는 이미 작업을 하고 포스팅 중이여서 아래 로그에서는 확인 할 수 없다.

(직접 구현해보고 확인해보시면 좋을 듯하다.)

 

 

중간에 print() 메소드로 로그를 남긴 chrome_driver를 확인하면 드라이버가 설치된 경로를 확인 할 수 있다.

실제 터미널에서 해당 경로를 찾아간 뒤 ls -al 로그를 찍어보면 정상적으로 설치된 모습을 볼 수 있다.

 

 

'그럼 ChromeDriver는 어떻게 설치가 되는것일까?'

 

아래 DriverManager 클래스의 모습을 보면 알수 있는데,

ChromeDriverManager 클래스는 ChromeDriver 설치에 필요한 정보와 기능들을 정의하고 있고

DriverManager 클래스를 받아 사용하기 때문에 기본적인 기능은 여기에 정의되어있다.

(좌) ChromeDriverManager (우) DriverManager

 

이처럼 webdriver-manager 를 사용하였을때

OS 상에 설치된 브라우저의 버전의 드라이버 설치 경로만 활성화 되어있다면

매번 버전 업데이트 될때마다 새로 드라이버를 설치해서 넣어줄 일이 없어지게 된다.

 

 

3. 마무리

귀찮은 작업이 있으면 그걸 해결하기 위한 기술은 만들어지기 마련인 것 같다.

 

예전에 만들어진 프로젝트를

webdriver-manager 를 적용하여 관리하니 귀찮은 작업이 많이 줄었던 경험이 있어 포스팅 해보았는데

여기서 구현해둔 방법은 정말 간단하기에 추가적인 옵션 설정을 원한다면 공식 홈페이지를 참고하면 좋을듯하다.

 

약간 날먹 포스팅인것 같기도 하지만...

이런거 하나 하나가 모여 괜찮은 애플리케이션이 되지 않겠는가

 

 

4. GitHub

 

GitHub - mk1-p/selenium-wdm-sample: Selenium4, Use webdriver-manager lib Sample Code

Selenium4, Use webdriver-manager lib Sample Code. Contribute to mk1-p/selenium-wdm-sample development by creating an account on GitHub.

github.com

 

 

5. 참고자료

 

webdriver-manager

Library provides the way to automatically manage drivers for different browsers

pypi.org

 

Selenium

Selenium automates browsers. That's it!

www.selenium.dev

 

728x90