본문 바로가기
Python Requests 기초 강의

셀레니움(Selenium) 쿠키를 활용해 requests 쿠키값으로 사용하는 방법

by 파이썬코딩대학 2025. 1. 6.

 

1강 보러가기 - Requests User Agent, Header 변경하는 방법 기초 강의

 

파이썬 requests 기초 강의 proxy, user-agent 바꾸는 법 [1강/2025년 버전]

파이썬 requests 라이브러리에 대해서 깊게 알려주는 강의들이 없길래제가 외주개발하면서 자주 사용하는 requests 모듈 '기초' 강의를 만들고 있습니다.​단순히 requests.get(url) 코드만 사용하시던

pythoncodinguniversity.tistory.com

 

 

2강 보러가기 - Requests Proxy Server 사용하는 방법

 

Python requests 기초 강의 proxy server 사용하는 방법 [2강/2025년]

파이썬 Requests 모듈로 프록시 서버 이용하기 1강 보러가기 Python Requests Module Basic Course 파이썬 requests 기초 강의 proxy, user-agent 바꾸는 법 [1강/2025년 버전]파이썬 requests 라이브러리에 대해서 깊게

pythoncodinguniversity.tistory.com

 


 

 

get cookie selenium python
2가지로 진행해보겠습니다.

 

 

네이버 카페에 가입되어 있는 목록(내 카페 리스트)을 requests 라이브러리를 통해 받아오는 예시입니다. 다만, 네이버에 로그인을 하지 않은 상태에서는 해당 정보를 조회할 수 없기 때문에, Selenium을 이용해 한 번 네이버에 로그인하고, 로그인 후 얻은 쿠키를 requests 요청에 넣어주는 방식으로 동작합니다.

 

1. Selenium으로 쿠키 가져와서

selenium get_cookies()

2. requests에 활용해주는게 저희 목표입니다

selenium get cookie from driver

 


 

 

 

 

강의 보면서 따라만들기

 

 

1. 전체 코드 구조

코드는 크게 두 부분으로 나뉩니다.

1) extract_my_cafe_list(cookie=None)

  • 네이버 카페 목록을 가져오는 함수
  • 쿠키 정보를 옵션으로 받음(없으면 로그인 안 된 상태로 시도)

2) naver_login()

  • Selenium으로 네이버 로그인 페이지를 열고, 직접 로그인하도록 유도
  • 로그인 후 생성된 쿠키를 딕셔너리 형태로 반환

이후, 로그인 쿠키 없이 먼저 카페 리스트를 받아보고, 그 다음 로그인 쿠키를 포함해 카페 리스트를 받아보는 순서로 동작합니다.


2. extract_my_cafe_list(cookie=None) 함수

def extract_my_cafe_list(cookie=None):
    cafe_list_mobile_api = "https://apis.naver.com/cafe-home-web/cafe-home/v1/cafes/join?perPage=300"
    response = requests.get(cafe_list_mobile_api, cookies=cookie)
    response_json = response.json()
    try:
        mycafelist = response_json['message']['result']['cafes']
    except:
        print(response_json['message'])
        return []
    my_cafe_name_list = []
    for cafe in mycafelist:
        my_cafe_name_list.append(cafe['cafeName'])
    return my_cafe_name_list

2-1. 코드 설명

  • cafe_list_mobile_api
    네이버 카페 목록을 가져올 수 있는 주소(API Endpoint)입니다.
    • perPage=300 은 한 번에 최대 300개의 카페 목록을 가져오겠다는 의미입니다.
  • response = requests.get(cafe_list_mobile_api, cookies=cookie)
    • requests 라이브러리를 사용해 GET 요청을 보냅니다.
    • cookies=cookie 부분이 핵심입니다. 만약 로그인된 쿠키가 있다면, 네이버 서버는 이를 보고 “로그인한 유저구나!” 라고 인식해, 실제 가입된 카페 목록을 응답해줍니다.
    • 쿠키가 없다면, 응답 메시지가 로그인되지 않았다는 메시지(또는 권한 없음 등)일 가능성이 큽니다.
  • response_json = response.json()
    • 응답 결과를 JSON 형태로 파이썬에서 사용하기 쉽게 변환합니다.
  • mycafelist = response_json['message']['result']['cafes']
    • 실제 카페 목록 부분만 추출합니다.
    • 만약 응답 구조가 달라진다면 KeyError가 날 수 있으므로 try-except로 감싸 에러를 처리합니다.
  • return my_cafe_name_list
    • 카페 이름만 추출해 리스트로 반환합니다.
    • 실제로는 카페명 외에도 다양한 정보(카페 ID 등)를 함께 가지고 오면 좋지만, 여기서는 이름만 가져옵니다.

3. naver_login() 함수

def naver_login():
    driver = webdriver.Chrome()
    driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com")
    time.sleep(3)
    print("네이버 로그인이 완료되면 콘솔에 엔터를 눌러주세요")
    input()

    # 로그인 후 쿠키 저장
    cookie = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()}
    print("수동 로그인 완료, 쿠키 저장됨:", cookie)
    return cookie

