본문 바로가기
Python/Selenium

파이썬 Selenium InvalidElementStateException 오류 해결하기

by PySun 2023. 8. 31.
반응형

InvalidElementStateException은 요소의 상태가 유효하지 않을 때 발생하는 예외입니다. 이 예외는 요소의 상태가 예상과 다른 경우에 발생할 수 있습니다. 예시 코드와 해결 방법에 대해 설명하겠습니다.

예시 코드:

아래 예시 코드에서는 InvalidElementStateException이 발생할 수 있는 상황을 보여줍니다. 요소의 상태가 유효하지 않은 상태에서 작업을 시도한 시나리오를 시뮬레이션한 것입니다.

from selenium import webdriver
from selenium.common.exceptions import InvalidElementStateException

try:
    driver = webdriver.Chrome('path/to/chromedriver')

    # 요소의 상태가 유효하지 않을 수 있는 상황 시뮬레이션
    driver.get('https://www.example.com')
    input_field = driver.find_element_by_id('input_field')
    input_field.clear()  # 빈 입력 필드에 대한 clear() 작업

except InvalidElementStateException as e:
    print("InvalidElementStateException이 발생했습니다:", str(e))
finally:
    # 브라우저 종료
    driver.quit()

해결 방법:

InvalidElementStateException이 발생한 경우 다음과 같은 방법으로 처리할 수 있습니다.

요소 상태 확인:

요소의 상태가 예상과 일치하는지 확인합니다. 빈 입력 필드에 대해 clear() 작업을 수행하기 전에 요소가 활성화되어 있는지, 보이는 상태인지 등을 확인합니다.

# 요소 상태 확인 예시
if input_field.is_enabled() and input_field.is_displayed():
    input_field.clear()

대기 시간 추가:

요소가 예상한 상태가 되도록 대기 시간을 추가합니다. 요소가 로드되거나 상태가 변경될 때까지 대기하여 작업을 시도합니다.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 대기 시간 추가 예시
wait = WebDriverWait(driver, 10)
input_field = wait.until(EC.element_to_be_clickable((By.ID, 'input_field')))
input_field.clear()

올바른 작업 시도:

요소의 상태에 맞게 올바른 작업을 시도합니다. 예를 들어, 비활성화된 입력 필드의 경우 값을 입력하지 않고 작업을 시도하면 이 예외가 발생할 수 있습니다.

InvalidElementStateException이 발생한 경우 요소의 상태를 확인하고, 대기 시간을 추가하여 요소가 유효한 상태가 되도록 대기하거나 올바른 작업을 시도하도록 합니다. 필요에 따라 WebDriverWait를 사용하여 요소의 상태가 예상과 일치할 때까지 대기하도록 처리할 수도 있습니다.

반응형