개인적으로 작은 프로젝트들을 진행했던 일들이 있어서 크롤러 소스를 많이 만들고
업무를 자동화하거나 DB를 자동으로 쌓거나 하는 등의 작업들을 할 때 크롤링 소스들을 많이 만들었다.
이전까지는 bs4로 작업을 하기 힘들어 보일 때 모두 셀레니움을 이용했는데 셀레니움을 이용하면서 크롤링을 진행할떄마다
느꼈던 불편했던 점이 하나 있었다. 그건 바로
크롬 브라우저 버전이 업데이트 되면 항상 그에 맞는 크롬 드라이버를 다운로드 해야했던 것이다.
그래서 고민했던 것이 크롬드라이버를 자동으로 다운 받는 코드까지 만들어둘까 였는데 이전에 찾을 때는 없었는데 올해 찾아보니
webdriver_manager 라는 매우 유용한 라이브러리가 존재했다.
설치방법은 간단하다. 파이썬, 셀레니움 모두 설치되어있다면
pip install webdriver_manager
아나콘다일 경우
conda install webdriver_manager
설치해준다
기존 방식에서는 크롬드라이버 파일이 같이 있는 프로젝트 내 폴더에서 driver = webdriver.Chrome() 과 같이 선언해 줬었다.
from selenium import webdriver
import time
def main():
url = "http://www.naver.com"
driver = webdriver.Chrome()
driver.get(url)
time.sleep(5)
if __name__ == '__main__':
main()
실행해보면 크롬드라이버가 맞는 버전이 설치되어있는 경우 바로 창이 열리고 네이버가 열리는 것을 볼 수 있다.
webdriver_manager를 사용한 코드를 살펴보면 아래와 같다.
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import time
def main():
url = "http://www.naver.com"
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(url)
time.sleep(5)
if __name__ == '__main__':
main()
로그를 살펴보면 아래와 같은데
현재 내 크롬브라우저 버전을 자동을 확인해주고 그에 맞는 버전을 확인해주고 없으면 다운받아주고 있으면 확인해서 바로 사용해준다.
경로를 들어가보면
이렇게 자동으로 잘 다운받아준 것을 볼수 있다.
셀레니움 크롬드라이버 사용하는 분들이 webdriver_manager 라이브러리를 알게 돼서 잘 사용했으면 좋겠다.
from webdriver_manager.chrome import ChromeDriverManager 이 부분에서 항상 오류가 뜹니다ㅠㅠㅠ
AttributeError Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/common/driver_finder.py in get_path(service, options)
37 try:
---> 38 path = SeleniumManager().driver_location(options) if path is None else path
39 except Exception as err:
4 frames
AttributeError: 'str' object has no attribute 'capabilities'
During handling of the above exception, another exception occurred:
AttributeError Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/selenium/webdriver/common/driver_finder.py in get_path(service, options)
38 path = SeleniumManager().driver_location(options) if path is None else path
39 except Exception as err:
---> 40 msg = f"Unable to obtain driver for {options.capabilities['browserName']} using Selenium Manager."
41 raise NoSuchDriverException(msg) from err
42
AttributeError: 'str' object has no attribute 'capabilities'
이런 오류가 뜨는데 이유가 뭘까요...ㅠ