본문 바로가기
Python/Selenium

Selenium InvalidElementStateException 오류 해결하기

by PySun 2025. 1. 3.
반응형

소개

Selenium을 사용하다 보면 종종 'InvalidElementStateException' 오류를 마주칠 수 있습니다. 이 오류는 주로 원하는 요소가 현재 상태가 아닌 경우, 즉 요소가 비활성 상태이거나 입력이 불가능할 때 발생합니다. 이번 블로그 글에서는 이 오류의 원인과 함께 몇 가지 해결 방법을 알아보겠습니다.

에러 발생 예시 코드

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

from selenium import webdriver

driver = webdriver.Chrome()

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

# 특정 비활성 입력 필드에 텍스트 입력 시도
input_field = driver.find_element_by_id("inactive-input")
input_field.send_keys("이 부분은 실패할 것입니다.")

에러 해결 방법

1. 요소가 활성 상태인지 확인하기

먼저, 해당 요소가 신뢰할 수 있는 상태인지 확인해야 합니다. Selenium을 사용하여 요소가 클릭 가능할 때까지 기다려 주는 방법을 적용할 수 있습니다.

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

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

# 입력 필드가 클릭 가능할 때까지 대기
input_field = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "inactive-input"))
)
input_field.send_keys("이제 제대로 입력됩니다!")

2. 요소의 상태 체크하기

특정 요소가 활성화되어 있는지 또는 비활성인지 확인할 수 있습니다. 비활성 상태라면, 요소의 'disabled' 속성을 점검하여 조치를 취합니다.

input_field = driver.find_element_by_id("inactive-input")

# 요소가 비활성화 되어 있는지 확인 후 작업
if input_field.is_enabled():
    input_field.send_keys("이제 왜 입력이 가능한지 확인합니다.")
else:
    print("입력 필드가 비활성화되어 있어 입력할 수 없습니다.")

3. 자바스크립트를 사용하여 활성화하기

때로는 요소에 대해 직접 자바스크립트를 실행하여 활성화할 수 있습니다. 아래 코드는 자바스크립트를 사용하여 입력 필드를 활성화하는 방법을 보여줍니다.

driver.execute_script("arguments[0].removeAttribute('disabled')", input_field)
input_field.send_keys("이제 됩니다!")

마무리

이번 포스트에서는 Selenium 사용 중 'InvalidElementStateException' 오류가 발생하는 원인과 이를 해결하기 위한 다양한 방법을 살펴보았습니다. 요소의 상태를 확인하고 대기 시간을 적절히 설정하며, 필요할 경우 자바스크립트를 활용하여 문제를 해결할 수 있습니다. Selenium과 같이 자동화를 돕는 도구는 태스크를 효율적으로 수행하기 위한 노력의 일부분으로, 문서화된 방법을 항상 참고하며 상황에 맞는 해결策을 찾아가는 것이 좋습니다.

반응형