본문 바로가기
Python/Selenium

파이썬 Selenium NoSuchWindowException 오류

by PySun 2023. 8. 18.
반응형

NoSuchWindowException은 웹 드라이버가 찾을 수 없는 브라우저 창에 접근하려고 할 때 발생하는 예외입니다. 브라우저 창이 닫혀 있는 상태거나, 유효하지 않은 창 식별자를 사용하여 창에 접근하려고 하면 이 예외가 발생할 수 있습니다. 예시 코드와 해결 방법에 대해 설명하겠습니다.

예시 코드:

아래 예시 코드에서는 NoSuchWindowException이 발생할 수 있는 상황을 보여줍니다. 브라우저 창을 닫고 해당 창에 접근하려는 시도를 시뮬레이션한 것입니다.

from selenium import webdriver

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

    # 첫 번째 브라우저 창 열기
    driver.get('https://www.example.com')

    # 브라우저 창 닫기
    driver.close()

    # 닫힌 브라우저 창에 접근 시도
    driver.switch_to.window('invalid_window_handle')

except NoSuchWindowException as e:
    print("NoSuchWindowException이 발생했습니다:", str(e))
finally:
    # 브라우저 종료
    driver.quit()

해결 방법:

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

유효한 창 식별자 사용:

switch_to.window() 메서드를 사용하여 유효한 브라우저 창 식별자를 지정합니다. 유효한 창 식별자를 사용하여 해당 창으로 전환합니다.

# 유효한 창 식별자 사용 예시
valid_window_handle = driver.window_handles[0]  # 예를 들어, 첫 번째 창으로 전환
driver.switch_to.window(valid_window_handle)

창 목록 확인:

driver.window_handles를 사용하여 현재 열린 모든 창의 식별자 목록을 확인합니다. 해당 창이 목록에 있는지 확인한 후에 접근합니다.

# 창 목록 확인 예시
window_handles = driver.window_handles
if 'target_window_handle' in window_handles:
    driver.switch_to.window('target_window_handle')
else:
    print("찾을 수 없는 창입니다.")

새로운 창 기다리기:

새로운 창이 열리는 동안 기다렸다가 해당 창으로 전환하는 방법입니다. WebDriverWait를 사용하여 새 창이 열릴 때까지 기다립니다.

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 새로운 창 기다리기 예시
wait = WebDriverWait(driver, 10)
wait.until(EC.number_of_windows_to_be(2))  # 예를 들어, 창이 2개가 될 때까지 대기
driver.switch_to.window(driver.window_handles[1])  # 두 번째 창으로 전환

NoSuchWindowException이 발생할 경우 브라우저 창의 상태와 식별자를 정확히 확인하고, 유효한 창으로 전환하도록 처리해야 합니다. 또한, WebDriver의 버전이나 브라우저 설정 등에 따라 예외 상황이 달라질 수 있으므로 관련 문서를 확인하는 것도 중요합니다.

반응형