플그래밍/파이써언

[파이썬 & 크롤링] Selenium - 팝업 닫는 법

훗티v 2023. 8. 4. 21:52
728x90
반응형

SRT 웹사이트에 접속하면 아래와 같이 popup 창이 뜨네요

팝업창을 알아서 처리해주는 방법에 대해서 알아볼께요

간단한 파이썬 코드를 작성해보아요

 

팝업창이 모두 떴는지를 확인해야겠네요

자바스크립트를 사용해볼께요

def document_complete(driver):
    return driver.execute_script("return document.readyState") == "complete"

 

남겨둘 메인창이 어떤건지 알려줘야겠죠

main_window_handle = driver.current_window_handle

 

알아서 기다릴리가 없어요

로딩이 완료되었는지 (document_complete) 60초 동안 기다리라고 해줘야겠네요

WebDriverWait(driver, 60).until(document_complete)

 

메인이 아니면 팝업이겠거니 알아서 이해할리가 없어요

하나씩 알려줘야합니다

handles_without_main = [handle for handle in driver.window_handles if handle != main_window_handle]

 

모든 팝업을 닫아줍니다

for handle in handles_without_main:
    driver.switch_to.window(handle)
    driver.close()

 

다시 메인으로 돌아와야 작업을 이어갈 수 있겠네요

driver.switch_to.window(main_window_handle)

 

전체코드는 이렇게 생겼어요

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

def document_complete(driver):
    return driver.execute_script("return document.readyState") == "complete"

option = Options()
# option.add_argument('--headless')
option.add_argument('--disable-gpu')
option.add_argument('--window-size=1920,1080')
option.add_argument('--start-maximized')
service = Service()

driver = webdriver.Chrome(service=service, options=option)
driver.get('https://etk.srail.kr/main.do')

main_window_handle = driver.current_window_handle

WebDriverWait(driver, 60).until(document_complete)

handles_without_main = [handle for handle in driver.window_handles if handle != main_window_handle]

for handle in handles_without_main:
    driver.switch_to.window(handle)
    driver.close()

driver.switch_to.window(main_window_handle)

 

오늘은 selenium으로 팝업을 닫아봤습니다

 

 

 

 

 

반응형