본문 바로가기
SW 개발/Python

Selenium 4.0 개선 사항 정리 - WebDriver 자동 로딩 가능

by Kibua20 2021. 12. 26.

이전 포스팅에서 설명한 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를 자동으로 다운로드하고 로딩이 가능합니다. 

 

 

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을 배포하고 실행할 수 있습니다. 
출처: https://www.youtube.com/watch?v=ZdUBoR45gko

 

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로 전달합니다.  

 

Selenium 3.0 버전과 4.0 버전의 코드 변경 내용

 

Web Driver 동작 확인 

Web Driver 동작 시 아래와 같이 Chrome version을 확인하고 OS에 맞는 Web driver를 /.wdm/driver에 다운로드하고 사용합니다.  첫 번째 실행 이후에는 cache를 재 사용하기 때문에 Local에 미리 설치할 필요가 없습니다. 

Web Driver Manager 동작 확인

 

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 등의 코드를 생성할 수 있습니다. 

 

 

Selenium IDE -화면 녹화 기능 지원

관련 글

[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)] - Python Dash를 활용한 Web App 구현 및 시계열 데이터 Visualization (Sample code)

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Keras를 이용한 다중 클래스 분류: softmax regression (Sample code)

[블로그 관리/티스토리 블로그 관리] - 파이썬 Selenium을 활용한 블서치 백링크 등록 '자동화'




댓글