생활
셀레니움 waits 메소드들에 대해 질문합니다.
셀레니움을 테스트할 때 웹페이지 로딩이 끝날때까지
기다리게 하고 크롤링을 해야하는데
기존에 time.sleep()을 사용하다가
이 방법보다는 로딩이 끝나면 실행되게 하는
implicitly와 explicitly가 더 좋다고 하는데
둘은 무슨 차이가 있나요?
55글자 더 채워주세요.
2개의 답변이 있어요!
Implicitly wait는
암시적 대기, 웹 페이지가 시간 내에 로딩되도록 대기하는 방식입니다.
대기 시간을 초과한다면 Exception이 발생하게 되고, 작업중이던 크롤링이 중단될 수 있습니다.
driver = webdriver.Chrome('c://chromedriver') driver.implicitly_wait(3) body = driver.find_element_by_css_selector('div.test')위 코드는 <div class="test"> 라는 태그가 나올 때까지 3초를 기다리겠다는 의미입니다.
즉, 동적할당이 3초내에 완료되면, 이 코드는 정상적으로 작동합니다.
Explicitly wait는
명시적 대기, 동적처리 페이지 및 느린 인터넷 환경에서
웹 페이지 내 특정 element를 대기하는 방식 입니다.
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div.test")))위 코드의 의미는 <div class="test"> 라는 태그를 10초안에 찾을때까지 기다리겠다는 의미입니다.
컴퓨터 속도가 빠르든 느리든, 10초 안에만 찾으면 바로 그 시점에서 값을 반환하겠다는 것입니다.
implicitly wait, explicitly wait 차이점:)
implicitly wait는 내제된 모든코드에서 될때까지
기다려주는 것
근데 실행가능하면 바로 넘어감. 이것때문에 값을
load하지 못하는경우가 많다 차라리 time.sleep()이
확실해서 좋음.
explicitly wait는 특정코드에서 될때까지 기다려주는것
(조금 어렵게 쓰이는 것으로 알고있음)