requests만을 사용했을 때
우선 requests를 통해 네이버페이에서의 내 정보에 접근('https://order.pay.naver.com/home?tabMenu=POINT_TOTAL')을 해보자. 당연하지만 로그인 처리가 되어있지 않고, 네이버페이에 관한 나만의 개인정보를 노출하는 페이지에 접근을 시도했으므로 현재 내 네이버페이 계좌 정보가 무엇인지, 계좌에 잔액은 얼마가 있는지 등에 대해서는 보여주지 않는다.
실제 위 스크린샷에서도 확인할 수 있듯 이런 식으로 접근을 하면 네이버에서는 우선 로그인부터 하라며 로그인 창으로 튕겨내는 것을 볼 수 있다.
그렇다면 우선 selenium으로 로그인을 진행해보자.
우선 늘 그렇듯이 selenium 모듈을 임포트하고...
selenium을 실행시킨다
그런 다음 selenium에서 로그인을 진행한다.
여담으로, selenium에서 로그인을 꼭 코드로 진행하지 않아도 된다. 어차피 현재 열려있는 selenium과 위에서 생성된 selenium 객체(여기서는 변수명 driver)가 서로 연결되어 있는 상태이기 때문에, 이 selenium의 창 또는 탭을 닫거나 변경하지 않는 이상 열려 있는 selenium 창에서 직접 조작한 내용이 selenium 객체인 driver에 실시간으로 반영된다.
물론 코드로 네이버에 로그인을 하는 방법도 있지만, 여기서 다루기에는 out of scope이므로 다루지 않는다. 네이버에 찾아보면 다 나온다.
우선 requests.Session()을 활용하여 s라는 세션명의 세션을 열어준다.
그 다음 User-Agent를 적절하게 설정한 다음에 header에 넣어준다.. 여기서는 현재 사용하고 있는 크롬의 user-agent(Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36)를 그대로 가져다 썼다.
그리고 세션 s에 headers.update()를 통헤 헤더 정보를 추가해준다. 굳이 설명하자면 requests는 초기 헤더가 엉망이므로 실제 브라우저에서 접근한 것처럼 user-agent를 바꿔준다는 거다.
오늘의 핵심. selenium 객체에서 get_cookies() 메서드를 사용하면 selenium 객체가 현재 저장하고 있는 쿠키 정보를 반환한다. 앞서 우리는 selenium을 통해 네이버에 로그인 처리를 한 상황이므로 현재 저 쿠키는 현재의 로그인 정보를 저장하고 있는 것이다. 즉 저 쿠키 정보만 있으면 우리는 로그인 한 것처럼 보여줄 수 있다는 거다! 앙 개꿀띠!!!!
쿠키는 리스트 형태로 반환되므로 for문을 통해 cookie를 하나하나 가져오자. 리스트 안의 딕셔너리가 쭉쭉 담겨있는 구조이므로 각 cookie dictionary의 키값 name으로부터 value값을 가져오면 된다. 그리고 하나하나 아까 생성한 세션 s에 .cookies.update()메서드를 통해 업데이트해준다.
s.cookies를 통해 확인해보면 selenium의 driver를 통해 받아온 쿠키 정보가 잘 담겨 있는 것을 확인할 수 있다!
이제 다 끝났다. 우리의 requests 세션 s는 로그인에 필요한 모든 쿠키(세션) 정보를 담고 있다. 그럼 정상적으로 로그인 세션 처리가 잘 되었는지 한 번 확인해보자.
위에서 보듯 정상적으로 로그인 처리가 된 모습을 확인할 수 있으며, 현재 내가 얼마만큼의 네이버페이 포인트를 가지고 있는지 역시 확인할 수 있다!(4,090원 ㅠㅠ) requests로 별다른 복잡한 처리 없이 로그인 세션 유지가 가능해진 것이다! 개꿀띠!!!!!!
출처
'IT > 파이썬' 카테고리의 다른 글
특정시간 이후 강제 종료 함수 (0) | 2021.11.17 |
---|---|
셀레니움 번역 코드 (0) | 2021.11.14 |