프로그래밍/python
selenium 자동화 진행 중 특정 로딩화면이 사라질 때 까지 대기하는 함수
이휘재123
2023. 3. 23. 18:45
반응형
# 공통 로딩화면
def wait_loading(self):
driver = self.driver
# $x('//div[contains(@class, "blockUI")]')
loading = True
wait_count = 1
self.maximum_wait = 60
self.default_wait = 10
driver.implicitly_wait(1)
try:
loading_screen = driver.find_element(By.XPATH, '//div[contains(@class, "blockUI")]')
except Exception as e:
print(f"loading finished")
driver.implicitly_wait(1)
while loading:
try:
print(f"wait_count: {wait_count}")
loading_screen = driver.find_element(By.XPATH, '//div[contains(@class, "blockUI")]')
wait_count = wait_count + 1
loading = True
if wait_count > self.maximum_wait:
loading = False
# raise UserWarning
raise UserWarning("무한 로딩")
except UserWarning as ue:
print(f"최대 대기시간 {self.maximum_wait}초 초과")
# raise UserWarning
raise UserWarning("무한 로딩")
except Exception as e:
print(f"로딩 완료")
break
finally:
time.sleep(1)
print(f"loading finished")
driver.implicitly_wait(self.default_wait)
WebdriverWait과 EC의 기능만으로는 도무지 해결이 불가능한 로딩화면이 나타났을 때 사용하려고 제작했다.
무한 반복문을 돌면서 loading_screen이 있는지 검색해보고 없다면 종료되는 함수이다.
driver.implicitly_wait(1)을 적용해서 1초마다 해당 webelement를 검색하도록 설정하였고,
self.maximum_wait = 60으로 최대 대기시간을 설정해서 해당 시간이 되면 오류를 발생시키도록 하였다.
loading_screen 부분의 셀렉터만 잘 잡아주면 바로 사용 가능.
해당 코드의 경우에는 XPATH가 '//div[contains(@class, "blockUI")]' 인 로딩화면에 사용했다.
반응형