웹 사이트를 이동할 때 페이지 로딩 시간이 걸리게 된다.
로딩이 되지 않았을 때 데이터를 크롤링한다면, 로딩되기 전의 데이터들을 긁어오게 되서 원하는 데이터들을 가져올 수 없게 된다.
그렇기 때문에 페이지 로딩을 기다리는 코드가 필요하다.
코드 상단에 아래 코드들을 추가한다.
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 부분을 찾기 전까지)EC
가 TimeoutException
을 발생시킨다.현재 나의 코드에는 By.XPATH
를 사용했지만, By.ID
, By.CLASS_NAME
... 등 여러가지를 쓸 수 있다.
이렇게 했는데도 원하는 데이터를 긁어 오지 못한다면,
페이지 새로고침을 눌른 후, 내가 원하는 데이터가 생겨나는 시점을 눈여겨 살펴보는 게 좋을 것이다.