본문 바로가기
Python/크롤링, 스크래핑 (Selenium 등등)

[Python] 셀레니움의 명시적 대기와 암시적 대기에 대해 implicitly_wait(), WebDriverWait()

by dong_su 2024. 5. 27.

암시적 대기와 명시적 대기는 모두 웹 페이지가 로딩되기를 기다리는 방법이지만, 사용되는 시기와 방식에 차이가 있다.

 

암시적 대기(implicitly_wait)

from selenium import webdriver

# 암시적 대기 설정 (최대 10초 대기)
driver.implicitly_wait(10)
  • 암시적 대기는 페이지의 모든 요소가 로드되기를 기다립니다. 즉, 페이지를 로딩할 때마다 모든 요소가 나타날 때까지 기다립니다.
  • driver.implicitly_wait(10)과 같이 선언하며, 여기서 10은 최대 대기 시간을 의미합니다. 예를 들어, 페이지가 모든 요소를 5초 내에 로드하면 대기가 종료됩니다.
  • 암시적 대기는 전역적으로 적용되며, 페이지의 모든 요소가 로드되는 동안 해당 시간을 기다립니다.

암시적 대기는 일정 시간 동안 요소가 로드될 때까지 기다리지만, 요소가 로드되지 않더라도 명시적으로 대기하지 않고 넘어갑니다.


명시적 대기(explicitly_wait)

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

# 사용 예시
element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "my_element_id"))
    )
  • 명시적 대기는 특정 요소가 나타날 때까지 기다립니다. 즉, 특정 조건이 충족될 때까지 대기합니다.
  • WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'element_id')))와 같이 사용합니다. 여기서 10은 최대 대기 시간을 의미하며, presence_of_element_located는 해당 요소가 나타날 때까지 대기함을 의미합니다.
  • 명시적 대기는 특정 요소의 로딩을 기다릴 때 사용되며, 암시적 대기보다 더 정확하고 효과적인 방법입니다.

명시적 대기는 지정된 조건이 충족될 때까지 기다리며, 조건이 충족되지 않으면 타임아웃 예외를 발생시킵니다.

 

 

따라서 암시적 대기는 페이지 로딩 전체를 대기하는 데 사용되고, 명시적 대기는 특정 요소의 로딩을 대기하는 데 사용됩니다.