본문 바로가기
Python/Selenium

Selenium TimeoutException: Message: Timed out waiting for element 해결하기

by PySun 2025. 1. 19.
반응형

소개

Selenium을 사용하여 웹 자동화를 진행하다 보면 'TimeoutException: Message: Timed out waiting for element'라는 에러를 자주 접할 수 있습니다. 이 오류는 Selenium이 지정한 시간 내에 웹 페이지에서 특정 요소를 찾지 못할 때 발생합니다. 이 블로그 글에서는 이 에러의 원인과 함께 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 'TimeoutException: Message: Timed out waiting for element' 에러가 발생할 수 있는 간단한 예시 코드를 살펴보겠습니다.

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 드라이버 생성
driver = webdriver.Chrome()

# 웹 페이지 열기
driver.get("https://example.com")

try:
    # 특정 요소가 나타나기를 기다리는 코드
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "non_existing_element"))
    )
    print(element)
except TimeoutException:
    print("요소를 찾는 데 시간이 초과되었습니다.")
finally:
    driver.quit()

에러 해결 방법

1. 요소의 존재 확인

드라이버가 기다리는 요소가 실제로 웹 페이지에 존재하는지 확인하세요. 요소 ID가 타이핑 오류로 인해 잘못된 경우가 많습니다.

# 요소 ID가 올바른지 확인
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "existing_element"))  # 올바른 ID로 변경
)

2. 대기 시간을 늘리기

특정 요소가 느리게 로드되는 웹페이지에서는 대기 시간을 늘리면 도움이 될 수 있습니다.

# 대기 시간을 20초로 증가
element = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.ID, "existing_element"))
)

3. 다른 대기 조건 사용

여기서 'presence_of_element_located' 대신 'visibility_of_element_located' 또는 다른 조건을 사용할 수 있습니다. 이는 요소가 페이지에 존재하는지 확인하는 것뿐만 아니라, 사용자가 볼 수 있을 정도로 로딩된 상태인지 확인합니다.

# 요소의 가시성을 확인
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "existing_element"))
)

마무리

이번 블로그에서는 Selenium에서 발생할 수 있는 'TimeoutException: Message: Timed out waiting for element' 에러를 다루어 보았습니다. 요소의 존재를 확인하고 대기 시간을 늘리거나 적절한 대기 조건을 선택하는 방법으로 이 문제를 해결할 수 있습니다. 자동화 작업을 진행할 때는 이러한 문제를 미리 예측하고 대비하는 것이 중요합니다. 성공적인 웹 자동화 경험 되시기를 바랍니다!

반응형