3-1. 코드 설명

  1. driver = webdriver.Chrome()
    • Selenium WebDriver를 사용해 Chrome 브라우저를 실행합니다.
    • 실행 전, 크롬드라이버(ChromeDriver)가 설치/설정되어 있어야 합니다.
      • Windows, Mac, Linux 환경에 따라 설정 방법이 다를 수 있으니, ChromeDriver 다운로드를 통해 환경에 맞는 드라이버를 받아주세요.
  2. driver.get("네이버 로그인 페이지 주소")
    • 네이버 로그인 페이지를 엽니다.
  3. time.sleep(3)
    • 페이지가 완전히 로딩되도록 잠시 대기합니다. (필요에 따라 시간 조절 가능)
  4. print("네이버 로그인이 완료되면...")
    • 여기서 직접 아이디와 비밀번호를 입력해 네이버 로그인을 마칩니다.
    • 로그인 2차 인증(문자인증 등)이 있다면 그 과정도 직접 수행해야 합니다.
  5. input()
    • 콘솔에서 엔터를 누를 때까지 대기합니다.
    • 이 시점에 본인 계정으로 로그인된 상태가 됩니다.
  6. cookie = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()}
    • 로그인 성공 후 브라우저에 저장된 모든 쿠키를 가져옵니다.
    • {쿠키이름: 쿠키값} 형태의 딕셔너리로 변환합니다.
    • 이를 requests 라이브러리에 전달할 수 있는 형태로 만듭니다.
  7. return cookie
    • 이 쿠키 정보를 extract_my_cafe_list 함수로 넘겨, 로그인된 상태로 API 요청할 수 있게끔 만듭니다.

4. 전체 코드 실행 흐름

# 1. 로그인 쿠키 없이 내 카페 리스트 요청
my_cafe_list = extract_my_cafe_list()
print(my_cafe_list)
print("로그인 쿠키 없이 요청한 결과")
print("******************************")

# 2. 로그인 쿠키와 함께 Requests로 내 카페 리스트 요청
cookie = naver_login()
my_cafe_list = extract_my_cafe_list(cookie)
for cafe_name in my_cafe_list:
    print(cafe_name)
print("로그인 쿠키와 함께 요청한 결과")
  1. 로그인 쿠키 없이 extract_my_cafe_list() 함수를 호출
    • 쿠키를 전달하지 않으므로, 네이버에 로그인된 상태가 아니라고 간주되어, 제대로 된 카페 목록을 얻지 못할 확률이 큽니다.
    • 보통 빈 리스트([]) 또는 권한 오류 메시지 등이 나옵니다.
  2. 로그인 후 쿠키를 얻음
    • cookie = naver_login()을 통해, 실제 네이버에 접속 후 로그인하고 쿠키를 가져옵니다.
  3. 쿠키와 함께 다시 extract_my_cafe_list(cookie) 함수를 호출
    • 로그인 상태의 쿠키가 있기 때문에, 서버가 정상적으로 “가입한 카페 리스트” 정보를 반환합니다.
    • 가입된 카페의 이름들이 목록으로 출력될 것입니다.

5. 주의사항 및 팁

  1. 크롬드라이버 버전 맞추기
    • 사용하는 크롬 버전과 크롬드라이버 버전이 달라 오류가 날 수 있으니, 버전을 맞춰 설치해주세요.
  2. 2단계 인증
    • 네이버에서 2단계 인증(OTP/문자인증 등)을 사용하는 경우, 로그인 과정에서 직접 처리해주어야 합니다.
  3. 보안 이슈
    • 실제로 서비스에 적용할 때는 쿠키나 아이디/비밀번호 관리를 주의 깊게 해야 합니다.
    • 이 예제는 학습 목적이므로, 꼭 필요한 경우가 아니면 이런 식의 크롤링이나 수동 로그인 방식을 지양할 수 있습니다.
  4. requests 대신 다른 라이브러리
    • 기본 원리는 동일합니다. HTTP 요청 시 로그인된 쿠키를 함께 실어 보내면, 서버는 해당 요청을 로그인된 사용자로 인식합니다.
  5. API가 변경될 수 있음
    • 네이버의 내부 API인 https://apis.naver.com/cafe-home-web/cafe-home/v1/cafes/join?perPage=300 경로가 언제든 바뀔 수 있으므로, 실제로는 공식 문서를 참조하거나 변경사항을 유의해야 합니다.

마무리

위 코드를 통해 네이버에 직접 로그인로그인 후 쿠키 획득쿠키를 포함해 내 카페 목록 API에 접근하는 전 과정을 살펴보았습니다. 핵심 아이디어는 “한 번 로그인을 하고, 그 세션을 유지하는 쿠키를 이용해 서버에 로그인된 요청을 보내기”입니다.

개발 초보자라면 다음 과정을 꼭 확인해 보세요.

  1. ChromeDriver 설치
  2. Selenium으로 웹페이지 열기
  3. 로그인 후 쿠키 확인
  4. requests에 쿠키를 실어 보내기

이 과정을 통해 웹 자동화, 크롤링, 그리고 쿠키/세션의 개념을 이해하는 데 큰 도움이 되길 바랍니다.