본문 바로가기
Python/Selenium

selenium ElementNotVisibleException: Message 오류 해결하기

by PySun 2025. 2. 19.
반응형

소개

Selenium 사용 시 'ElementNotVisibleException: Message' 오류는 꽤 흔하게 발생하는 문제입니다. 이 오류는 주로 웹 페이지에서 특정 요소가 현재 화면에 보이지 않을 때 발생합니다. 이러한 오류의 원인과 해결 방법을 함께 살펴보겠습니다.

에러 발생 예시 코드

먼저, 'ElementNotVisibleException' 오류가 발생할 가능성이 있는 간단한 예제 코드를 살펴볼까요.

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

# 웹 드라이버 초기화
driver = webdriver.Chrome()

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

# 잠시 대기 (특정 요소가 나타날 시간을 대비)
time.sleep(3)

# 보이지 않는 요소에 접근 시도
button = driver.find_element_by_id('invisible_button')
button.click()

에러 해결 방법

1. 요소의 가시성 확인

Selenium은 요소가 실제로 화면에 존재하고 활성화되었는지를 확인해야 합니다. 요소가 숨겨져 있거나 보이지 않는 경우에는 클릭이나 입력이 불가능하므로, 이를 먼저 확인해야 합니다.

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.visibility_of_element_located((By.ID, 'invisible_button'))
    )
    button.click()
except ElementNotVisibleException:
    print("에러: 버튼이 보이지 않습니다.")

2. JavaScript를 사용하여 요소 표시

때로는 JavaScript를 사용하여 숨겨진 요소를 표시할 수 있습니다. 이를 통해 클릭 가능하게 만들 수 있습니다. 하지만, 이 방법은 품질 관점에서 좋지 않을 수 있으므로 사용 시 주의가 필요합니다.

driver.execute_script("arguments[0].style.display='block';", button)
button.click()

3. 페이지 로드 대기

페이지가 완전히 로드되기 전에 요소에 접근하려고 하면 이 오류가 발생할 수 있습니다. 이 경우, 명시적 대기를 통해 요소가 로드될 때까지 기다려야 합니다.

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'invisible_button'))
)
button = driver.find_element_by_id('invisible_button')
button.click()

마무리

이번 블로그 글에서는 Selenium에서 발생하는 'ElementNotVisibleException: Message' 오류에 대해 살펴보았습니다. 요소의 가시성을 확인하고, JavaScript를 사용해 표시하거나 페이지 로드를 기다림으로써 이러한 오류를 해결할 수 있습니다. Selenium을 사용할 때는 항상 WebDriverWait과 같은 방법을 활용하여 더 안정적인 테스트를 진행할 수 있음을 기억하세요.

반응형