selenium driver 관리 및 유용한 기능

루까까·2023년 7월 18일

셀레니움을 사용하려면 사용하고자 하는 웹의 driver가 있어야지 사용가능하다.
driver 설치 방법에 대해서는 인터넷에 많이 소개되어 설치하는것은 어렵지않다.
다만, 자동화하고자 하는 웹의 버전과 driver의 버전이 맞지 않는다면 오류가 생긴다. 따라서 웹의 버전이 업데이트가 된다면 그에 맞게 driver또한 계속해서 관리를 해주어야 한다.
이러한 지속적인 관리는 매우 귀찮기 때문에 이러한 귀찮음을 타파하고자 새로운 방법에 대해서 알아보았다.

그 해결방법이란 바로, webdriver_manager 라이브러리다.
webdriver_manager 라이브러리를 이용하여 driver를 최신버전으로 관리할 수 있다.

webdriver_manager 사용해보기

1. 해당 라이브러리를 사용하기 위해서는 먼저 설치를 진행한다.

pip install webdriver_manager

2. 설치가 완료되었으면 해당 라이브러리들을 불러온다.

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

셀레니움 공식문서에는 'chromedriver 의 시작 및 중지를 담당하는 서비스 클래스입니다' 라고 써져 있는데 정확하게 무슨 의미인지는 모르겠다.. 궁금하신 분들을 위해 아래에 url을 남겨두었다.
selenium.webdriver.chrome.service 공식 문서

3. driver 자동관리를 기입한다.

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

기본적으로 executable_path==ChromeDriverManager().install()로 설정을 하게 되면

  • Windows: C:\Users\<사용자 이름>.wdm\drivers\chromedriver\win32\<버전>\chromedriver.exe
  • macOS: /Users/<사용자 이름>/.wdm/drivers/chromedriver/mac64/<버전>/chromedriver
  • Linux: /home/<사용자 이름>/.wdm/drivers/chromedriver/linux64/<버전>/chromedriver
    로 설정되어 해당 경로에 driver를 설치 한다.

4. 전체코드

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

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

다른 웹 브라우저

다른 웹 브라우저의 webdriver_manager이다.
(테스트는 안해봄)

1. 파이어 폭스

from webdriver_manager.firefox import GeckoDriverManager
service = Service(executable_path=GeckoDriverManager().install())
driver = webdriver.firefox(service=service)

2. 엣지

from webdriver_manager.microsoft import EdgeChromiumDriverManager
service = Service(executable_path=EdgeChromiumDriverManager().install())
driver = webdriver.edge(service=service)

3. 오페라

from webdriver_manager.opera import OperaDriverManager
service = Service(executable_path=OperaDriverManager().install())
driver = webdriver.Opera(service=service)

여담

webdriver_manager와 같이 최신 드라이브를 유지하는 기능외에 여러 추가적인 편리한 요소도 있다. 앞에서 언급한 브라우저 꺼짐 방지, 불필요한 로그 지우기와 같이 자주 쓰이고 편리한 기능 또한, 추가로 기입하겠다.

from selenium.webdriver.chrome.options import Options
from selenium import webdriver

# 브라우저 꺼짐 방지
chrome_options = Options()
chrome_options.add_experimental_option("detach",True)

# 불필요한 에러 메세지 없애기
chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])

driver = webdriver.Chrome(options=chrome_options)
from selenium.webdriver.chrome.options import Options

셀레니움에 여러가지 옵션을 제어할 수 있게 해주는 라이브러리, 대표적으로 브라우저 꺼짐 방지, 불필요한 로그 지우기 등등 다양한 옵션을 설정할 수 있다.
(추가적인 기능 또한 있으니 궁금하신 분들은 해당 url 참조)
selenium.webdriver.chrome.options 공식 문서

여담2

webdriver를 관리해주는 라이브러리는 webdriver_manager말고도 다른 라이브러리가 존재한다.
바로 chromedriver_autoinstaller다.
해당 라이브러리도 마찬가지로 본인이 웹브라우저의 호환되는 driver를 자동 설치를 해준다.
사용방법은 다음과 같다.

import chromedriver_autoinstaller

chromedriver_autoinstaller.install(True)

매우 단순하다. 해당 코드를 실행하면 자동으로 본인의 크롬 버전에 맞는 웹드라이버를 자동 설치해준다.(설치 경로는 ./본인 크롬버전/chromedriver.exe)

그럼 webdriver_manager와 chromedriver_autoinstaller의 차이점은 무엇일까?
해당 부분에 대해서 chat gpt한테 문의한 결과 다음과 같은 답변을 얻었다.

  1. 기능과 목적:

    • chromedriver_autoinstaller: 이 패키지는 Chrome WebDriver를 자동으로 설치하는 기능에만 중점을 둡니다. 따라서 WebDriver를 설치하는 것 이외의 다른 기능을 제공하지 않습니다.
    • webdriver_manager: 이 패키지는 다양한 WebDriver를 자동으로 설치하고 관리하는 일반적인 WebDriver 관리 도구입니다. 따라서 Chrome WebDriver뿐만 아니라 Firefox, Safari, Edge 등 다른 브라우저의 WebDriver도 자동으로 설치하고 관리할 수 있습니다.
  2. 브라우저 지원:

    • chromedriver_autoinstaller: Chrome 브라우저에만 해당하는 Chrome WebDriver를 자동으로 설치합니다.
    • webdriver_manager: 여러 브라우저의 WebDriver를 지원하므로 여러 브라우저를 사용하는 경우에 더 유용합니다.
  3. 패키지 종속성:

    • chromedriver_autoinstaller: 해당 패키지는 다른 의존성 없이 Chrome WebDriver를 설치합니다.
    • webdriver_manager: 다양한 브라우저의 WebDriver를 지원하기 때문에 해당 브라우저들의 의존성에 따라 추가 패키지를 설치해야 할 수도 있습니다.

따라서, Chrome 브라우저만 사용하고 해당 WebDriver만 자동으로 설치하려는 경우에는 chromedriver_autoinstaller를 사용하는 것이 간편할 수 있습니다. 하지만 여러 브라우저의 WebDriver를 자동으로 설치하고 관리해야 한다면, webdriver_manager를 사용하는 것이 더 범용적인 선택이 될 것입니다.

라고 하니 본인의 상황과 취향에 맞게 쓰면 될 것같다.
필자가 실제 두가지를 모두 사용해 본 결과 webdriver_manager의 경우 driver설치 기본 파일 경로가 매우 복잡하고 경로 설정하는게 귀찮아서 chromedriver_autoinstaller를 자주 쓰는 것 같다.(실행한 파일안에 생성되니 찾기도 쉽다. 물론 크롬이 아닌 다른 웹브라우저의 경우 webdriver_manager가 훨씬 좋은 선택이다.)

profile
기타치는 개발자

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

유익한 글 잘 봤습니다, 감사합니다.

답글 달기