이전 포스팅에서 설명한 Web Crawling 방법에서 사용했던 Selenium이 3.0 버전에서 4.0으로 업그레이드 되었습니다. Selenium 3.0 버전 대비 4.0에서 가장 큰 개선 사항은 OS 별(Windows, Unbuntu, MacOS), Broswer 버전을 자동 감지하여 Web Driver 설치를 자동으로 할 수 있습니다. 이전 버전에서는 Chrome Driver를 버전별로 지정해서 수동으로 설치했었습니다. 만일 Chrome Version이 업데이트되는 경우 Web Driver도 같이 변경해야 하지만, Selenium 4.0부터는 OS와 Web Broswer에 맞는 Web Driver를 자동으로 다운로드하고 로딩이 가능합니다.
- Python Selenium과 BeautifulSoup을 활용하여 Google PlayStore 사용자 리뷰 (댓글) 가져오기 (Sample Code 포함)
- 파이썬 Selenium을 활용한 네이버 서치어드바이저 URL 입력 '자동화'
- Apple App Store 사용자 댓글(리뷰) 데이터 수집하기 (Sample code 포함)
Selenium 4.0 특징
Selenium 4.0의 주요 특징은 아래와 같이 3가지 요약할 수 있고, 유튜브 동영상에서도 잘 요약되어 있으니 참고하세요.
- Selenium WebDriver: Broswer와의 상호 작용은API의 기반의 JSON 프로토콜을 사용했지만, 4.0부터는 W3C 표준 프포토콜을 준수합니다.
- Selenium IDE: Chrom 의 확장프로그램으로 동작하여, Boswer에서 사용하가 마우스 클릭, 키 입력 등을 녹화하여 script 자동 생성을 지원하고 있습니다. Java, NodeJS, Python의 자동 코드를 생성할 수 있습니다.
- Selenium Grid 4 (Docker Container): 하나의 script으로 원격 실행이 가능합니다. Docker의 Container를 사용해서 다수의 가상 머신에 Selenium을 배포하고 실행할 수 있습니다.
Selenium 3.0에서 4.0 코드 변경점
Selenium 3.0 코드에서는 Broswer 버전에 맞는 web drvier를 다운로드하고 web driver (=chrom driver)의 위치를 지정했어야 했었습니다. 이 경우 동일한 코드로 OS가 변경되거나, Broswer 업데이트되는 경우 이에 맞춰서 변경을 계속해야 합니다. Selenium 4.0부터는 WebDriver Manager 가 자동으로 Web browser의 버전을 확인하고 OS와 버전에 맞는 webdriver를 다운로드하고 실행합니다. 즉 OS나 Chrome version이 변경되더라도 소스 코드는 변경 없이 그대로 유지할 수 있습니다. WebDriver는 selenium 설치 시 같이 설치해야 합니다.
Selenium과 Web Driver 설치
$ pip3 install selenium webdriver_manager
Selenium 3.0과 4.0 소스 코드 변경
Webdriver.Chrome() 함수에서 Service 객체와 필요시 Option 객체를 parameter로 전달합니다.
Web Driver 동작 확인
Web Driver 동작 시 아래와 같이 Chrome version을 확인하고 OS에 맞는 Web driver를 /.wdm/driver에 다운로드하고 사용합니다. 첫 번째 실행 이후에는 cache를 재 사용하기 때문에 Local에 미리 설치할 필요가 없습니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
# Setup opitons
option = Options()
option.add_argument("disable-infobars")
option.add_argument("disable-extensions")
# option.add_argument("start-maximized")
option.add_argument('disable-gpu')
# option.add_argument('headless')
# Selenium 4.0 - load webdriver
try:
s = Service(ChromeDriverManager().install())
browser = webdriver.Chrome(service=s, options=option)
except Exception as e:
print(e)
return
# Move to URL
browser.get('https//your.web.url')
# Do crawling
Selenium IDE
Selenium IDE는 Chrome과 Firefox Broswer에서 Extenstion 설치 형태로 무료로 사용 가능합니다. Web 브라우져에서 DOM 선택하고 입력 값을 녹화하여 Test Code를 생성할 수 있습니다. Html 구조에 익숙하지 않은 개발자나 SQE(소프트웨어 품질 엔진니어)도 테스트 코드를 작성할 수 있으며, pytest 나 Junit, Mocha 등의 코드를 생성할 수 있습니다.
관련 글
[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Apple App Store 사용자 댓글(리뷰) 데이터 수집하기 (Sample code 포함)
[SW 개발/Python] - Python 자동 테스트를 위한 Pytest 사용법과 예제
[SW 개발/Python] - Python 단위 테스트(Unit Test)를 위한 unittest 사용법과 예제
[SW 개발/Python] - Python Decorator를 이용한 함수 실행 시간 측정 방법 (Sample code)
[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Jupyter Notebook의 업그레이드: Jupyter Lab 설치 및 extension 사용법
[개발환경/Web Server] - Web Server 성능 및 Load 측정 Tool: Apache AB (Apache Http Server Benchmarking Tool)
[SW 개발/Python] - Python 가상환경(Virtual Environment) 만들기 위한 virtualenv 명령어 및 실행 예제
[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Keras를 이용한 다중 클래스 분류: softmax regression (Sample code)
댓글