파이썬/Selenium

[Selenium] StaleElementReferenceException

easysheep 2023. 4. 19. 16:39

1. 오류

 

코드 중 게시판에서  다음 페이지로 넘어가는 것을 클릭하여 페이지 이동 후 미리 저장한 변수를 사용 했을 때 StaleElementReferenceException 오류가 발생 하였다... 처음에는 페이지 불러오기 전에 사용한 것만이 문제이줄 알았지만 , 그것과 미리 저장한 element  사용이 문제 였다.

 

def set_href_list(self):
# 페이지 1 -> 3 까지
        page_num = 0
        while page_num < 3:
            self.page_list[page_num].send_keys('\n')
            self.driver.implicitly_wait(5)
            time.sleep(2)
            if page_num <len(self.page_list):
                # 문제 부분 self.thesis_list 는 페이지 이동전의 element를 저장한 리스트이다.
                for thesis in self.thesis_list:
                    href = thesis.find_element(By.CLASS_NAME , 'thesis__link')
                    self.hrefs.append(href.get_attribute('href'))
                page_num +=1
            else:
                break

2. 해결

def set_href_list(self):
        page_num = 0
        while page_num < 3:
            time.sleep(2)
            self.page_list[page_num].send_keys('\n')
            time.sleep(2)
            # 다시 가지고 온다..
            self.page_list = self.driver.find_elements(By.CLASS_NAME , 'dpPaging__link')
            
            if page_num <len(self.page_list):
            	# 다시 가지고 온다..
                self.thesis_list = self.driver.find_elements(By.CLASS_NAME , 'thesis')
                for thesis in self.thesis_list:
                    href = thesis.find_element(By.CLASS_NAME , 'thesis__link')
                    self.hrefs.append(href.get_attribute('href'))
                page_num +=1
            else:
                break

3.  느낌점

다시 불러온다는 것이 매우 비효율적으로 느껴진다...

차리리 bs4를 사용할까 생각된다.