본문 바로가기

Python_programming/크롤링

크롤링 입문(2) selenium - 시간창 대기 ,팝업창 닫기

2020 04 19 

1) 시간창 대기 3가지 

 

보통 시간창 대기는 time.sleep , implicity_wait , Explicit Waits 3가지를 씁니다. 

 

time.sleep 은 그냥 지정한 시간만큼 기다린 뒤에 작업을 진행. 파이썬 내장 모듈이죠. 

 

implicitly_wait 는 지정한 시간만큼 기다려주고 그 이후는 기다리지 않습니다. 

Explicit Waits 는 특정 상태가 될때까지 기다리고, 상태가 되면 바로 실행한다는 의미입니다. 

 

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 

driver = webdriver.Chrome('./chromedriver')

# 무조건 지정된 time만큼 대기 
#time.sleep(10)

# 10초까지 기다려준다. 10초 안에 웹 화면이 표시되면 바로 다음 작업이 진행됨 
driver.implicitly_wait(10)

driver.get('https://naver.com')

# button = driver.find_element_by_css_selector('#search_btn')

# 검색 버튼을 찾아서 누를건데, 최대 5초까지만 기다리겠다라는 의미 
button = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#search_btn')))
button.click()

 

 

2) 팝업창 닫기 

 

요즘 사이트들은 팝업창 뜨는 사이트들은 많지 않다고 하는데

내가 크롤링하려는 곳이 팝업창이 있을 수도 있으니 익혀두는 게 좋을 것 같습니다.

 

 

우선, 바로 코드 먼저 보시죠. 

핵심은 window_handles 입니다. 

 새로운 탭을 열고 로딩을 기다린뒤 윈도우 목록을 확인해보면 여러 개의 항목이 들어있는 것을 볼 수 있습니다.

 

메인창과 팝업창이 3개여서 목록 안의 4개의 값이 들어가 있습니다.

 

제가 참고한 강의에서는 팝업창이 하나만 떴는데 

제가 실습을 하는 20200419 1800 기준으로는 팝업창이 3개였습니다. { 참고한 동영상과 같은 사이트입니다 :)  }

그래서 반복문을 써서 close 시켜주었습니다. 

 

switch_to_window 함수는 이름 그대로입니다. 

메인으로 선택하는 윈도우 창을 바꿔주는 메서드입니다. 

그러니깐 저희가 여러 개의 팝업창이 떠있어도 선택된 창은 하나 잖아요?

그런 걸 의미합니다 :) 

 

# pop up 창 닫기 

from selenium import webdriver
import time

url = 'http://www.lottemart.com'
driver = webdriver.Chrome('./chromedriver')
driver.get(url)

# 팝업창 만큼 요소가 늘어나는 걸 확인할 수 있음. 
print(driver.window_handles)

time.sleep(8)
# 팝업창 1개 일때 
# driver.switch_to_window(driver.window_handles[1])
# driver.close()

# 팝업창이 여러개 일때 
main = driver.window_handles
for handle in main:
    if handle != main[0]:
        driver.switch_to_window(handle)
        driver.close()

#'장난감' 코너 눌러보기
driver.switch_to_window(driver.window_handles[0])
driver.find_element_by_class_name('logo-toysrus').click()

 

 

참고 

 

https://bit.ly/3bpX6hy 

 

https://dejavuqa.tistory.com/110

 

https://www.youtube.com/watch?v=ItvnZHG_AJk

 

https://www.youtube.com/watch?v=sWTvgJhJ1oQ&t=328s

'Python_programming > 크롤링' 카테고리의 다른 글

웹 크롤링 입문 (1) (selenium) 202004  (0) 2020.04.19