본문 바로가기

Language

[Selenium Python] chrome 115 버전 드라이버 오류

728x90

문제점

Selenium으로 UI테스트 코드를 사용중 크롬버전이 115로 업데이트가 되면서 Chrome Driver 검색이 안되는 오류가 발생함.

...
  File "/usr/local/lib/python3.8/site-packages/selenium/webdriver/common/driver_finder.py", line 44, in get_path
    raise NoSuchDriverException(f"Unable to locate or obtain driver for {options.capabilities['browserName']}")
selenium.common.exceptions.NoSuchDriverException: Message: Unable to locate or obtain driver for chrome; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location

원인

기존 114 버전까지는 https://chromedriver.chromium.org/downloads 에서 제공하는 chromedriver를 사용하였으나,

115 버전부터는 https://googlechromelabs.github.io/chrome-for-testing/ chrome-for-testing으로 위치가 변경되었습니다.

해결방법

4.11.0 부터는 Selenium-Manager에서 Chrome-for-testing를 지원합니다.

(https://www.selenium.dev/blog/2023/whats-new-in-selenium-manager-with-selenium-4.11.0/#entering-chrome-for-testing-cft)

아래와 같이 webdriver-manager 없이 호출하면 Service내에서 selenium-manager를 호출합니다.

from selenium import webdriver

driver = webdriver.Chrome()

해결방법 (수동설정)

위 코드 말고 수동으로 설정해야되는 경우 (서버 등으로 인터넷 접속 불가 등) 아래와 같이 진행하면 됩니다.

기준환경

  • Ubuntu 20.04 LTS
  • Python 3.8.10
  • selenium 4.11.2
  • Chrome 115.0.5790.170

Chrome-for-testing에서 Driver 다운로드

https://googlechromelabs.github.io/chrome-for-testing/ 에 접속하면 해당 버전의 드라이버를 찾을 수 있습니다.

바이너리가 chrome, chromedriver 2가지 제공되므로 chromedriver를 선택합니다.

예시) chromedriver-linux64 :https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/115.0.5790.170/linux64/chromedriver-linux64.zip

원하는 위치에 해당 파일압축을 해제합니다. 그럼 기존과 유사하게 chromedriver 파일이 위치합니다.

Selenium python에서 Service의 path 지정

Selenium python의 WebDriver내 Service에서 excutable_path가 지정되어있으면 인자값을 사용, 그렇지 않으면 Selenium Manager를 사용하여 탐색을 합니다.

따라서 excutable_path에 다운로드한 chromedriver 경로를 지정합니다.

아래는 파일 경로가 /usr/bin/chromedriver 일 경우입니다.

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

service = Service(excutable_path="/usr/bin/chromedriver")
driver = webdriver.Chrome(service=service)

 

반응형