본문 바로가기
어플리케이션

웹 자동화의 표준, Selenium에 대해 알아보겠습니다.

by forward error correction Circle 2026. 4. 29.
반응형

Ⅰ. Selenium 이란?

 웹 브라우저의 모든 동작을 코드로 자동화하는 오픈소스 프레임워크입니다. 2004년 웹 테스팅 도구로 출발하여, 현재는 데이터 수집(Crawling), 업무 자동화(RPA), 대규모 병렬 테스트까지 IT 전 영역에서 사용되는 표준 기술입니다.
2026년 기준 Selenium 5에서는 AI 기반 셀프 힐링(Self-Healing) 기능이 도입되었습니다. 웹 페이지 구조가 바뀌어도 AI가 자동으로 요소를 재탐지하여 스크립트 유지보수 부담이 크게 줄었습니다.

Selenium 진화

 단순 테스트 도구에서 범용 자동화 플랫폼으로 진화

구분 주요 특징 핵심 키워드
2004 초기 웹 테스트 자동화의 시작 웹 테스팅 도구
Selenium 4 브라우저 자동화의 표준 확립 W3C 표준화
Selenium 5 AI를 활용한 안정성 및 지능화 AI 셀프 힐링
현재 테스트를 넘어선 영역 확장 테스트, 크롤링, RPA

Ⅱ. Selenium 주요 특징

 ⅰ. 다양한 언어 지원

   : Python, Java, C#, JavaScript, Ruby 등 팀의 기술 스택에 맞는 언어로 작성할 수 있습니다.

 ⅱ. 멀티 브라우저

   : Chrome, Firefox, Safari, Edge 등 모든 주요 브라우저를 단일 코드로 제어합니다.

 ⅲ.  W3C 표준

   : W3C 공식 표준 프로토콜을 채택하여 브라우저 버전 간 호환성이 매우 안정적입니다.

 ⅳ. AI 셀프 힐링

   : HTML 구조가 변경되어도 AI가 유사 요소를 자동 탐지하여 스크립트 깨짐을 방지합니다

 ⅴ. Selenium Manager

   : 별도 드라이버 다운로드 없이 실행 환경에 맞는 브라우저 드라이버를 자동으로 관리합니다.

Ⅲ. Selenium 동작 방식

 클라이언트-서버 구조로 동작합니다. 사용자 코드가 HTTP 명령으로 변환되고, 브라우저 드라이버를 거쳐 실제 브라우저에서 실행됩니다. 결과는 역순으로 반환됩니다.

단계 구분 주요 역할 및 상세 동작
1 코드 작성 (Client) 사용자가 Python 등으로 find_element(), click() 같은 명령을 작성합니다. Selenium 라이브러리가 이를 WebDriver 프로토콜 명령으로 변환합니다.
2 WebDriver 프로토콜 전송 변환된 명령이 HTTP RESTful API 형태로 로컬호스트의 브라우저 드라이버 서버로 전송됩니다. W3C 표준 JSON 포맷을 사용합니다.
3 Browser Driver 중계 ChromeDriver, GeckoDriver 등 각 브라우저 전용 드라이버가 HTTP 명령을 수신하여 브라우저가 이해할 수 있는 내부 프로토콜로 변환합니다.
4 브라우저 실행 & 결과 반환 실제 브라우저에서 클릭, 입력, 스크롤 등의 동작이 수행됩니다. 결과(HTML, 스크린샷, 텍스트 등)는 역순으로 코드에 반환됩니다.

Headless 모드를 사용하면 브라우저 창을 화면에 띄우지 않고 백그라운드에서 실행할 수 있습니다. 서버 환경이나 대규모 병렬 크롤링에 필수입니다.

Ⅳ. Selenium 아키텍처 구성 및 흐름도

 ⅰ.  Selenium 4계층 아키텍처

 ⅱ. 구성요소

구성 요소 역할 예시
Client Library 사용자가 코드로 명령을 작성하는 언어별 인터페이스 selenium, selenium-webdriver
W3C Protocol 클라이언트와 드라이버 간 HTTP 통신 표준 규약 JSON Wire
Browser Driver 프로토콜 명령을 브라우저 내부 신허로 변환하는 중계자 ChromeDriver, GeckoDriver
Real Browser 실제 자동화가 실행되는 최종 대상 Chrome, Firefox

Ⅴ. Selenium 설치 방법

 Selenium 4.6 이상부터는 Selenium Manager가 내장되어 ChromeDriver를 별도로 다운로드할 필요가 없습니다. 설치가 매우 간단해졌습니다.

