본문 바로가기
Python/Selenium

파이썬 Selenium ElementNotInteractableException 오류

by PySun 2023. 8. 13.
반응형

ElementNotInteractableException은 요소를 상호작용할 수 없는 상태일 때 발생하는 오류로, 보통 인터랙티브하지 않은 요소에 클릭 또는 입력을 시도할 때 발생합니다. 예시 코드와 해결 방법에 대해 설명하겠습니다.

예시 코드:

아래 예시 코드는 인터랙티브하지 않은 요소(예: 비활성화된 버튼)를 클릭하려고 할 때 ElementNotInteractableException이 발생할 수 있습니다.

from selenium import webdriver

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

# 비활성화된 버튼이 있는 페이지 접속
driver.get('https://www.example.com')

# 비활성화된 버튼 클릭 시도
try:
    disabled_button = driver.find_element_by_id('disabled-button')
    disabled_button.click()
except ElementNotInteractableException as e:
    print("요소를 클릭할 수 없습니다.")
finally:
    # 브라우저 종료
    driver.quit()

해결 방법:

ElementNotInteractableException이 발생할 때, 다음과 같은 방법으로 해결할 수 있습니다.

요소가 활성화될 때까지 대기:

요소가 활성화될 때까지 기다렸다가 요소를 클릭하도록 합니다. 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('path/to/chromedriver')

# 비활성화된 버튼이 있는 페이지 접속
driver.get('https://www.example.com')

# 비활성화된 버튼 클릭 시도
try:
    disabled_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, 'disabled-button'))
    )
    disabled_button.click()
except ElementNotInteractableException as e:
    print("요소를 클릭할 수 없습니다.")
finally:
    # 브라우저 종료
    driver.quit()

[Python/Selenium] - Selenium 웹 페이지 대기

JavaScript를 사용하여 클릭:

JavaScript를 사용하여 요소를 강제로 클릭할 수 있습니다. 이 방법은 일반적인 클릭이 불가능한 상황에서도 클릭을 시도할 수 있습니다.

from selenium import webdriver

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

# 비활성화된 버튼이 있는 페이지 접속
driver.get('https://www.example.com')

# JavaScript를 사용하여 클릭 시도
try:
    disabled_button = driver.find_element_by_id('disabled-button')
    driver.execute_script("arguments[0].click();", disabled_button)
except ElementNotInteractableException as e:
    print("요소를 클릭할 수 없습니다.")
finally:
    # 브라우저 종료
    driver.quit()

스크롤하여 요소를 활성화시키기:

요소가 화면에 보이도록 스크롤링을 하여 요소를 활성화시키는 방법도 있습니다.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

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

# 페이지 접속
driver.get('https://www.example.com')

# 스크롤하여 요소가 화면에 보이도록 만들기
try:
    element = driver.find_element_by_id('element-to-interact')
    driver.execute_script("arguments[0].scrollIntoView(true);", element)
    element.click()
except ElementNotInteractableException as e:
    print("요소를 클릭할 수 없습니다.")
finally:
    # 브라우저 종료
    driver.quit()

ElementNotInteractableException이 발생하는 경우 위의 방법 중 하나를 적절히 선택하여 예외를 처리하고, 프로그램이 안정적으로 동작하도록 합니다. 요소가 상호작용 가능한 상태가 될 때까지 대기하거나 JavaScript를 사용하여 강제로 클릭하는 방법을 활용할 수 있습니다.

반응형