본문 바로가기
Python/Selenium

Selenium WebDriverException: Element not visible 오류 해결하기

by PySun 2025. 2. 5.
반응형

소개

자동화 테스트에서 Selenium을 사용할 때, 'WebDriverException: Element not visible' 오류는 종종 발생하는 문제입니다. 이 에러는 Selenium이 특정 요소를 찾았지만 그 요소가 화면에 표시되지 않을 때 발생합니다. 이 블로그 글에서는 이러한 오류의 원인과 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 'WebDriverException: Element not visible' 에러가 발생할 만한 간단한 예시 코드를 살펴봅시다.

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

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

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

# 특정 요소 찾기
element = driver.find_element(By.ID, "hidden_element")

# 요소 클릭 시도
element.click()

에러 해결 방법

1. 요소의 가시성 확인

우선, 해당 요소가 실제로 페이지에 표시되고 있는지 확인하십시오. 요소가 숨겨져 있으므로 Selenium은 이를 클릭할 수 없습니다. 이 경우 JavaScript를 사용하여 요소의 스타일을 변경하거나, 스크롤하여 가시성을 높이는 방법이 있습니다.

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

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

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

# 특정 요소 찾기
element = driver.find_element(By.ID, "hidden_element")

# 요소를 화면에 스크롤
actions = ActionChains(driver)
actions.move_to_element(element).perform()

# 요소 클릭
element.click()

2. 명시적 대기 사용

요소가 로드되기 전에 접근하려 할 경우 이러한 오류가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 명시적 대기를 사용하여 특정 조건을 만족할 때까지 기다릴 수 있습니다.

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

# 명시적 대기 사용
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "hidden_element"))
)

# 요소 클릭
element.click()

3. 다른 상위 요소에 의해 가려지는 경우

요소가 다른 상위 요소에 의해 가려지고 있지 않은지 확인하세요. 이 경우, 상위 요소를 닫거나 숨긴 후 접근해 보십시오.

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

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

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

# 다른 요소 숨기기
overlay = driver.find_element(By.ID, "overlay_element")
driver.execute_script("arguments[0].style.display='none';", overlay)

# 클릭하려는 요소 찾기
element = driver.find_element(By.ID, "hidden_element")

# 요소 클릭
element.click()

마무리

이 블로그 글에서는 Selenium에서 발생하는 'WebDriverException: Element not visible' 에러의 원인과 여러 가지 해결 방법에 대해 살펴보았습니다. 요소의 가시성을 확인하고, 명시적 대기를 활용하며, 다른 요소에 가려지지 않도록 주의하는 것이 중요합니다. 자동화 작업에서 이러한 세부사항을 간과하지 마세요!

반응형