React 같은 SPA(Single Page Application) 페이지를 Selenium으로 제어해서 데이터 수집하는 방식은 분명 강력하지만 단점도 많습니다.
아래에서 왜 이렇게 처리해야 하는지, 그리고 어떤 점이 문제인지 정리해드릴게요.
---
🔹 1. 이렇게 처리하는 이유 (왜 Selenium을 써야 하나?)
React, Vue, Angular 같은 프론트엔드 프레임워크는
HTML을 서버에서 직접 보내지 않고,
JavaScript가 실행된 후 동적으로 화면을 그립니다.
즉,
requests.get(url) 같은 단순 요청으로는 데이터가 비어 있음
HTML 파서(BeautifulSoup)는 렌더링 후 데이터를 읽지 못함
👉 그래서 실제 브라우저를 띄워서 JavaScript를 실행시키는 도구,
즉 Selenium이 필요합니다.
브라우저 렌더링 후 DOM 생성 → Selenium이 완성된 HTML 읽기 가능
---
🔹 2. 장점
항목 설명
✅ 실제 사용자 환경 재현 로그인, 클릭, 스크롤 등 사람이 하는 행위를 그대로 자동화 가능
✅ JS 기반 사이트 대응 가능 React/Vue/Next.js 등 SPA 사이트의 데이터도 수집 가능
✅ QA/테스트에도 활용 가능 UI 동작 검증, 버튼 클릭 테스트 등 자동화에 적합
---
🔹 3. 단점 (중요 ⚠️)
문제점 설명
🐢 느림 실제 브라우저를 띄워 렌더링하므로 페이지 하나당 3~10초 소요. (단순 requests보다 수십 배 느림)
💻 리소스 많이 소모 CPU, RAM 점유율 높음. 동시에 여러 탭/페이지 돌리면 서버 터질 수 있음.
🔄 불안정함 버튼 위치 변경, 클래스명 변경, 로딩 시간 차이 등으로 스크립트 자주 깨짐.
⚙️ 유지보수 어려움 HTML 구조가 바뀌면 셀렉터(XPath, CSS)가 전부 수정돼야 함.
🚫 차단 가능성 있음 일부 사이트는 Selenium 접속을 탐지해 Access Denied 또는 bot detection을 띄움.
🔐 로그인 보안 문제 쿠키, 토큰, 비밀번호를 직접 코드에 넣으면 보안 위험 발생.
🧩 확장성 떨어짐 병렬 크롤링 어려움 (Chrome 드라이버 여러 개 띄우면 리소스 폭발).
---
🔹 4. 대안 (더 좋은 방법)
방법 설명 속도/안정성
🧠 공식 API 이용 React 페이지가 내부적으로 호출하는 REST API를 직접 요청 ⭐⭐⭐⭐
⚡ Playwright Microsoft 오픈소스. Selenium보다 빠르고 안정적 (Headless Chrome 기반) ⭐⭐⭐⭐
🧩 Puppeteer Node.js 기반 브라우저 자동화. JS 환경이라 React 페이지와 궁합이 좋음 ⭐⭐⭐⭐
🗂️ Network 탭 분석 개발자 도구(F12)에서 API 요청 URL 추출 후, 해당 URL로 직접 requests 호출 ⭐⭐⭐⭐⭐
---
🔹 5. 추천 접근 순서
1️⃣ Network 탭 확인
→ React 페이지에서 데이터를 어떻게 가져오는지 확인
→ fetch나 XHR 요청이 있다면 그 API URL을 찾는다.
2️⃣ API 직접 호출 가능하면 Selenium 불필요
→ requests 또는 axios로 JSON 받아서 처리 가능.
3️⃣ API가 숨겨져 있거나, 인증이 복잡하면 Selenium 사용 고려
---
🔹 6. 요약
항목 Selenium API 직접 호출
속도 느림 🐢 빠름 ⚡
안정성 HTML 구조 바뀌면 깨짐 비교적 안정
리소스 높음 낮음
보안 로그인 자동화시 위험 상대적으로 안전
추천 상황 UI 자동화, 테스트, 로그인 필요 데이터 수집, ETL, 분석용
---
👉 결론:
Selenium은 “사람처럼 행동해야 하는 경우”에만 쓰세요.
(로그인, 버튼 클릭, 무한스크롤 등)
단순히 “데이터만 수집”하려면
API 직접 요청 방식이 훨씬 빠르고 효율적입니다.
'skill > check' 카테고리의 다른 글
| Junit 기반 백엔드 테스트 스위트 (0) | 2025.10.15 |
|---|---|
| 테스트 스위트(Test Suite) (0) | 2025.10.14 |
| 셀레니움(Selenium) React 페이지 데이터 수집 예제 (Headless 모드) (0) | 2025.10.14 |
| 셀레니움(Selenium) (0) | 2025.10.14 |