leejinbaek / Best_food_crawler

네이버 지도 맛집 탐색 크롤러
0 stars 0 forks source link

페이지 로딩이 느릴 경우 검색어 입력 관련 에러 발생 #1

Open uwriym opened 2 days ago

uwriym commented 2 days ago

버그 설명

페이지 로딩이 느릴 경우 검색 오류 발생

Screenshot 2024-06-29 at 13 18 40

console 출력 내용

키워드를 입력하세요: 진접 카페
Traceback (most recent call last):
  File "/Users/eoorim/Desktop/Best_food_crawler/src/crawler.py", line 140, in <module>
    crawler(f"{keyword}")
  File "/Users/eoorim/Desktop/Best_food_crawler/src/crawler.py", line 47, in crawler
    searchbox.send_keys(Keys.ENTER)
  File "/Users/eoorim/Desktop/Best_food_crawler/jbenv/lib/python3.12/site-packages/selenium/webdriver/remote/webelement.py", line 231, in send_keys
    self._execute(
  File "/Users/eoorim/Desktop/Best_food_crawler/jbenv/lib/python3.12/site-packages/selenium/webdriver/remote/webelement.py", line 395, in _execute
    return self._parent.execute(command, params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/eoorim/Desktop/Best_food_crawler/jbenv/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py", line 354, in execute
    self.error_handler.check_response(response)
  File "/Users/eoorim/Desktop/Best_food_crawler/jbenv/lib/python3.12/site-packages/selenium/webdriver/remote/errorhandler.py", line 229, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: stale element not found

예상되는 원인

#키워드 검색
searchbox = driver.find_element(By.CLASS_NAME, "input_search")
searchbox.send_keys(f"{keyword}")
time.sleep(2)
searchbox.send_keys(Keys.ENTER)
time.sleep(5)

searchbox를 찾은 후, 키워드를 input에 입력하는 것까지는 확인되었습니다. 그란 이후 searchbox.send_keys(Keys.ENTER)를 실행할 때 searchbox를 찾지 못해 발생하는 오류로 생각됩니다.

해결 방안

searchbox element의 유무를 ENTER 입력하기 전에 체크하여 찾지 못하였다면 직접 예외처리(오류 발생 - raise)하거나, element가 없다면 다시 찾으려는 시도가 필요할 것으로 생각됩니다.

추가로, time.sleep(2)과 같이 무조건적으로 기다리기 보단, element의 유무를 체크하여 나타날 때까지 기다리는 방식이 더 효율적일 것으로 보입니다.

leejinbaek commented 2 days ago

페이지 로딩 시간에 따른 오류 수정 및 예외처리 완료했습니다 :)