콘텐츠로 이동

Selenium 브라우저 자동화 가이드

개요

Selenium = Python으로 크롬 브라우저를 자동 조종하는 도구. 사람이 클릭하는 건 다 자동화 가능.

설치

pip install selenium
- Selenium 4.x는 ChromeDriver 자동 관리 (별도 설치 불필요)

핵심 개념

1. 드라이버 설정

from selenium import webdriver

options = webdriver.ChromeOptions()
prefs = {
    "download.default_directory": r"D:\다운로드\폴더",
    "download.prompt_for_download": False,
}
options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(options=options)

2. 요소 찾기 - 3가지 방법

방법 언제 쓰나 예시
Selenium (By.ID 등) 간단한 클릭 driver.find_element(By.ID, "btn")
JavaScript DOM이 자주 바뀔 때 (stale 방지) driver.execute_script("$('#btn').click()")
jQuery 사이트가 jQuery 쓸 때 (이벤트 트리거) driver.execute_script("$(sel).trigger('change')")

3. stale element 문제

  • 페이지가 새로고침되면 기존 요소 참조가 죽음 (stale)
  • 해결: 요소를 변수에 저장하지 말고 매번 새로 찾기
  • 더 좋은 해결: JavaScript로 직접 DOM 조작 (참조 자체가 필요 없음)

4. 동적 UI 조작 패턴

hover로 나타나는 버튼:

from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(card).perform()
time.sleep(2)  # 버튼 나타날 때까지

jQuery UI datepicker:

driver.execute_script("""
    // 1. 입력값 설정
    dateInput.value = '2025-01';
    // 2. datepicker 열기
    $(dateInput).trigger('focus').trigger('click');
    // 3. 연/월 드롭다운 변경
    $('.ui-datepicker-year').val('2025').trigger('change');
    $('.ui-datepicker-month').val(0).trigger('change');  // 0=1월
    // 4. 선택 버튼 클릭
""")

드롭다운 (select):

driver.execute_script("""
    var sel = document.querySelector('select:visible');
    sel.selectedIndex = 1;
    $(sel).trigger('change');
""")

HIRA 자동화에서 배운 교훈

사이트 분석 순서

  1. F12 → Network 탭 → API 구조 확인 (직접 호출 가능한지)
  2. 안 되면 → Selenium으로 UI 조작
  3. F12 → Elements 탭 → HTML 구조 파악 (ID, class 찾기)
  4. 조사 스크립트(inspect_site.py) 만들어서 실제 셀렉터 확인

디버깅 전략

  • 각 단계마다 print() + screenshot() 넣기
  • 실패 시 스크린샷 자동 저장 → 화면 상태 확인
  • 최악의 경우 input("수동으로 해주세요...") → 나머지 자동

JavaScript > Selenium 클릭인 이유

  • driver.find_element().click() → stale 에러, 다른 요소 클릭 위험
  • driver.execute_script("$('#id').click()") → DOM 직접 조작, 안정적
  • 특히 jQuery 쓰는 사이트에서는 $(el).trigger('change') 필수

활용 범위

분류 예시
데이터 수집 공공데이터, 뉴스, 경쟁사 모니터링
반복 다운로드 HIRA, 통계청, 부동산 데이터
폼 자동 입력 CRM, 관리 시스템 반복 입력
모니터링 검색 순위 추적, 가격 변동 감시
스크린샷 정기 보고용 화면 캡처

주의: 자동화 하면 안 되는 것

  • 네이버/카카오 로그인 후 글쓰기 (계정 제재 위험)
  • 과도한 요청 (서버 부하 → IP 차단)
  • 로그인 필요한 서비스 무단 접근

다음 할 것

  • [ ] HIRA 다른 기관 (치과의원, 치과병원, 한방병원, 요양병원) 다운로드
  • [ ] 다운받은 24개 엑셀 합치기 + 개폐업 분석
  • [ ] 네이버 블로그 검색 순위 추적 스크립트