개요
셀레니움을 통해 로그인하여 로그인된 쿠키 정보를 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())