웹 크롤링을 하다 보면 로그인 후 작업을 지속적으로 수행해야 하는 경우가 많다. 매번 로그인하는 번거로움을 피하고 로그인 상태를 유지하려면 쿠키를 사용하는 방법이 매우 유용합니다. 이번 포스팅에서는 Selenium을 활용해 로그인 후 쿠키를 저장하고, 이를 불러와 로그인 상태를 유지하는 방법을 소개하려고 한다.
1️⃣ Selenium을 활용한 로그인
웹사이트에 로그인하려면 Selenium을 사용해 로그인 폼에 사용자 정보를 입력하고 로그인 버튼을 클릭하는 작업을 자동화할 수 있습니다.
def login(driver):
    driver.get("https://www.aaa.com/login")
    username = os.getenv("USERNAME")  #.env파일에 저장해놓은 정보를 불러왔다.
    password = os.getenv("PASSWORD")  #.env파일에 저장해놓은 정보를 불러왔다.
    username_field = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.NAME, "login_user_id"))
    )
    username_field.send_keys(username)
    password_field = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.NAME, "login_password"))
    )
    password_field.send_keys(password)
    login_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "submit_button"))
    )
    login_button.click()
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "username"))
    )
    save_cookies(driver)  # 로그인 후 쿠키 저장
    print("로그인 성공")
2️⃣ 쿠키 저장 및 불러오기
쿠키를 사용하여 로그인 상태를 유지하려면 로그인 후 쿠키를 저장하고, 이후 이를 불러와 사용할 수 있습니다.
✅ 쿠키 저장 함수
import pickle
def save_cookies(driver, filename="cookies.pkl"):
    with open(filename, "wb") as f:
        pickle.dump(driver.get_cookies(), f)
✅ 쿠키 불러오기 함수
import pickle
def load_cookies(driver, filename="cookies.pkl"):
    with open(filename, "rb") as f:
        cookies = pickle.load(f)
        for cookie in cookies:
            driver.add_cookie(cookie)
3️⃣ 쿠키로 로그인 상태 유지
쿠키를 저장한 후, 페이지를 새로고침하여 로그인된 상태인지 확인하는 방법입니다.
def login_using_cookies(driver):
    driver.get("https://www.acmicpc.net")
    load_cookies(driver)  # 쿠키 불러오기
    driver.get("https://www.acmicpc.net/login")  # 페이지 새로 고침
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "username"))
    )
    print("이미 로그인된 상태입니다.")
    return True
4️⃣ 요약: 왜 쿠키를 사용해야 할까?
🔑 장점
- 효율성: 매번 로그인할 필요 없이 쿠키만 불러오면 되므로 작업을 더 빠르고 효율적으로 할 수 있습니다.
 - 자동화: 로그인 정보를 저장하여 매번 입력할 필요 없이 자동화된 작업을 실행할 수 있습니다.
 
🚀 언제 사용하면 좋을까?
- 반복적인 로그인 절차가 필요한 경우
 - 크롤링/스크래핑을 위한 로그인 상태 유지가 필요한 경우
 
'AlgoMate' 카테고리의 다른 글
| Redis만으로도 비동기 처리는 가능하잖아‼️ 근데 왜 Celery+Redis를 사용해야 할까 (0) | 2025.02.18 | 
|---|---|
| 🚀 크롤링 서버 vs 메인 서버, 크롤링한 데이터를 어디서 저장해야 할까? (0) | 2025.02.17 | 
| Celery + Redis vs Celery + RabbitMQ: 어떤 선택이 더 나을까? (0) | 2025.02.17 | 
| 🚀 동적으로 파일을 제공하는 방법 (2) | 2025.02.16 | 
| Spring Boot 단위 테스트: @Mock 과 @InjectionMocks의 원리와 활용 (2) | 2025.02.14 | 
