본문 바로가기
Python/Selenium

Selenium CannotSwitchToWindowException 오류 해결하기

by PySun 2025. 2. 21.
반응형

소개

Selenium을 사용하다 보면 여러 가지 오류에 부딪힐 수 있습니다. 그중 하나가 'CannotSwitchToWindowException' 오류입니다. 이 오류는 Selenium이 특정 창 또는 탭으로 전환하려고 할 때 발생합니다. 이 블로그 글에서는 이 에러의 원인과 해결 방법에 대해 자세히 알아보겠습니다.

에러 발생 예시 코드

먼저, 'CannotSwitchToWindowException' 오류가 발생할 수 있는 간단한 예시 코드를 살펴보겠습니다. 아래 코드는 새로운 탭을 열고 그 탭으로 전환하려고 시도하는 코드입니다.

from selenium import webdriver

# 웹드라이버 생성
driver = webdriver.Chrome()

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

# 새로운 탭 열기
driver.execute_script("window.open('https://www.google.com', '_blank');")

# 탭으로 전환 시도
driver.switch_to.window("some_non_existent_window_name")

에러 해결 방법

1. 올바른 창 핸들 사용하기

창이나 탭으로 전환할 때는 올바른 창 핸들을 사용하는 것이 매우 중요합니다. 현재 열린 모든 창 핸들을 가져와서 원하는 핸들로 전환하세요.

from selenium import webdriver
import time

# 웹드라이버 생성
driver = webdriver.Chrome()

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

# 새로운 탭 열기
driver.execute_script("window.open('https://www.google.com', '_blank');")

# 현재 열린 모든 창 핸들 가져오기
window_handles = driver.window_handles

# 각 창으로 전환 시도
for handle in window_handles:
    driver.switch_to.window(handle)
    print(driver.title)  # 각 창의 제목 출력

# 원하는 창으로 작업 완료 후 다시 원래 창으로 전환
driver.switch_to.window(window_handles[0])

2. 충분한 대기 시간 주기

웹 페이지가 완전히 로딩되기 전에 창 전환을 시도하면 'CannotSwitchToWindowException'가 발생할 수 있습니다. 따라서 적절한 대기 시간을 주는 것이 좋습니다.

from selenium import webdriver
import time

# 웹드라이버 생성
driver = webdriver.Chrome()

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

# 새로운 탭 열기
driver.execute_script("window.open('https://www.google.com', '_blank');")

# 탭으로 전환 전에 대기
time.sleep(2)  # 2초 대기

# 현재 열린 모든 창 핸들 가져오기
window_handles = driver.window_handles

# 첫 번째 새 탭으로 전환
driver.switch_to.window(window_handles[1])
print(driver.title)  # 구글 페이지 제목 출력

마무리

이 블로그 글에서는 Selenium에서 발생할 수 있는 'CannotSwitchToWindowException' 오류의 원인과 해결 방법을 살펴보았습니다. 올바른 창 핸들을 사용하고 충분한 대기 시간을 주는 것으로 이러한 오류를 방지할 수 있습니다. Selenium을 사용할 때는 항상 페이지의 상태를 체크하고 적절한 방법으로 작업을 진행하는 것이 중요합니다.

반응형