Python Requests 로그인 문제, Playwright 쿠키로 간단하게 해결!

웹 스크래핑을 하다 보면 로그인이라는 난관에 부딪히게 됩니다. 단순히 Requests를 사용하여 로그인 페이지에 POST 요청을 보내는 방식은 복잡한 인증 방식, CSRF 토큰 처리, 세션 관리 등의 문제로 인해 제대로 작동하지 않는 경우가 많습니다.

이러한 로그인 처리의 어려움을 해결하기 위해 PlaywrightRequests를 함께 사용하는 효과적인 방법을 소개합니다. Playwright는 강력한 브라우저 자동화 라이브러리로, 실제 브라우저 환경을 제어하여 쿠키를 쉽게 생성하고 관리할 수 있도록 도와줍니다. 이렇게 생성된 쿠키를 Requests에 적용하면, 로그인 상태를 유지하며 원하는 웹 페이지에 접근하여 정보를 수집할 수 있습니다.

왜 Playwright로 쿠키를 생성하고 Requests에서 사용할까요?

Playwright를 사용하여 쿠키 저장하기

제공된 코드를 활용하면 Playwright를 통해 현재 열려있는 웹 페이지의 쿠키를 JSON 파일로 간단하게 저장할 수 있습니다.


import asyncio  # 비동기 프로그래밍을 위한 라이브러리
import json  # JSON 데이터 처리 라이브러리
from playwright.async_api import async_playwright  # Playwright의 비동기 API에서 async_playwright 클래스 import

async def save_playwright_cookies():
    """
    Playwright를 실행하고 사용자가 웹사이트에서 쿠키를 생성한 후,
    현재 페이지의 쿠키를 JSON 파일('playwright_cookies.json')로 저장합니다.
    이 JSON 파일은 requests 라이브러리에서 웹 요청 시 쿠키를 사용하기 위한 형식입니다.
    """
    async with async_playwright() as p:
        # Playwright 인스턴스를 생성하고 관리합니다. async with 구문을 사용하여 자동으로 정리됩니다.
        browser = await p.chromium.launch(headless=False)  # Chromium 브라우저를 실행합니다. headless=False로 설정하여 브라우저 창을 보이게 합니다.
        page = await browser.new_page()  # 새로운 페이지 (탭)을 엽니다.

        print("Playwright 브라우저가 실행되었습니다.")  # 사용자에게 브라우저가 실행되었음을 알립니다.
        print("쿠키를 생성하려는 웹사이트로 이동하세요.")  # 사용자에게 쿠키를 생성할 웹사이트로 이동하도록 안내합니다.
        input("쿠키 생성이 완료되었으면 Enter 키를 누르세요...")  # 사용자로부터 Enter 키 입력을 기다립니다. 사용자가 쿠키 생성을 완료한 시점을 알립니다.

        cookies = await page.context.cookies()  # 현재 브라우저 컨텍스트의 모든 쿠키를 가져옵니다.

        with open("playwright_cookies.json", "w") as f:
            # 'playwright_cookies.json' 파일을 쓰기 모드('w')로 엽니다. 파일이 없으면 새로 생성하고, 있으면 내용을 덮어씁니다.
            json.dump(cookies, f, indent=4)
            # 가져온 쿠키 데이터를 JSON 형식으로 파일에 저장합니다.
            # indent=4는 JSON 파일 내용을 사람이 읽기 쉽도록 4칸 들여쓰기합니다.

        print("현재 페이지의 쿠키가 'playwright_cookies.json' 파일로 저장되었습니다.")  # 사용자에게 쿠키가 파일에 성공적으로 저장되었음을 알립니다.
        await browser.close()  # 실행된 브라우저를 닫습니다.

if __name__ == "__main__":
    # 이 스크립트가 직접 실행될 때만 아래 코드를 실행합니다.
    asyncio.run(save_playwright_cookies())
    # 비동기 함수인 save_playwright_cookies()를 실행하기 위한 asyncio 이벤트 루프를 시작합니다.

 쿠키 사용 방법

  1. 위 코드를 실행하면 Playwright 브라우저가 실행됩니다. (headless=False 설정으로 브라우저 창이 보입니다.)
  2. 쿠키를 얻고 싶은 웹사이트로 이동하여 로그인 등의 필요한 작업을 수행합니다.
  3. 로그인이 완료되면 터미널에서 Enter 키를 누릅니다.
  4. 현재 브라우저의 쿠키 정보가 playwright_cookies.json 파일로 저장됩니다.

 


import requests
import json

# playwright_cookies.json 파일에서 쿠키를 로드합니다.
with open("playwright_cookies.json", "r") as f:
    cookies_data = json.load(f)

# requests 쿠키 형식으로 변환합니다.
requests_cookies = {}
for cookie in cookies_data:
    requests_cookies[cookie['name']] = cookie['value']

# requests를 사용하여 쿠키가 필요한 웹사이트에 요청을 보냅니다.
url = "https://example.com/protected_page"  # 실제 쿠키가 필요한 URL로 변경하세요.
response = requests.get(url, cookies=requests_cookies)

print(response.status_code)
print(response.text)

설명:

  1. playwright_cookies.json 파일을 열어 저장된 쿠키 데이터를 읽어옵니다.
  2. Playwright 형식의 쿠키 데이터를 Requests에서 사용할 수 있는 딕셔너리 형태로 변환합니다.
  3. requests.get() 또는 requests.post() 함수를 호출할 때 cookies 매개변수에 변환된 쿠키 딕셔너리를 전달합니다.

이제 Requests는 Playwright를 통해 획득한 로그인 정보를 담고 있는 쿠키를 사용하여 웹사이트에 접근할 수 있게 됩니다.

Python의 Requests와 Playwright를 함께 사용하면 웹 스크래핑 시 발생하는 로그인 처리의 어려움을 효과적으로 해결할 수 있습니다. Playwright를 통해 실제 브라우저 환경에서 쿠키를 생성하고, 이를 Requests에 적용하여 로그인 상태를 유지하며 원하는 웹 정보를 손쉽게 수집해 보세요. 이 방법은 동적 웹사이트나 복잡한 인증 방식을 사용하는 웹사이트에서도 강력한 해결책을 제시해 줄 것입니다.