본문 바로가기
Python/Selenium

Selenium NoSuchAlertException 오류 해결하기

by PySun 2025. 1. 11.
반응형

소개

Selenium을 사용하여 웹 자동화를 진행하다 보면 다양한 오류와 마주치게 됩니다. 그중 하나가 'NoSuchAlertException'이라는 오류입니다. 이 오류는 코드가 경고창(alert)이나 팝업을 처리하려고 할 때, 해당 경고창이나 팝업이 존재하지 않거나 이미 닫혔을 경우 발생합니다. 이 블로그 글에서는 'NoSuchAlertException' 오류의 발생 원인과 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

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

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

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

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

# 경고창이 뜨길 기다리지 않고 바로 접근 시도
try:
    alert = driver.switch_to.alert
    print(alert.text)
    alert.accept()
except NoSuchAlertException as e:
    print("오류 발생: 경고창이 존재하지 않습니다.")

에러 해결 방법

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
from selenium.common.exceptions import TimeoutException

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

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

# 경고창 대기
try:
    WebDriverWait(driver, 10).until(EC.alert_is_present())
    alert = driver.switch_to.alert
    print(alert.text)
    alert.accept()
except TimeoutException:
    print("타임아웃: 경고창이 나타나지 않았습니다.")
except NoSuchAlertException as e:
    print("오류 발생: 경고창이 존재하지 않습니다.")

2. 경고창이 나타나는 조건 확인

두 번째로 고려해볼 해결책은 경고창이 뜨지 않는 이유를 확인하는 것입니다. 종종 특정 행동이나 요소를 클릭해야만 경고창이 표시됩니다. 이 경우, 경고창이 뜨기 전에 필요한 조치를 취하고 있는지 확인하세요.

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

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

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

# 경고창을 트리거하기 위한 버튼 클릭
button = driver.find_element(By.ID, 'alert-button')  # 가상의 버튼 ID 사용
button.click()
time.sleep(1)  # 경고창이 뜰 시간을 주기 위해 잠시 대기

# 경고창 접근
try:
    alert = driver.switch_to.alert
    print(alert.text)
    alert.accept()
except NoSuchAlertException as e:
    print("오류 발생: 경고창이 존재하지 않습니다.")

마무리

이번 블로그 글에서는 Selenium에서 발생하는 'NoSuchAlertException' 오류에 대한 간단한 해결 방법을 살펴보았습니다. 경고창이 나타날 때까지 대기하거나 경고창을 활성화하기 위한 조건을 확인함으로써 이 오류를 방지할 수 있습니다. 웹 자동화를 진행할 때는 상황에 따라 예외 처리를 잘 설정하여 더욱 안정적인 스크립트를 작성하는 것이 중요합니다.

반응형