Post

셀레니움 드라이버를 클래스로 감싸 재사용해보자

매번 반복되는 옵션·대기·쿠키·alert 처리를 한 클래스로 흡수해 사이트별 코드를 얇게 만들어보자

셀레니움 드라이버를 클래스로 감싸 재사용해보자

셀레니움 드라이버를 클래스로 감싸 재사용해보자

스크립트마다 반복되던 옵션·대기·쿠키·alert 처리를 한 클래스로 흡수해, 사이트별 코드를 얇게 만들어보자.

1. 서론 (Introduction)

  • 문제/상황 (Problem):
    • 셀레니움 스크립트를 새로 짤 때마다 같은 ChromeOptions를 복붙하고, WebDriverWait를 매번 다시 짜고, 로그인 쿠키를 또 받고, 예기치 못한 alert에 흐름이 멈춘다.
  • 목적 (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)을 메서드로 올려 사이트 스크립트가 동작을 조합만 하게 한다.
  • 분석 및 해결 프로세스 (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.