본문 바로가기

project/Expert

[python] selenium 팝업창 닫기

728x90
반응형

셀레니움을 이용하여 웹 크롤러를 만들 때 예상치 못한 팝업창이 떠서 작동이 안되는 경우가 발생할 수 있다. 

이 때 사용할 수 있는 코드를 포스팅 하겠다.

(프로젝트에서 개발중인 사이트에서는 팝업창이 떠서 다른 곳도 많겠지 생각했는데, 포스팅하려고 팝업창 뜨는 사이트를 찾으려고 하니 의외로 팝업창 뜨는 사이트를 찾기가 쉽지가 않다..)

 

이전 발행글

2021.08.25 - [project/Expert] - [python] selenium 설치하기 및 예제


1. 이전에 포스팅 했던, 예제 코드에서 url 을 국민건강보험 주소로 수정하였다.

from selenium import webdriver
import time

path = "크롬드라이버 설치 경로"
url = "https://www.nhis.or.kr"

driver = webdriver.Chrome(path)
driver.get(url)
time.sleep(3)

 

2. window_handles 메소드를 통해 셀레니움을 통해 켜진 창의 개수를 알 수 있다.

tabs = driver.window_handles
print(tabs)

출력 결과는 아래와 같다. 예상하듯이, 리스트 첫 번째 있는 것이 메인 창이 될 것이고, 리스트 두 번째가 팝업창이다.

['CDwindow-400BB2BFEDFDCDE14574AAD5FDD253C8', 'CDwindow-EAC9872391A8781D2EB47FC074B34168']
반응형

3. 만약 팝업창이 한개만 뜨는 경우라면 tabs[1] 으로 화면 이동 후 driver.close()를 해주면 된다.

driver.switch_to_window(tabs[1])
driver.close()

 

4. 만약 여러개의 팝업창이 뜨는 경우라면 반복문을 통해 위의 경우를 반복하면 된다.

while len(tabs) != 1:
    driver.switch_to_window(tabs[1])
    driver.close()

 

팝업창을 닫은 이후 크롤링을 하기 위한 로직이 수행되기 위해서는 원래의 화면으로 이동이 필요하다.

driver.switch_to_window(tabs[0])

 

다음 포스팅에서는 로그인 하는 방법에 대해서 포스팅 하겠다.

728x90
반응형