반응형

 

동적 페이지를 크롤링 할때 내가 원하는 소스가 다 로딩이 됐는지 확인할 필요가 있을때가 있다. 그럴때 보통은 implicitly_wait를 쓴다.

 

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()
driver.implicitly_wait(10)

 

이렇게 10초를 기다린다. 그런데 10초를 기다렸는데도 내가 원하는 요소 부분이 로딩이 안될 수도 있다.

 

그럴때는 해당 요소가 로딩이 됐는지 확인하는 방법이 있다.

 

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()
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, 'startid')))

 

이렇게 해주면 ID가 startid인 부분이 나타날때까지 기다려준다. 최소 10초를 기다린다. 10초가 지났는데 안보이면 에러다.

EC.presence_of_element_located((By.CLASS_NAME, 'startclass')
EC.presence_of_element_located((By.NAME, 'startname')
EC.presence_of_element_located((By. XPATH , '...')

 

등등이 있다.

EC.title_is(...)
EC.title_contains(...)
EC.presence_of_element_located(...)
EC.visibility_of_element_located(...)
EC.visibility_of(...)
EC.presence_of_all_elements_located(...)
EC.text_to_be_present_in_element(...)
EC.text_to_be_present_in_element_value(...)
EC.frame_to_be_available_and_switch_to_it(...)
EC.invisibility_of_element_located(...)
EC.element_to_be_clickable(...)
EC.staleness_of(...)
EC.element_to_be_selected(...)
EC.element_located_to_be_selected(...)
EC.element_selection_state_to_be(...)
EC.element_located_selection_state_to_be(...)
EC.alert_is_present(...)

 

title_is
-> 페이지의 title이 일치하면 True, 그렇지 않으면 False를 반환한다.
title_contains
-> 페이지의 title에 대소문자를 구분하여 해당 문자열이 포함되어 있는지 확인한다. 포함되면 True, 그렇지 않으면 False를 반환한다.
presence_of_element_located
-> 페이지의 DOM에 요소가 있는지 확인한다.
visibility_of_element_located
-> 요소가 페이지의 DOM에 있고 볼 수 있는 상태인지 확인한다. 볼 수 있다는 상태는 요소가 표시될 뿐만 아니라 높이와 너비가 0보다 커야 한다.
visibility_of
-> 페이지의 DOM에 있는 요소가 보이는지 확인한다.
presence_of_all_elements_located
-> 페이지에 적어도 하나의 요소가 있는지 확인한다.
text_to_be_present_in_element
-> 주어진 텍스트가 지정된 요소에 있는지 확인한다.
text_to_be_present_in_element_value
-> 주어진 텍스트가 지정된 요소의 로케이터에 있는지 확인한다.
frame_to_be_available_and_switch_to_it
-> 주어진 프레임을 전환할 수 있는지 확인한다.
invisibility_of_element_located
-> 페이지의 DOM에 요소가 보이지 않거나 존재하지 않는지 확인한다. 
element_to_be_clickable
-> 요소가 표시되고 클릭할 수 있는지 확인한다.
staleness_of
-> 요소가 더이상 DOM에 연결되지 않을 때까지 기다린다. 요소가 DOM에 연결이 되어있으면 False를 반환하고, 그렇지 않으면 True를 반환한다.
element_to_be_selected
-> 요소가 선택될 수 있는지 확인한다.
element_located_to_be_selected
-> 요소가 선택될 수 있는 위치에 있는지 확인한다.
element_selection_state_to_be
-> 지정된 요소가 선택되었는지 확인한다.
element_located_selection_state_to_be
-> 요소를 찾고, 요소가 선택된 상태인지 확인한다.
alert_is_present
-> 알림이 있는지 확인한다.

 

다양한 옵션이 있다. 자세한 설명은 아래 블로그를 참조하자.

 

https://mebadong.tistory.com/101

 

반응형

+ Recent posts