아하
생활

생활꿀팁

산뜻한잠자리197
산뜻한잠자리197

셀레니움 waits 메소드들에 대해 질문합니다.

셀레니움을 테스트할 때 웹페이지 로딩이 끝날때까지

기다리게 하고 크롤링을 해야하는데

기존에 time.sleep()을 사용하다가

이 방법보다는 로딩이 끝나면 실행되게 하는

implicitly와 explicitly가 더 좋다고 하는데

둘은 무슨 차이가 있나요?

    55글자 더 채워주세요.
    2개의 답변이 있어요!
    • 차분한기러기89
      차분한기러기89

      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는 특정코드에서 될때까지 기다려주는것

      (조금 어렵게 쓰이는 것으로 알고있음)