[Python] Chrome Driver 없이 자동실행
[ Selenium(셀레니움)이란? ]
* Selenium 은 사용자가 직접 조작하지 않고 프로그램에 의해서 웹 브라우저를 조작할 수 있게 해주는 라이브러리를 말한다.
* Selenium 을 이용하여 웹 크롤링을 하기 위해서는 먼저 Selenium을 설치하고 웹 브라우저를 설치하면 된다.
* Browser Driver 는 웹 브라우저가 Selenium 서버 사이에 통신하기 위한 인터페이스 도구를 말한다.
* 다양한 웹 브라우저를 제어하는데 필요한 Browser Driver를 다운로드하는 싸이트는 아래와 같다.
- Chrome : https://sites.google.com/chromium.org/driver/downloads
- Edge : https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
- Internet Explorer : http://selenium-release.storage.googleapis.com/index.html
- Firefox : https://github.com/mozilla/geckodriver/releases
[ Chrome Driver 업데이트 ]
* 웹 브라우저는 대부분 Chrome를 가장 많이 사용하는데 문제는 Chrome 버전이 워낙 자주 변경되어서 어느 날 갑자기 실행이 안 되는 경우가 빈번하게 발생한다는 것이다.
* 드라이버를 다운로드 해주지 않으면 현재 브라우저와 버전이 달라져 오류가 발생하여 실행되지 않는 것이 원인이다.
* 물론 이럴 때마다 Chrome 드라이버를 다운로드하는 사이트( https://sites.google.com/chromium.org/driver/downloads )에 가서 최신 버전으로 다운 받아서 기본 버전을 교체하면 되긴 하는데 이 작업이 번거롭다.
[ Chrome Driver 없이 작동하는 방법 ]
* webdriver-manager 라이브러리를 설치한다.
* Command 창에서 "pip install webdriver-manager" 실행하면 아래와 같이 설치가 된다.
* python 소스코드를 아래와 같이 수정하면 실행할 때마다 자동으로 드라이버를 다운로드해 Selenium이 실행된다.
<변경전>
from selenium import webdriver
from selenium.webdriver.common import keys
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://www.google.co.kr/')
<변경후>
from selenium import webdriver
from selenium.webdriver.common import keys
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
options = webdriver.ChromeOptions()
browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
browser.get('https://www.google.co.kr/')
* 마지막으로 기존에 설치되어 있던 "chromedriver.exe" 파일은 더 이상 필요 없으니 삭제해 버린다.
* 이제 크롬 버전이 변경될 때마다 매번 드라이버를 다운로드하지 않아도 된다. ^^
* 셀레니움 4.0은 브라우저 버전과 운영체제를 감지하여 자동으로 해당 버전에 맞는 웹 드라이버를 다운로드하고 설치한다.
* 만약 특정 버전을 다운로드 하려면 아래와 같이 버전을 추가하면 된다.
browser = webdriver.Chrome(service=Service(ChromeDriverManager(driver_version='115.0.5790.102'.).install()), options=options)
[ 단점 ]
* 단점이라고 할 순 없지만 브라우저 실행 시점에 실시간으로 크롬 브라우저를 다운로드하기 때문에 대기하는 시간이 일부 지루할 수 있다.
* 특히나 인터넷 데이터 용량이 한정된 네트워크에서는 과도한 데이터 소비가 단점이 될 수 있을 듯하다.
* 필요시 2가지 실행 방법을 모두 구현해 놓고 네트워크 환경에 따라서 조건문으로 분기하는 것도 방법이다.