TimeoutException은 웹 페이지나 요소를 기다리는 시간이 초과될 때 발생하는 오류로, 페이지가 로딩되지 않거나 요소가 나타나지 않을 때 발생할 수 있습니다. 예시 코드와 해결 방법에 대해 설명하겠습니다.
예시 코드:
아래 예시 코드는 존재하지 않는 요소를 기다리는 상황으로 TimeoutException이 발생할 수 있습니다.
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('path/to/chromedriver')
# Google 검색 페이지 접속
driver.get('https://www.google.com')
# 존재하지 않는 요소 기다리기
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.nonexistent-element'))
)
print(element.text)
except TimeoutException as e:
print("요소를 찾을 수 없거나 로딩에 시간이 너무 오래 걸립니다.")
finally:
# 브라우저 종료
driver.quit()
해결 방법:
TimeoutException이 발생할 때, 다음과 같은 방법으로 해결할 수 있습니다.
타임아웃 시간 조정:
WebDriverWait에서 사용하는 타임아웃 시간을 적절하게 조정하여 기다리는 시간을 늘립니다. 요소가 나타날 때까지 기다리는 시간을 늘려서 TimeoutException을 방지할 수 있습니다.
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('path/to/chromedriver')
# Google 검색 페이지 접속
driver.get('https://www.google.com')
# 타임아웃 시간 조정
try:
element = WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.nonexistent-element'))
)
print(element.text)
except TimeoutException as e:
print("요소를 찾을 수 없거나 로딩에 시간이 너무 오래 걸립니다.")
finally:
# 브라우저 종료
driver.quit()
[Python/Selenium] - Selenium 웹 페이지 대기
다른 선택자 사용하기:
TimeoutException이 발생하는 경우, 기다리는 요소를 찾는데 사용한 선택자가 정확하지 않을 수 있습니다. 다른 선택자를 사용하여 요소를 찾아보고 TimeoutException을 회피할 수 있습니다.
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('path/to/chromedriver')
# Google 검색 페이지 접속
driver.get('https://www.google.com')
# 다른 선택자로 요소 찾기
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.different-element'))
)
print(element.text)
except TimeoutException as e:
print("요소를 찾을 수 없거나 로딩에 시간이 너무 오래 걸립니다.")
finally:
# 브라우저 종료
driver.quit()
[Python/Selenium] - Selenium 선택자 사용
implicitly_wait() 메서드 사용:
WebDriverWait 대신 implicitly_wait() 메서드를 사용하여 모든 요소에 대해 일정 시간만큼 기다릴 수 있도록 설정할 수도 있습니다.
from selenium import webdriver
driver = webdriver.Chrome('path/to/chromedriver')
# implicitly_wait() 메서드로 기다리는 시간 설정
driver.implicitly_wait(10)
# Google 검색 페이지 접속
driver.get('https://www.google.com')
# 요소 찾기
try:
element = driver.find_element_by_css_selector('.nonexistent-element')
print(element.text)
except TimeoutException as e:
print("요소를 찾을 수 없거나 로딩에 시간이 너무 오래 걸립니다.")
finally:
# 브라우저 종료
driver.quit()
TimeoutException이 발생하는 경우 위의 방법 중 하나를 적절히 선택하여 예외를 처리하고, 프로그램이 안정적으로 동작하도록 합니다. 웹 페이지의 로딩 시간을 고려하여 타임아웃 시간을 적절하게 설정하고, 요소를 찾는 방법을 최적화하는 것이 중요합니다.
'Python > Selenium' 카테고리의 다른 글
파이썬 Selenium ElementNotInteractableException 오류 (0) | 2023.08.13 |
---|---|
파이썬 Selenium StaleElementReferenceException 오류 (0) | 2023.08.12 |
파이썬 Selenium NoSuchElementException (0) | 2023.08.10 |
Selenium Google 기사 스크래핑 (0) | 2023.08.09 |
Selenium 브라우저 윈도우 조작 (0) | 2023.08.08 |