크롤링

로그인이 필요한 서비스 자동화 - 쿠키와 세션

taehyuck 2025. 3. 26. 22:36
728x90

기본적으로 셀레니움으로 로그인을 하지 않는 이상은

로그인 상태를 계속 유지할 수 없다.

물론 셀레니움으로 할 수도 있지만 이게 생각보다 노가다를 해야한다 (시간도 오래 걸리고,,,)

 

그래서 오늘은 쿠키와 세션을 통해

reuqests로 요청을 해도 로그인이 유지되게끔 하는 방법을 알아보려고 한다

 

여기서 잠시 세션과 쿠키에 대해 알아보자!

 

세션이란? 로그인을 하게되면 서버에 세션 정보가 저장된다

그러고 쿠키에는 그 세션 정보와 매칭되는 키 값이 저장되는데

페이지를 이동할 때마다 서버는 쿠키에 저장된 키 값과 서버에 저장된 세션 정보를 대조해보며

로그인 정보를 알 수 있게 된다.

 

requests는 기본적으로 세션 객체를 생성하도록 지원한다

그리고 페이지 요청을 할때

requests.post 가 아닌

session.post 방식으로 요청을 보내면 세션이 로그인 정보를 유지한 채로 페이지를 가져올 수 있다.

 

물론 이렇게 쉬우면 좋겠지만

 

세상에는 정말 다양한 페이지가 존재한다.

저렇게 단순한 방법으로 해결되는 페이지가 많지 않다!!!!

 

일반적으로 reuqests로그인이 되는 경우는 드물다

그래서 로그인은 셀레니움으로 해주고 해당 브라우저의 세션을 받아오는 식으로 해줘야 한다.

 

username = driver.find_element(By.CSS_SELECTOR, "#username")
username.send_keys('test4')
time.sleep(1)

password = driver.find_element(By.CSS_SELECTOR, "#password")
password.send_keys('4444')
time.sleep(1)

login_btn = driver.find_element(By.CSS_SELECTOR, "#submit")
login_btn.click()

로그인을 먼저 해주고~

그러면 세션 정보를 가진 브라우저 창이 나타날거다

 

cookies = driver.get_cookies()

해당 브라우저의 쿠키값을 가져올게요 (쿠키에 세션 키 값이 저장되어있다)

 

이런식으로 말이다

 

session = requests.Session()

for cookie in cookies:
    session.cookies.set(cookie['name'], cookie['value'])

세션 객체를 만들어 주고 가져온 쿠키를 추가해준다

 

res = session.post(url, data = comment_data)

이제 로그인이 필요한 페이지를 요청해주면 정상 처리되는 것을 확인할 수 있다.

 

 

 

그런데 여기서 끝이 아니다,,, ㅠㅠ

 

csrf_token토큰이 필요한 페이지도 있다

 

그럴경우 soup.select_one("#csrf_token").attrs['value']를 이용해 해당 페이지의 현재 세션에 대한 토큰을

가져와야 한다. 

 

res = session.get(sub_url)
html = res.text
soup = BeautifulSoup(html, 'html.parser')

# 해당 세션과 쌍을 맺는 csrf토큰을 가져옴
# attrs은 해당 태그에서 속성값을 가져오는데 이 코드에서는 value라는 속성의 값을 가져옴
csrf_token = soup.select_one("#csrf_token").attrs['value']

# post로 넘겨줄 데이터를 정의
comment_data = {
    'csrf_token' : csrf_token, # csrf토큰 
    'content' : '모레도 지식이 늘어남에 감사합니다', # 수정할 내용
    'submit' : '수정' # 수정 버튼
}

# 2페이지에 있는 22번 댓글에 comment_data로 넘겨줌
res = session.post(url, comment_data)
print(res.text)

 

csrf_token토큰은 세션은 유지되더라도 보안을 위해 페이지가 세로고침되면 바뀌니까

페이지마다 토큰을 다시 받아와야 한다.

 

좀 보안에 신경쓰는 사이트는 웬만하면 csrf토큰이 필요한 것 같다.

 

진짜 사용자가 보낸 요청인지 확인하기 위한 일회용 비밀번호 같은거니까 기억하자!!

728x90

'크롤링' 카테고리의 다른 글

봇탐지 우회  (1) 2025.03.29
무신사 크롤링  (0) 2025.03.23
크롤링 - 자바스크립트 크롤링 필요한 이유  (1) 2025.03.20
크롤링 - 키움증권 (2)  (0) 2025.03.18
크롤링-키움증권 고객문의  (0) 2025.03.17