전제 조건: Python 3.8+, Chrome 또는 Firefox가 PC에 설치되어 있어야 합니다. 드라이버는 자동으로 관리됩니다.

ⅰ. 라이브러리 설치

# Selenium 설치 (Selenium Manager 포함)
pip install selenium

# 버전 확인
python -c "import selenium; print(selenium.__version__)"

ⅱ. 브라우저 드라이버 설정

webdriver.Chrome()을 호출하면 Selenium Manager가 현재 설치된 Chrome 버전에 맞는 ChromeDriver를 자동 다운로드 & 실행합니다. 더 이상 "드라이버 버전 불일치" 오류로 고생할 필요가 없습니다.

※ Chrome 또는 Firefox가 PC에 설치되어 있어야 합니다. 브라우저 자체는 자동 설치되지 않습니다.

Ⅵ. Selenium 사용 방법

브라우저 실행 → URL 접속 → 요소 탐색 → 상호 작용 → 종료의 흐름을 익히면 대부분의 자동화를 구현할 수 있습니다.

 

ⅰ. 기본 패턴 - 구글 검색 자동화

from selenium import webdriver
from seleniuhttp://m.webdriver.common.by import By
from seleniuhttp://m.webdriver.common.keys import Keys
from seleniuhttp://m.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 1. 브라우저 실행 (드라이버 자동 매칭)
driver = webdriver.Chrome()
driver.implicitly_wait(5)  # 요소 탐색 최대 대기 5초

try:
    # 2. URL 접속
    driver.get("https://www.google.com")

    # 3. 검색창 찾기 & 입력
    search_box = driver.find_element(By.NAME, "q")
    search_box.send_keys("Selenium 5 신기능")
    search_box.send_keys(Keys.RETURN)

    # 4. 첫 번째 결과 로딩 대기 후 텍스트 출력
    first = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "h3"))
    )
    print("첫 번째 결과:", first.text)

finally:
    driver.quit()  # 반드시 종료하여 리소스 반납

 

ⅱ. Headless 모드 - 서버·배치 환경

from seleniuhttp://m.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless=new")        # 창 없이 실행
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=options)
driver.get("https://example.com")
print(driver.title)
driver.quit()

Ⅶ. Selenium 자주 쓰는 명령어

메서드 설명
driver.get(url) 지정한 URL로 이동합니다. 페이지가 완전히 로드될 때까지 대기합니다.
find_element(By.X, val) 조건에 맞는 HTML 요소 1개를 반환합니다. By.ID, By.CSS_SELECTOR, By.XPATH 등을 사용합니다.
find_elements(By.X, val) 조건에 맞는 모든 요소를 리스트로 반환합니다. 반복 처리에 사용합니다.
element.click() 해당 요소를 클릭합니다. 버튼, 링크, 체크박스 등에 사용합니다.
element.send_keys(text) 입력 필드에 텍스트를 타이핑합니다. Keys.RETURN 같은 특수 키도 전달할 수 있습니다.
execute_script(js) JavaScript를 직접 실행합니다. 스크롤 이동, 숨겨진 요소 조작에 활용합니다.
WebDriverWait().until() 특정 조건이 충족될 때까지 명시적으로 대기합니다. implicitly_wait보다 정밀하여 실전에서 권장합니다.
driver.quit()  브라우저와 드라이버 프로세스를 모두 종료합니다. 메모리 누수 방지를 위해 반드시 호출합니다.

Ⅷ. Selenium 활용 방안

활용 분야 구분 상세 내용 및 효과 주요 타겟
QA 테스트 UI 자동화 테스트 배포 후 UI/UX의 정상 작동 여부를 정기적으로 검증합니다. CI/CD 파이프라인에 통합하여 회귀 테스트(Regression Test) 효율을 극대화합니다 개발팀, QA 엔지니어
데이터 수집 동적 웹 크롤링 JavaScript로 렌더링되는 SPA(React, Vue 등) 사이트의 데이터를 수집합니다. 정적 분석 도구로 접근 불가능한 동적 요소를 추출할 때 사용합니다. 데이터 분석가, 마케터
RPA 업무 프로세스 자동화 반복적인 행정 업무(보고서 다운로드, 민원 접수, 데이터 입력 등)를 자동화합니다. 단순 반복 업무를 줄여 업무 생산성을 높이는 데 기여합니다. 일반 사무직, 운영팀
모니터링 서비스 가용성 감시 로그인, 결제 등 핵심 사용자 여정(User Journey)을 24시간 감시합니다. 기능 장애나 로딩 속도 저하를 실시간으로 탐지하여 사고를 방지합니다. 인프라/SRE 팀, 서비스 운영자



반응형