본문 바로가기
Python/Selenium

Selenium ElementNotVisibleStateException 오류 해결하기

by PySun 2025. 1. 2.
반응형

소개

자동화 작업에서 Selenium을 사용할 때, 'ElementNotVisibleStateException' 오류는 종종 마주치는 문제입니다. 이 오류는 웹 페이지의 요소가 화면에 표시되지 않을 때 발생합니다. 그러므로 해당 요소를 조작하려고 할 때 불필요한 장애물이 발생하게 됩니다. 이 블로그 글에서는 이 오류의 원인과 해결 방법에 대해 살펴보겠습니다.

에러 발생 예시 코드

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

from selenium import webdriver
from selenium.common.exceptions import ElementNotVisibleException
import time

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

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

# 특정 요소 찾기 (예: 버튼)
try:
    button = driver.find_element_by_id("hidden-button")
    button.click()
except ElementNotVisibleException as e:
    print(f"오류 발생: {e}")

# 종료
driver.quit()

에러 해결 방법

1. 요소가 화면에 보일 때까지 대기

하나의 해결 방법은 요소가 화면에 표시될 때까지 기다리는 것입니다. WebDriverWait을 사용하여 요소가 보일 때까지 대기할 수 있습니다.

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("http://example.com")

# 요소가 나타날 때까지 대기
try:
    button = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "hidden-button")))
    button.click()
except ElementNotVisibleException as e:
    print(f"오류 발생: {e}")

# 종료
driver.quit()

2. 요소의 상태 확인

요소가 실제로 DOM에 존재하지만 보이지 않는 경우일 수 있습니다. 이 경우 요소의 스타일이나 속성을 확인해보아야 할 필요가 있습니다.

from selenium import webdriver
from selenium.webdriver.common.by import By

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

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

# 버튼 요소 찾기
button = driver.find_element(By.ID, "hidden-button")

# 요소가 보이는지 확인
if button.is_displayed():
    button.click()
else:
    print("버튼이 화면에 보이지 않습니다.")

# 종료
driver.quit()

마무리

이번 블로그 글에서는 Selenium을 사용할 때 자주 발생하는 'ElementNotVisibleStateException' 오류와 그에 대한 몇 가지 해결 방법을 공유했습니다. 요소가 화면에 표시될 때까지 기다리거나 요소의 상태를 확인하여 문제를 해결할 수 있습니다. 항상 요소의 가시성을 주의 깊게 평가하고, 안정적인 자동화를 위한 로직을 구축하는 것이 중요합니다.

반응형