파이썬 셀레니움 크롤링 오류에 대해 질문합니다

조회수 1837회

만들고싶었던건 사이트 포스팅에 들어가 글을 긁어오는것입니다. 현재 오류가난 그중 일부는 긁어오는건 아직 안했고 들어갔다가 크롬 돌아오기 기능을 이용해 글을 긁은 후 원래 게시판 주소로 돌아오는 부분을 만들던 중에 오류가 일어났습니다

코드는

listlink = '게시판링크'
driver.get(listlink)
#리스트내용저장
allList = driver.find_elements_by_css_selector(
    "#kboard-default-list > div.kboard-list > table > tbody > tr")
#리스트내용(현 페이지 내의 게시글)들에 각각 접속
for item in allList: 
    postNum = item.find_element_by_tag_name("td").text #해당게시글번호
    postName = item.find_element_by_tag_name("div").text #해당게시글이름
    if(postName != ''):
        link = item.find_element_by_tag_name("a").get_attribute("href") #게시글주소
        time.sleep(2)
        driver.get(link) #해당 게시글로 이동
        """ 글을 긁어올 부분  """
        time.sleep(2)
        driver.back() #긁은후 게시판으로 돌아가기
    time.sleep(2)

오류내용은

Traceback (most recent call last):
  File "D:\downfile\downtest.py", line 38, in <module>
    postName = item.find_element_by_tag_name("div").text
  File "D:\ProgramData\anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 305, in find_element_by_tag_name
    return self.find_element(by=By.TAG_NAME, value=name)
  File "D:\ProgramData\anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 658, in find_element
    return self._execute(Command.FIND_CHILD_ELEMENT,
  File "D:\ProgramData\anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "D:\ProgramData\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "D:\ProgramData\anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  (Session info: chrome=90.0.4430.93)

이렇습니다 찾아본결과 element is not attached to the page document 해당 오류는 페이지를 다 불러오기전에 반복문이 넘어가서 그런거라고 time.sleep()을 넣어주면 괜찮아진다는데 전 여전히 오류가 발생하더군요..

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 슬립을 잘못 사용하고 있는걸로 보이는데요.

    다음과 같이 해보세요.

    listlink = '게시판링크'
    driver.get(listlink)
    
    time.sleep(10)
    
    #리스트내용저장
    allList = driver.find_elements_by_css_selector(
        "#kboard-default-list > div.kboard-list > table > tbody > tr")
    #리스트내용(현 페이지 내의 게시글)들에 각각 접속
    for item in allList: 
        postNum = item.find_element_by_tag_name("td").text #해당게시글번호
        postName = item.find_element_by_tag_name("div").text #해당게시글이름
        if(postName != ''):
            link = item.find_element_by_tag_name("a").get_attribute("href") #게시글주소
            time.sleep(2)
            driver.get(link) #해당 게시글로 이동
            """ 글을 긁어올 부분  """
            #time.sleep(2)
            driver.back() #긁은후 게시판으로 돌아가기
       # time.sleep(2)
    
    • 방법을바꿔 크롤링부분과 다운로드를 각각분리시켜 해결시켰지만 답변주신것 감사합니다. 알 수 없는 사용자 2021.5.9 22:32

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)