Selenium와 PlayWright

데브코스

목록 보기
124/131

Selenium, 한 번에 이해하기

브라우저를 사람 대신 자동으로 조작하고 싶을 때가 있다. 버튼 클릭, 로그인, 폼 입력, 스크롤… 이걸 코드로 시킬 수 있는 도구가 Selenium이다. 핵심부터 한 줄로 정리하면 이렇다.

Selenium = 브라우저를 코드로 자동 조작하는 도구. 테스트 자동화와 웹 스크래핑에 주로 씀


쉽게 비유하면

브라우저를 원격으로 조종하는 리모컨이라고 생각하면 됨! 사람이 직접 마우스 클릭하고 키보드 치던 걸, 코드가 대신 해주는 거다.

  • 사람이 직접: 브라우저 열고 → URL 입력 → 로그인 → 버튼 클릭 → 결과 확인
  • Selenium: 코드 한 번 짜두면 → 이 과정을 자동으로 계속 반복

마치 매크로 프로그램 같은 건데, 훨씬 정교하고 코드로 제어할 수 있는 버전 같음!


자세히

어떻게 동작하나

Selenium은 WebDriver라는 다리를 통해 브라우저를 제어한다.

내 코드 → WebDriver → 브라우저 (Chrome, Firefox 등)

Chrome을 쓰면 ChromeDriver, Firefox면 GeckoDriver를 설치해서 연결한다. 브라우저가 실제로 켜지면서 코드가 시키는 대로 움직인다. 헤드리스(Headless) 모드를 쓰면 화면 없이 백그라운드에서만 돌릴 수도 있음.

주요 언어 지원

Python, Java, JavaScript, C# 등 여러 언어를 지원한다. 제일 많이 쓰이는 건 Python + Selenium 조합 같음.

핵심 기능

  • 요소 찾기 — id, class, CSS 선택자, XPath 등으로 HTML 요소 찾기
  • 클릭·입력 — 버튼 클릭, 텍스트 입력, 드롭다운 선택
  • 대기(Wait) — 페이지 로딩 기다리기. 안 기다리면 요소 못 찾아서 에러남
    • 암묵적 대기(Implicit Wait): 무조건 n초 기다림
    • 명시적 대기(Explicit Wait): 특정 요소 나타날 때까지 기다림 (이게 더 권장됨)
  • 스크린샷 — 현재 화면 캡처
  • JavaScript 실행 — 직접 JS 코드 주입해서 실행 가능

언제 쓰나

크게 두 가지 용도다.

1. E2E 테스트 자동화
실제 브라우저에서 "유저가 이 흐름으로 쓸 때 잘 동작하나" 검증. 배포 전에 자동으로 돌려서 주요 기능이 안 깨졌는지 확인하는 것 같음.

2. 웹 스크래핑
JavaScript로 동적으로 렌더링되는 페이지는 requests 같은 단순 HTTP 요청으로 못 긁어온다. Selenium은 실제 브라우저를 돌리니까 JS 실행 후 결과까지 긁어올 수 있음.

Selenium vs Playwright

요즘 E2E 테스트 쪽에선 Playwright가 대세로 올라오고 있음. 비교하면 이렇다.
(내가 코딩하면서 쓰는 것이 playwright임! ㅋㅋㅋ 구버전 playwright가 selenium이구만)

SeleniumPlaywright
역사오래됨 (2004~)신생 (Microsoft, 2020~)
속도상대적으로 느림빠름
설정드라이버 별도 설치 필요자체 내장
언어 지원폭넓음JS/TS/Python/Java/C#
특징범용성·레퍼런스 많음자동 대기, 병렬 실행 강력

Selenium은 레퍼런스가 훨씬 많고, Java 기반 프로젝트나 기업 QA 환경에서 여전히 많이 쓴다. Playwright는 빠르고 설정이 쉬워서 신규 프로젝트엔 Playwright를 많이 선택하는 추세 같음!


실사용 예

E2E 테스트 예시 (Python)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://myapp.com/login")

driver.find_element(By.ID, "email").send_keys("test@test.com")
driver.find_element(By.ID, "password").send_keys("1234")
driver.find_element(By.ID, "login-btn").click()

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "dashboard"))
)

print("로그인 성공!")
driver.quit()

이 코드를 CI/CD 파이프라인에 넣으면 배포 전마다 자동으로 로그인 테스트를 돌릴 수 있음.

실무 시나리오

  • 쇼핑몰 가격 변동을 매일 자동으로 긁어와서 DB에 저장하는 스크래퍼
  • 회원가입 → 상품 검색 → 장바구니 → 결제까지의 핵심 플로우를 배포 전마다 자동으로 검증
  • 특정 사이트에서 데이터 수집할 때, JS 렌더링 이후 결과가 필요한 경우

한 방 정리

구분내용
한 줄 정의브라우저를 코드로 자동 조작하는 도구
비유브라우저 원격 리모컨
주요 용도E2E 테스트 자동화 / 웹 스크래핑
핵심 개념WebDriver, 요소 찾기, 대기(Wait)
요즘 대안Playwright (신규 프로젝트엔 이쪽 추세)

쉽게 외우면 "사람이 브라우저 쓰는 걸 코드가 대신 해주는 것" — 이렇게 보면 감 잡힐 듯!

profile
Dive Head First | Work Super Hard | Attract Great People

0개의 댓글