티스토리 뷰

이전 발행글


2023.05.23 - [Python/Scraping] - [Python selenium] ChromeDriver 버전오류-selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 111

 

[Python selenium] ChromeDriver 버전오류-selenium.common.exceptions.SessionNotCreatedException: Message: session not created:

ChromeDriver는 Python selenium 사용시 필수 프로그램인데, 이 오류는 ChromeDriver 버전이 현재 사용중인 Chrome 브라우저 버전과 호환되지 않아 나타나는 오류이다. 해결방법은 간단하다. ChromeDriver 버전을

arc-viewpoint.tistory.com

 

2023.08.01 - [Python/Scraping] - [Python Selenium] Chrome version 115 대응 Chromedriver 설치

 

[Python Selenium] Chrome version 115 대응 Chromedriver 설치

2023.05.23 - [Productivity/tips] - [Python selenuim] ChromeDriver 버전오류-selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 111 [Python selenuim] ChromeDriver

arc-viewpoint.tistory.com

 

2023.11.09 - [Python/Scraping] - [Python selenuim] 파이썬 스크래핑 - ChromeDriver 버전오류

 

[Python selenuim] 파이썬 스크래핑 - ChromeDriver 버전오류

스마트스토어의 상품의 재고관리를 파이썬 스크래핑를 통해 관리 하고 있는데 가끔씩 스크래핑 Data 값이 의심될때가 있다. 품절된 또는 재입고된 상품의 개수가 이전값보다 확연히 늘어났기 때

arc-viewpoint.tistory.com

 


ISSUE

잘 작동하던 코드가 어느 날 작동하지 않는다면 

chromedriver 버전을 chrome 버전과 맞추어 주면 해결이 되었다.

 

하지만 최근에는 늘 하던대로 chrome 버전에 맞는 chromedriver 버전을 다운로드하여도 해결이 되지 않았다.

 

chrome 버전은 121.0.6167.161 이다.

 

 

chromedriver 버전은 121.0.6167.85 이다.

 

 

 

 

https://googlechromelabs.github.io/chrome-for-testing/
 

Chrome for Testing availability

chrome-headless-shellmac-arm64https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/121.0.6167.160/mac-arm64/chrome-headless-shell-mac-arm64.zip404

googlechromelabs.github.io

 

 

몇일을 고생했다.

chrome을 다운그레이드하여 chrome에 맞는 chormedriver 설치를 시도하였지만 이 또한 쉬운 일이 아니였다. 구글은 이전 버전을 공식적으로 제공해 주고 있지 않고 있다. chrome 의 과거 버전을 제공하는 site가 있긴 하지만 chromedriver 버전은 찾는 것은 쉬운일이 아니였다. 

 

WebDriver Manager

해결방법은 간단했다.

selenium 버전 4.6이후부터는 selenium manager를 포함하고 있다.

 

Selenium WebDriver를 사용할 때, 브라우저 드라이버(예: ChromeDriver, GeckoDriver 등)의 설치와 관리는 사용자에게 맡겨져 있다. 수동으로 버전을 관리하는 것은 때때로 버전 호환성 문제, 드라이버 업데이트의 필요성 등으로 번거로움을 초래하기도 한다. 이러한 문제를 해결하기 위해, 여러 도구와 라이브러리가 개발되었는데, 이 중 하나가 "WebDriver Manager"이다. selenium 버전 4.6이후부터는 "WebDriver Manager"를 포함하고 있다. 

 

WebDriver Manager는 Selenium WebDriver의 드라이버를 자동으로 관리해 주는 유틸리티이다. 이는 Python, Java 등 여러 언어로 구현되어 있으며, 사용자가 직접 드라이버를 다운로드하고 경로를 설정하는 번거로움 없이, 필요한 브라우저 드라이버를 자동으로 다운로드하고 설정해 준다. WebDriver Manager는 실행 중인 브라우저의 버전을 자동으로 감지하고, 해당하는 드라이버를 다운로드하여 Selenium 스크립트가 즉시 사용할 수 있다.

 

주요기능은 아래와 같다.

  • 자동 드라이버 다운로드: 실행 중인 브라우저의 버전에 맞는 드라이버를 자동으로 다운로드한다.
  • 버전 관리: 다양한 버전의 드라이버를 관리하고, 필요에 따라 특정 버전을 사용할 수 있다.
  • 쉬운 통합: Selenium 스크립트와 쉽게 통합되어, 코드 내에서 몇 줄만으로 드라이버 관리를 자동화할 수 있다.
  • 크로스 플랫폼 지원: Windows, macOS, Linux 등 다양한 운영 체제에서 사용할 수 있다.

Selenium Manager 는 Selenium에 필요한 드라이버 (chromedriver 등) 를 사용할 수 없을 때 해당 드라이버를 자동으로 검색, 다운로드를 해주는데 이것은 선택사항이다. 따라서 사용자가 드라이버는 수동으로 설치 및 사용하고자 한다면 수동으로 사용 가능하다.

 

자세한 사항은 아래 문서에서 참고하면 된다.

https://www.selenium.dev/documentation/selenium_manager/

 

Selenium Manager (Beta)

Selenium Manager is a command-line tool implemented in Rust that provides automated driver and browser management for Selenium. Selenium bindings use this tool by default, so you do not need to download it or add anything to your code or do anything else t

www.selenium.dev

 

 

Solution

위에서 언급한 것처럼 Selenium Manager는 적정한 드라이버를 찾지 못했을 경우 사용된다. 

따라서 수동으로 드라이버 버전을 업데이트 하였지만 어떤 이유에서인지 스크립트가 작동하지 않았다.

 

해결방법은 Selenium Manager에게 버전관리를 맡기면 된다. 

 

나의 경우에는 Selenium 버전 업데이트 및 드라이버 path에서 chromedriver를 삭제만 해주었는데도 이전처럼 정상적으로 스크립트 작동하였다. Selenium Manager가 필요한 드라이버가 없으니 직접 드라이버를 검색 및 다운로드 하는 것이다. 

 

아래는 Python 에서의 사용예이다.

# 필요한 패키지를 설치합니다.
# pip install selenium webdriver-manager

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

# ChromeDriverManager를 통해 ChromeDriver를 자동으로 설치하고, 경로를 설정합니다.
driver = webdriver.Chrome(ChromeDriverManager().install())

# 이제 Selenium 스크립트를 작성하고 사용할 수 있습니다.
driver.get("https://www.google.com")
print(driver.title)

# 브라우저를 닫습니다.
driver.quit()

 

 

결론

이제부터 드라이버 버전관리는 Selenium Manager에게 맡기면 된다.