Selenium 브라우저 자동화 가이드¶
개요¶
Selenium = Python으로 크롬 브라우저를 자동 조종하는 도구. 사람이 클릭하는 건 다 자동화 가능.
설치¶
- 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 자동화에서 배운 교훈¶
사이트 분석 순서¶
- F12 → Network 탭 → API 구조 확인 (직접 호출 가능한지)
- 안 되면 → Selenium으로 UI 조작
- F12 → Elements 탭 → HTML 구조 파악 (ID, class 찾기)
- 조사 스크립트(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개 엑셀 합치기 + 개폐업 분석
- [ ] 네이버 블로그 검색 순위 추적 스크립트