본문 바로가기
Python/Selenium

selenium ElementHasNoSizeException 오류 해결하기

by PySun 2025. 1. 24.
반응형

소개

Selenium을 사용하다가 'ElementHasNoSizeException' 에러를 만나는 경우가 종종 있습니다. 이 오류는 웹 페이지의 UI 요소가 잘못 로드되었거나, 요소가 비어 있거나, 화면에 보이지 않을 때 발생할 수 있습니다. 이번 포스팅에서는 이 오류의 원인을 살펴보고, 해결 방법을 구체적으로 알아보겠습니다.

에러 발생 예시 코드

먼저, 'ElementHasNoSizeException' 에러가 발생할 수 있는 예시 코드를 확인해보겠습니다.

from selenium import webdriver

# 웹드라이버 설정
driver = webdriver.Chrome()

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

# 요소를 찾으려 시도
element = driver.find_element_by_id("non_existent_element")
print(element.size)  # 이 줄에서 에러가 발생합니다.

에러 해결 방법

1. 요소 존재 여부 확인

가장 먼저 확인해야 할 점은 요소가 실제로 존재하는지를 검증하는 것입니다. 잘못된 ID나 XPath를 사용하였다면, 적절한 선택자로 교체하거나 요소가 로드된 후에 접근해야 합니다.

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

# 웹드라이버 설정
driver = webdriver.Chrome()

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

# 요소 존재 여부 확인
try:
    element = driver.find_element_by_id("non_existent_element")
    print(element.size)
except NoSuchElementException:
    print("요소가 존재하지 않습니다.")

2. 요소가 화면에 보이는지 확인

때때로 요소가 DOM에는 존재하지만, CSS 스타일이나 JavaScript에 의해 화면에서는 보이지 않을 수 있습니다. 이 경우, 요소가 보이도록 스크롤하거나, 대기 시간을 두는 방법으로 접근할 수 있습니다.

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

# 웹드라이버 설정
driver = webdriver.Chrome()

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

# 요소 존재 여부 확인 및 스크롤
try:
    element = driver.find_element_by_id("hidden_element")
    driver.execute_script("arguments[0].scrollIntoView();", element)
    print(element.size)
except NoSuchElementException:
    print("요소가 존재하지 않습니다.")

3. 적절한 대기 사용

동적 웹페이지에서는 요소가 로드된 후에 접근해야 할 때가 많습니다. 이럴 경우에는 명시적 대기(explicit wait)를 사용하는 것이 좋습니다.

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")

# 동적 요소 대기
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "dynamic_element"))
    )
    print(element.size)
except Exception as e:
    print(f"오류 발생: {e}")

마무리

이번 포스트에서는 Selenium 사용 중 'ElementHasNoSizeException' 오류를 해결하기 위한 몇 가지 방법을 살펴보았습니다. 요소의 존재 여부 확인, 화면에 보이는지 체크하기, 적절한 대기 시간을 사용하는 것이 중요합니다. Selenium을 활용하여 자동화를 구현할 때, 이러한 문제를 미리 알고 대비하는 것이 실수를 줄이고 생산성을 높이는 데 큰 도움이 될 것입니다.

반응형