Profile picture

[Python] 셀레니움(Selenium) 로그인 유지하기

JaehyoJJAng2024년 07월 04일

개요

셀레니움을 통해 로그인하여 로그인된 쿠키 정보를 requests 객체의 인자로 넘기는 방법에 대해서 알아보려고 한다.

이러한 작업을 하는 이유는 셀레니움은 브라우저를 열고 웹 페이지 전체를 로드하므로 많은 메모리와 CPU 자원을 소비한다.

그러나, 셀레니움을 통해 로그인 한 후, 로그인된 쿠키를 requests로 넘기게 되면 브라우저 없이도 세션을 유지한 채 서버와 통신할 수 있으므로, 시스템 자원 절약 뿐 아니라 더 빠른 작업이 가능하게 된다.


1. 셀레니움에서 쿠키를 추출하는 방법

셀레니움 브라우저에서 쿠키를 가져오는 방법은 다음과 같다.

from selenium import webdriver

# 셀레니움 드라이버 설정 및 로그인 과정
driver = webdriver.Chrome()
driver.get('https://example.com/login')

# 로그인 수행 후, 쿠키 추출
cookies = driver.get_cookies()

1-1. requests 세션에 쿠키 적용하기

위 코드를 바탕으로 추출된 쿠키를 requests 세션에 적용하려면 다음과 같이 하면 된다.

import requests

session = requests.Session()

# 셀레니움에서 추출한 쿠키를 requests 세션에 적용
for cookie in cookies:
    session.cookies.set(cookie['name'], cookie['value'])

# 이제 requests로 API 요청을 할 수 있음
response = session.get('https://example.com/api/data')
print(response.json())

1-2. requests 인자로 쿠키 전달하기

requests.Session()을 사용하지 않고, 단순히 requests의 개별 요청에 쿠키를 직접 전달하는 방법도 있다.

import requests
from selenium import webdriver

# 셀레니움 브라우저 실행 및 로그인
driver = webdriver.Chrome()
driver.get('https://example.com/login')

# 로그인 후 쿠키 추출
cookies = driver.get_cookies()

# 쿠키를 requests 요청에 수동으로 전달
cookie_dict = {cookie['name']: cookie['value'] for cookie in cookies}

# POST 요청
response = requests.post('https://example.com/api/submit', cookies=cookie_dict, data={
    'key1': 'value1',
    'key2': 'value2'
})

# 응답 출력
print(response.json())

Loading script...