셀레니움 드라이버를 클래스로 감싸 재사용해보자
매번 반복되는 옵션·대기·쿠키·alert 처리를 한 클래스로 흡수해 사이트별 코드를 얇게 만들어보자
셀레니움 드라이버를 클래스로 감싸 재사용해보자
셀레니움 드라이버를 클래스로 감싸 재사용해보자
스크립트마다 반복되던 옵션·대기·쿠키·alert 처리를 한 클래스로 흡수해, 사이트별 코드를 얇게 만들어보자.
1. 서론 (Introduction)
- 문제/상황 (Problem):
- 셀레니움 스크립트를 새로 짤 때마다 같은 ChromeOptions를 복붙하고,
WebDriverWait를 매번 다시 짜고, 로그인 쿠키를 또 받고, 예기치 못한 alert에 흐름이 멈춘다.
- 셀레니움 스크립트를 새로 짤 때마다 같은 ChromeOptions를 복붙하고,
- 목적 (Purpose):
- 반복되는 세팅을
webdriver.Chrome을 상속한 한 클래스에 모아, 사이트별 스크립트는 핵심 로직만 남긴다.
- 반복되는 세팅을
- 대상 (Target Audience):
- 여러 사이트를 셀레니움으로 자동화하며 같은 보일러플레이트를 반복하는 개발자
2. 방법 및 과정 (Methods & Process)
- 배경 조사 및 데이터 (Data Collection):
- 매번 반복되던 보일러플레이트를 일곱 가지로 정리하고, 각각을 래퍼가 흡수하도록 설계하였다.
| 흡수 항목 | 설명 | 장점 |
|---|---|---|
| 봇탐지 우회 옵션 | excludeSwitches·AutomationControlled 비활성화 | 자동화 탐지 회피를 매번 기억할 필요 없음 |
| 확장 로드 | --load-extension으로 여러 확장 주입 | 확장 기반 자동화를 한 인자로 처리 |
| 프록시 | --proxy-server 설정 | 우회 접속을 옵션 하나로 |
| 도메인별 쿠키 영속 | 도메인 키로 쿠키 저장·복원 | 매 실행 재로그인 회피 |
| 안정적 대기 | wait_el·wait_for_load 헬퍼 | flaky한 time.sleep 제거 |
| alert 억제 | alert·confirm 무력화 스크립트 | 모달에 흐름이 막히지 않음 |
| 드라이버 자동 확보 | chromedriver 없으면 매니저 폴백 | 환경 차이를 코드가 흡수 |
- 접근 방법 (Approach Methods):
- [방법 1]: webdriver.Chrome을 상속해 생성자에서 옵션을 한 번에 구성한다. 호출부는
Driver(headless=True)한 줄로 끝난다. - [방법 2]: 자주 쓰는 동작(대기·쿠키·alert)을 메서드로 올려 사이트 스크립트가 동작을 조합만 하게 한다.
- [방법 1]: webdriver.Chrome을 상속해 생성자에서 옵션을 한 번에 구성한다. 호출부는
- 분석 및 해결 프로세스 (Analysis Flow):
- 도구/기술: Python, selenium, webdriver-manager
- 주요 단계: 옵션 구성 $\rightarrow$ webdriver.Chrome 상속 생성 $\rightarrow$ 대기·쿠키·alert 메서드 부착 $\rightarrow$ 사이트별 스크립트는 동작만 조합
- 결과 도출 및 검증: 공개 사이트(example.com)에서 Driver 생성 한 줄로 로드·대기·쿠키 저장·스크린샷이 동작함을 확인하였다.
3. 결과 (Results)
- 분석 결과 요약:
- 사이트별 스크립트에서 옵션·대기·쿠키 보일러플레이트가 사라지고,
Driver를 생성해 동작만 조합하는 형태로 짧아졌다. - 봇탐지 우회·재로그인 회피가 기본 내장되어 새 사이트 대응 시간이 줄었다.
- 사이트별 스크립트에서 옵션·대기·쿠키 보일러플레이트가 사라지고,
4. 인사이트 및 액션 (Insights & Action)
- 인사이트 (Insight):
- 래핑의 목적은 멋이 아니라 반복과 실수의 제거다. 같은 코드를 세 번 복붙했다면 클래스로 올릴 때다.
- 실행 방안 (Action Plan):
- 새 자동화는 항상 이
Driver에서 출발하고, 사이트 고유 로직만 서브클래스나 함수로 덧붙인다.
- 새 자동화는 항상 이
- 한 줄 결론 (Key Takeaway):
- 셀레니움은 매번 새로 세팅하지 말고 한 클래스로 감싸 재사용하자. 샘플 코드
- 다음 스텝 (Next Step):
- 이 래퍼에 크롬 확장을 올려보자. 다음엔 VPN 확장을 주입해 우회 IP를 확인해보자.
This post is licensed under CC BY 4.0 by the author.