WebDriverWait

최더디·2020년 10월 20일
0

문제 발생


웹 사이트를 이동할 때 페이지 로딩 시간이 걸리게 된다.

로딩이 되지 않았을 때 데이터를 크롤링한다면, 로딩되기 전의 데이터들을 긁어오게 되서 원하는 데이터들을 가져올 수 없게 된다.

그렇기 때문에 페이지 로딩을 기다리는 코드가 필요하다.

해결


코드 상단에 아래 코드들을 추가한다.

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
from selenium.common.exceptions import TimeoutException

try except 를 사용한다.

try:
	element = WebDriverWait(driver, 10).until(
				EC.presence_of_element_located((By.XPATH, '//*[@id="wrapper"]/div[1]'))
        )
except TimeoutException:
	return False

위의 코드를 설명하자면

  • driver는 최대 10초간 기다리게 된다. (until 부분을 찾기 전까지)
  • 10초가 넘어가도 못 찾는다면 ECTimeoutException 을 발생시킨다.

현재 나의 코드에는 By.XPATH 를 사용했지만, By.ID, By.CLASS_NAME ... 등 여러가지를 쓸 수 있다.

이렇게 했는데도 원하는 데이터를 긁어 오지 못한다면,
페이지 새로고침을 눌른 후, 내가 원하는 데이터가 생겨나는 시점을 눈여겨 살펴보는 게 좋을 것이다.

profile
focus on why

0개의 댓글