Chrome을 최신 버전으로 업데이트하면서, 자동화 테스트 중 ChromeDriver 설치에 문제가 생겼다 ..
구글링을 하던 중 ChromeDriver를 설치하지 않고, webdriver_manager를 이용하는 방식을 알게 되어서
관련된 개념을 정리할 겸 글을 작성해 보려고 한다.
기존에는 Chrome 버전에 맞는 ChromeDriver를 찾아서 설치해주는 방식을 이용했는데,
최신 Chrome 버전에 맞는 ChromeDriver 버전이 chromedriver.storage에 없어서 다운 받지 못하는 문제였다 ..
selenium
- 웹사이트 테스트를 위한 도구로 브라우저 동작을 자동화할 수 있음
- 프로그래밍으로 브라우저 동작을 제어해서 마치 사람이 이용하는 것 같이 웹페이지를 요청하고 응답을 받아올 수 있음
Chrome Webdriver
- 많은 브라우저에서 웹 앱을 자동적으로 테스트하는 툴
- 웹 페이지를 자동으로 탐색하고 유저 폼을 사용하거나 자바스크립트를 실행하는 등의 작업을 수행할 수 있음
- Google Chrome 브라우저를 자동화하기 위한 도구로, Selenium과 같은 테스트 자동화 프레임워크와 함께 사용됨
- Chrome과 ChromeDriver의 버전이 맞지 않으면 오류가 발생하기 때문에 동일한 버전의 ChromeDriver를 설치하는 것이 중요함
장점
- 직접 제어: ChromeDriver의 버전을 직접 관리할 수 있어, 특정 버전의 Chrome과 호환되는 드라이버를 사용할 수 있음
- 환경 설정: 시스템에 맞게 드라이버를 설정할 수 있어, 다양한 환경에서의 테스트에 유리함
단점
- 업데이트 관리: Chrome이 업데이트될 때마다 드라이버도 수동으로 업데이트해야 하므로, 관리가 번거로울 수 있음
- 설치 과정: 드라이버를 다운로드하고 경로를 설정하는 과정이 필요하여 초기 설정이 복잡할 수 있음
최근 ChromeDriver 메인 홈페이지가 변경되면서, 자동화 테스트 시 설치에 귀찮음을 느꼈고 ..
내가 별도로 설치해줄 필요가 없는 webdriver_manager 방식으로 갈아타기로 했다.
webdriver_manager
- Selenium WebDriver의 버전을 자동으로 관리해주는 Python 패키지
- 브라우저 드라이버(예: ChromeDriver, GeckoDriver 등)를 수동으로 다운로드하고 경로를 설정할 필요 없이, 코드에서 직접 드라이버를 다운로드하고 사용할 수 있음
설치 방법
pip install webdriver_manager
장점
- 자동화: WebDriver Manager는 필요한 드라이버를 자동으로 다운로드하고 설정해 주므로, 초기 설정이 간편함
- 버전 관리: Chrome의 버전에 맞는 드라이버를 자동으로 선택하여 설치해 주기 때문에, 버전 호환성 문제를 줄일 수 있음
단점
- 의존성: WebDriver Manager에 의존하게 되어, 해당 라이브러리에 문제가 생기면 테스트에 영향을 줄 수 있음
- 제어 부족: 드라이버 버전을 직접 선택할 수 없거나, 특정 버전으로 고정하기 어려울 수 있음
사용 예시
# pip install webdriver-manager
# pip install selenium (# pip install -U selenium)
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
# webdriver_manager 통해 driver 설정
service = Service()
options = webdriver.ChromeOptions()
options.add_argument("--headless") # 브라우저를 헤드리스 모드로 실행. 브라우저 UI 없이 백그라운드에서 동작하게 함
options.add_argument("--no-sandbox") # 샌드박스 모드를 비활성화. 보안 기능을 비활성화하여 브라우저가 더 많은 권한을 가지게 함
options.add_argument('--disable-dev-shm-usage') # /dev/shm 사용을 비활성화. 메모리 공유를 비활성화하여 메모리 부족 문제를 방지함
options.add_argument('--ignore-certificate-errors') # SSL 인증서 오류를 무시. 인증서 오류가 있는 사이트에도 접근할 수 있게 함
options.add_argument("--disable-gpu") # GPU 하드웨어 가속을 비활성화. GPU 관련 문제를 피하기 위해 사용
options.add_argument("--incognito") # 시크릿 모드(Incognito mode)로 브라우저를 실행. 브라우저 기록이 저장되지 않음
driver = webdriver.Chrome(service=service, options=options)
# 네이버 접속
driver.get("https://www.naver.com")
# 검색 창 찾아서 hello world 입력
search_input = driver.find_element(By.CLASS_NAME,"search_input")
search_input.click()
search_input.send_keys("hello world")
# 검색 버튼 클릭
btn_search = driver.find_element(By.CLASS_NAME,"btn_search")
btn_search.click()
time.sleep(20)
'프로그래밍 > 기타' 카테고리의 다른 글
컴파일 과정, 컴파일러 (0) | 2024.08.02 |
---|---|
TOTP(Time Based One Time Password) (0) | 2024.04.15 |
협업을 위한 컨벤션, Gitmoji (0) | 2023.09.04 |
UML 클래스 다이어그램 (0) | 2023.01.28 |