Selenium 명시적 대기: 고정 sleep 대신 조건 확인

동적 페이지는 몇 초를 고정해서 기다리기보다 필요한 요소와 상태가 나타나는 조건을 명시해 기다립니다.

어떤 상황에서 적용하나요?

아래는 로컬 연습 페이지가 잠시 뒤 요소를 추가하면 WebDriverWait로 찾는 예제입니다. 외부 사이트에 접속하지 않지만 브라우저 실행 환경이 필요합니다.

검증 범위: 아래 코드는 문법을 점검한 GUI·브라우저 예제입니다. 이 사이트의 점검 환경에서는 실제 창 실행을 검증하지 않았으며 해당 실행 환경에서 수동 확인이 필요합니다.

최소 예제로 동작 확인하기

from urllib.parse import quote
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

html = """<script>setTimeout(() => {
 const p = document.createElement('p'); p.id='ready'; p.textContent='완료';
 document.body.appendChild(p);
}, 300);</script><body></body>"""
driver = webdriver.Chrome()
try:
    driver.get("data:text/html;charset=utf-8," + quote(html))
    element = WebDriverWait(driver, 5).until(
        EC.visibility_of_element_located((By.ID, "ready")))
    assert element.text == "완료"
    print(element.text)
finally:
    driver.quit()

결과는 어떻게 확인하나요?

요소가 표시되면 완료가 출력됩니다. 존재 여부와 표시 여부, 클릭 가능 여부는 서로 다른 조건입니다. 단순히 DOM에 있다는 이유로 사용자 조작이 가능한 것으로 판단하지 마세요.

실제 업무에 적용할 때 확인할 점

암시적 대기와 명시적 대기를 섞으면 예상하지 못한 대기 시간이 생길 수 있습니다. 타임아웃을 무한 재시도로 감추지 말고 현재 URL·오류 종류·필요한 비민감 진단 정보만 기록하세요. 화면 구조 변경은 선택자를 다시 검토해야 하는 신호입니다.

공식 자료와 다음 단계

관련 공식 문서에서 사용하는 버전의 기능과 제한을 확인하세요.

학습 경로: 웹 스크래핑 가이드 · 요청 정책과 헤더

작성: 로그 · 2026-10-17 수정: 확인되지 않은 경험담과 성능 보장 표현을 제거하고 예제·적용 조건·공식 근거를 보완했습니다.

댓글

이 블로그의 인기 게시물

API 키 저장 방법: 해싱과 암호화의 차이, Fernet 예제

파이썬 Google Sheets API 연동: 서비스 계정 권한과 읽기·쓰기

Pandas 결측치 처리: isna, fillna, dropna 선택 기준