문제점
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를 지원합니다.
아래와 같이 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)
'Language' 카테고리의 다른 글
[Python] 문자열을 연산자로 사용하기 (0) | 2023.09.08 |
---|---|
[Selenium Python] 'WebDriver' object has no attribute 'find_elements_by_class_name' (0) | 2023.08.14 |
[Vue.js] Tags with side effect (script and style) are ignored in client component templates. (1) | 2022.10.08 |
[Java] Queue 자료형 (0) | 2022.04.27 |
[Python] Tensorflow로 사용가능한 GPU 확인하기 (0) | 2021.04.06 |