본문 바로가기
Python/Selenium

Selenium WebDriverWait TimeoutException 오류 해결하기

by PySun 2025. 2. 7.
반응형

소개

Selenium을 사용하다보면 웹 페이지 로딩, 요소의 가시성 등 다양한 이유로 인해 'TimeoutException' 오류에 직면할 수 있습니다. 주로 'WebDriverWait'을 설정한 시간이 지났을 때 발생하는 이 오류는 종종 개발자가 예상하지 못한 요소의 위치 또는 상태로 인하여 발생하는 경우가 많습니다. 이번 포스팅에서는 이 오류의 원인과 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 'TimeoutException' 오류가 발생할 수 있는 간단한 예시 코드를 살펴보겠습니다.

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
from selenium.common.exceptions import TimeoutException

# Chrome 드라이버 초기화
driver = webdriver.Chrome()

try:
    driver.get("https://example.com")
    
    # 요소가 로드되기를 기다리지만 시간이 초과함
    element = WebDriverWait(driver, 5).until(
        EC.visibility_of_element_located((By.ID, "nonexistent_id"))
    )
    print(element.text)
except TimeoutException:
    print("요소를 찾는데 시간이 초과되었습니다.")
finally:
    driver.quit()

에러 해결 방법

1. 대기 시간을 늘리기

'WebDriverWait'의 시간을 늘려서 요소가 로드될 시간을 충분히 주는 방법입니다. 네트워크 속도나 서버 응답 시간에 따라 페이지 로딩 시간이 달라질 수 있습니다.

element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "nonexistent_id"))
)

2. 올바른 요소 식별자 확인

해당 요소의 ID가 정확한지, 또는 웹 페이지에서 해당 요소가 실제로 존재하는 것을 확인하세요. 웹 페이지 구조가 변경되면 식별자도 바뀔 수 있습니다.

element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.XPATH, "//div[@id='some_id']"))
)

3. JavaScript의 로딩 상태 대기

종종 페이지의 JavaScript가 완전히 로드되지 않아 요소를 찾지 못하는 경우가 있습니다. 이 경우 페이지의 로딩 상태를 확인하는 방법이 유용합니다.

WebDriverWait(driver, 10).until(
    lambda d: d.execute_script('return document.readyState') == 'complete'
)
element = driver.find_element(By.ID, "your_id")

마무리

이번 포스팅에서는 Selenium에서 'TimeoutException' 오류를 다루는 몇 가지 방법을 살펴보았습니다. 대기 시간을 늘리는 것, 올바른 요소 식별자를 사용하는 것, JavaScript의 로딩 상태를 확인하는 방법 등을 통해 오류를 효과적으로 해결할 수 있습니다. Selenium을 사용하면서 오류가 발생하더라도 침착하게 원인을 찾아보며 해결책을 모색하는 것이 중요합니다!

반응형