본문 바로가기
Python/Selenium

Selenium ElementStateInvalidException 오류 해결하기

by PySun 2025. 2. 2.
반응형

소개

Selenium을 사용하다가 'ElementStateInvalidException' 오류에 직면했나요? 이 오류는 종종 페이지의 상태나 요소의 상태가 변경되어 해당 요소에 대한 조작이 불가능할 때 발생합니다. 이를 해결하기 위해 이 블로그 글에서는 오류 발생 원인과 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 'ElementStateInvalidException' 에러가 발생할 수 있는 간단한 코드를 살펴봅시다. 아래 코드는 특정 버튼을 클릭하는 과정에서 해당 오류가 발생할 수 있습니다.

from selenium import webdriver
from selenium.common.exceptions import ElementStateInvalidException

driver = webdriver.Chrome()
driver.get("https://example.com")

# 수정을 거친 버튼을 클릭
button = driver.find_element_by_id("myButton")

try:
    button.click()  # 여기가 문제!
except ElementStateInvalidException as e:
    print("ElementStateInvalidException 발생:", e)

에러 해결 방법

1. 요소의 시각적 상태 확인

종종 요소가 사용자와 상호작용할 수 없는 상태일 때 이 오류가 발생합니다. 예를 들어, 요소가 비활성화되었거나, 다른 DOM 요소에 의해 가려져 있을 수 있습니다. 이런 경우, 요소가 활성화되었는지, 클릭 가능한 상태인지 확인해야 합니다.

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

# 클릭하기 전에 요소의 활성화 상태를 확인
try:
    button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "myButton"))
    )
    button.click()
except ElementStateInvalidException as e:
    print("ElementStateInvalidException 발생:", e)

2. 자동화 작업 사이에 대기 시간 추가

실제 웹 페이지에서 자동화된 작업 간에 적절한 대기 시간을 추가하면 요소의 로딩이 완료된 후 조작할 수 있도록 도와줍니다. 이를 위해 'time.sleep()' 또는 Selenium의 'WebDriverWait'을 사용할 수 있습니다.

import time

# 클릭 전에 2초 대기
time.sleep(2)

button.click()  # 이 때는 클릭이 성공할 확률이 높아집니다.

마무리

이번 포스트에서는 Selenium을 사용하며 발생하는 'ElementStateInvalidException' 오류의 원인과 해결 방법에 대해 살펴보았습니다. 요소의 시각적 상태를 확인하고 작업 사이에 적절한 대기 시간을 추가함으로써 오류를 예방할 수 있습니다. Selenium을 활용하여 웹 자동화 작업을 할 때는 항상 요소의 상태를 확인하는 것이 중요합니다.

반응형