[Selenium] 셀레니움 로그인 세션 유지하기

Loopy·2022년 4월 1일
0

삽질기록

목록 보기
9/28
post-thumbnail

1️⃣ 에러 내용

👉 셀레니움으로 먼저 로그인을 자동화 해서 마이페이지까지 접속 한 후 , driver가 아닌 beautifulsoup으로 데이터를 가져오려고 하였다. 그중에, 새로운 링크를 타고 들어가서 데이터를 가져와야 하는 상황이 발생하여 세션을 유지시키는 방법을 찾아보았다.

▶ 아래 상세 버튼을 통해 새로운 페이지로 이동해야 했다.

1)chrome driver에서 현재 쿠키들을 모두 가져온 후, 2)request의 세션에 업데이트 해주는 방식을 사용했다. 하지만, 계속해서 원하는 페이지를 불러오지 못하는 에러가 났다.

 url = "https://ticket.interpark.com/Cancel/TPDetailBooked.asp"
 #쿠키 가져오기
 self.session = requests.Session()
 self.session.headers.update(self.headers)
       
 cookies = self.driver.get_cookies()
 cookie_dict={}
 for cookie in cookies:
        cookie_dict[cookie['name']] = cookie['value']
            
  #쿠키 업데이트
 self.session.cookies.update(cookie_dict)
 #상세 정보 사이트로 접속
 session.get(url)
 res_detail.raise_for_status()      #응답 코드
 soup2 = BeautifulSoup(res_detail.text, "lxml")

2️⃣ 원인

인터파크 티켓 내의 다른 로그인이 필요한 사이트들을 접속 시도 했을때는, 정상적으로 페이지가 불러와지는 것을 보고 쿠키를 전달하는 코드에는 문제가 없다는 것을 깨달았다.

따라서 HTML 코드를 다시 한번 자세히 보니, 아뿔싸.. Get 이 아니라 Post 방식으로 아래의 히든 폼 데이터들을 함께 전달하고 있었다😥 이상한곳에서 계속 삽질을 하고 있었던 것..!

3️⃣ 해결 방법

Session.post()

먼저, 넘겨야 하는 데이터를 가져온 후 session.post를 사용하여 넘겨주니 정상적으로 데이터를 가져온 것을 볼 수 있었다😊

  #form data
  link = data[6].find("form")
  hidden_list = link.find_all("input")  
  post_data = {"BDate" : hidden_list[0]["value"], "BDateSeq": hidden_list[1]["value"], "GoodsCode" : hidden_list[2]["value"], "PlaceCode" : hidden_list[3]["value"] }
    
  #상세정보 페이지로 이동(세션 유지)
  res_detail = self.session.post(details_url, data = post_data)
  res_detail.raise_for_status()      #응답 코드
  soup2 = BeautifulSoup(res_detail.text, "lxml")
profile
개인용으로 공부하는 공간입니다. 잘못된 부분은 피드백 부탁드립니다!

0개의 댓글