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 입니다.
새로운 탭을 열고 로딩을 기다린뒤 윈도우 목록을 확인해보면 여러 개의 항목이 들어있는 것을 볼 수 있습니다.
제가 참고한 강의에서는 팝업창이 하나만 떴는데
제가 실습을 하는 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://dejavuqa.tistory.com/110
https://www.youtube.com/watch?v=ItvnZHG_AJk
'Python_programming > 크롤링' 카테고리의 다른 글
웹 크롤링 입문 (1) (selenium) 202004 (0) | 2020.04.19 |
---|