본문 바로가기
IT 개발 이야기/Python

Python & Selenium으로 네이버 로그인 자동화: 보안 캡챠 회피 방법

by 개발자 Aiden 2023. 9. 9.
반응형

파이썬과 셀레니움을 활용하여 네이버 로그인을 자동화하는 방법을 상세하게 안내합니다. 보안 캡챠를 회피하기 위한 pyperclip 라이브러리의 활용법부터 로컬 개발 환경 구성까지, 웹 자동화와 스크래핑에 필요한 모든 단계를 다룹니다. 특히, 네이버 로그인이 필요한 개인화 정보 기반의 서비스를 자동화하고자 하는 분들에게 유용한 정보를 제공합니다.

Python&Selenium으로 네이버 로그인 자동화하기

왜 Python과 Selenium으로 네이버 로그인 자동화가 필요한가?

네이버 로그인 자동화는 개인화된 정보나 서비스에 접근하기 위한 첫 번째 단계입니다. 로그인을 통해 개인화된 정보에 접근해야만 하는 다양한 서비스들이 있기 때문에, 이를 자동화하는 것은 매우 중요합니다.

예를 들어, 네이버 뉴스에서는 로그인 후에만 볼 수 있는 구독 중인 언론사의 뉴스, 웹툰에서는 로그인을 해야만 볼 수 있는 유료 웹툰, 또는 네이버 카페와 블로그에서는 회원만 볼 수 있는 특정 게시글 등이 있습니다. 이러한 정보에 자동으로 접근하기 위해서는 로그인 자동화가 필수적입니다.

실제 적용 사례로는 데이터 수집에서 시장 동향을 파악하거나 소비자 반응을 분석하는 작업, 자동 포스팅으로 주간 뉴스 요약이나 일정한 주제에 대한 포스팅을 자동으로 스케줄링, 그리고 일정 관리에서 회의나 이벤트 등의 일정을 자동으로 관리하여 생산성을 높일 수 있습니다. 이러한 작업들을 수동으로 하게 되면 시간과 노력이 많이 소요되지만, Python과 Selenium을 활용하면 이러한 작업들을 효율적으로 자동화할 수 있습니다. 이 글에서는 네이버 로그인 자동화를 통해 이러한 장점을 어떻게 실현할 수 있는지 알아보겠습니다.


네이버 로그인 자동화: 로컬 개발 환경 구성 준비

네이버 로그인 자동화를 진행하기 전에 기본적인 로컬 개발 환경 구성이 필요합니다. Python 설치부터 Selenium과 ChromeDriver 설치까지 기본 설정을 마련해야 하는데, 이에 대한 자세한 내용은 아래 참조 링크에서 확인하실 수 있습니다.

해당 글에서는 Selenium과 ChromeDriver를 활용한 간단한 Google 검색 자동화 예제로 기본 환경 설정을 설명하고 있습니다. 이번 글을 더 쉽게 따라가고 싶으시다면, 이전 글을 참고하시면 도움이 될 것 같습니다.

반응형


Selenium을 이용한 네이버 로그인 자동화의 기본 과정

네이버 로그인 자동화의 첫 단계로 Selenium을 이용한 기본 로그인 과정을 알아보겠습니다. 이 과정은 매우 간단하며, 몇 줄의 코드만으로도 가능합니다.

from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
import time


class NaverLoginService():

    def __init__(self):
        self.driver = None

    def open_web_mode(self):
        self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
        self.driver.set_page_load_timeout(10)

    def close_browser(self):
        if self.driver:
            self.driver.quit()
            self.driver = None

    def login(self):
        self.driver.get("https://nid.naver.com/nidlogin.login")
        time.sleep(2)  # 페이지 로딩 대기

        test_id = "NAVER_ID"
        test_passwd = "NAVER_PASSWORD"

        # 아이디와 패스워드 입력
        self.driver.find_element(By.ID, "id").send_keys(test_id)
        self.driver.find_element(By.ID, "pw").send_keys(test_passwd)

        # 로그인 버튼 클릭
        self.driver.find_element(By.ID, "log.login").click()


if __name__ == "__main__":
    naver_service = NaverLoginService()
    naver_service.open_web_mode()
    naver_service.login()
    time.sleep(5)
    naver_service.close_browser()


이 코드를 실행하면, 웹 브라우저가 자동으로 열리고 네이버 로그인 페이지에 접속한 뒤 아이디와 비밀번호를 입력하여 로그인을 시도합니다.

naver_login

하지만 여기서 문제가 발생합니다. 네이버는 이러한 자동 로그인 시도를 비정상적인 접근으로 판단하고 보안 캡챠를 띄웁니다.

naver_login_보안캡챠

이 보안 캡챠 때문에 자동 로그인이 중단되며, 이를 해결하지 않으면 다음 단계로 진행할 수 없습니다. 그렇다면 이 문제를 어떻게 해결할 수 있을까요? 다음 섹션에서는 이 문제를 해결하는 방법 중 하나를 소개하겠습니다.


보안 캡챠 회피: pyperclip 라이브러리 활용

보안 캡챠가 나타나면 자동 로그인이 중단되는 문제를 해결하기 위해 pyperclip 라이브러리를 활용해 보겠습니다. 이 라이브러리는 클립보드에 텍스트를 복사하고 붙여넣는 기능을 제공합니다.

○ pyperclip 라이브러리 소개와 설치

pyperclip는 Python에서 클립보드를 쉽게 다룰 수 있게 해주는 라이브러리입니다. 설치는 아래와 같이 간단하게 할 수 있습니다.

pip install pyperclip


○ pyperclip 사용 예시

간단한 코드 예시를 통해 pyperclip의 사용법을 알아보겠습니다.

import pyperclip

# 클립보드에 텍스트 복사
pyperclip.copy('Hello, Aiden!')

# 클립보드의 텍스트 붙여넣기
text = pyperclip.paste()
print(text)  # 'Hello, Aiden!'


○ 네이버 로그인에 pyperclip 적용하기

이제 pyperclip를 활용하여 네이버 로그인 시 보안 캡챠를 회피하는 방법을 알아보겠습니다. pyperclip를 사용하면 클립보드에 텍스트를 복사하고 붙여넣을 수 있어, 이를 활용하여 보안 캡챠를 우회할 수 있습니다.

# 아이디 입력
id_input = self.driver.find_element(By.ID, "id")
id_input.click()
pyperclip.copy(test_id)
actions = ActionChains(self.driver)
actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()

# 패스워드 입력
pw_input = self.driver.find_element(By.ID, "pw")
pw_input.click()
pyperclip.copy(test_passwd)
actions = ActionChains(self.driver)
actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()


이 코드에서는 pyperclip 라이브러리를 사용하여 아이디와 패스워드를 클립보드에 복사한 후, 웹 브라우저의 아이디와 패스워드 입력 필드에 붙여넣는 방식을 사용하고 있습니다.


네이버 로그인 자동화: pyperclip 적용 및 최종 코드

이제 pyperclip를 적용한 최종 코드를 통해 네이버 로그인 자동화를 완성해보겠습니다. 이 코드를 실행하면 보안 캡챠 없이 네이버 로그인이 가능합니다.

import time
import pyperclip
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager


class NaverLoginService():

    def __init__(self):
        self.driver = None

    def open_web_mode(self):
        self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
        self.driver.set_page_load_timeout(10)

    def close_browser(self):
        if self.driver:
            self.driver.quit()
            self.driver = None

    def login(self):
        self.driver.get("https://nid.naver.com/nidlogin.login")
        time.sleep(2)  # 페이지 로딩 대기

        test_id = "NAVER_ID"
        test_passwd = "NAVER_PASSWORD"

        # 아이디 입력
        id_input = self.driver.find_element(By.ID, "id")
        id_input.click()
        pyperclip.copy(test_id)
        actions = ActionChains(self.driver)
        actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
        time.sleep(1)  # 입력 후 잠시 대기

        # 패스워드 입력
        pw_input = self.driver.find_element(By.ID, "pw")
        pw_input.click()
        pyperclip.copy(test_passwd)
        actions = ActionChains(self.driver)
        actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
        time.sleep(1)  # 입력 후 잠시 대기

        # 로그인 버튼 클릭
        self.driver.find_element(By.ID, "log.login").click()

        # 로그인 후 '새로운 환경' 알림에서 '등록안함' 버튼 클릭
        try:
            element = WebDriverWait(self.driver, 10).until(
                EC.presence_of_element_located((By.CSS_SELECTOR, "span.btn_cancel"))
            )
            element.click()
        except:
            print("기기 등록 '등록안함' 버튼을 찾을 수 없습니다.")


if __name__ == "__main__":
    naver_service = NaverLoginService()
    naver_service.open_web_mode()
    naver_service.login()
    time.sleep(5)
    naver_service.close_browser()


코드를 실행하면 네이버 로그인 페이지에 접속하여 아이디와 패스워드를 자동으로 입력하고 로그인 버튼을 클릭합니다. 이후에는 네이버에서 제공하는 '새로운 환경' 로그인 알림이 뜨게 됩니다. 이 알림은 보안을 위해 새로운 기기나 브라우저에서 로그인할 때마다 나타나는 것으로, 이를 자동으로 처리하기 위해 코드에 '미등록' 버튼을 클릭하는 부분을 추가했습니다.

naver_login화면

이렇게 해서 네이버 로그인 자동화를 완성했습니다. 이 과정을 통해 Python과 Selenium, 그리고 pyperclip를 활용하여 네이버 로그인을 자동화하는 방법을 알아보았습니다. 특히, '새로운 환경' 로그인 알림을 자동으로 처리하는 부분은 이 자동화 과정을 더욱 완벽하게 만들어 줍니다.

※ Python에서 Enum과 namedtuple로 데이터 관리: random.choice로 랜덤 선택하기

 

Python에서 Enum과 namedtuple로 데이터 관리: random.choice로 랜덤 선택하기

이번 글에서는 Python의 Enum과 namedtuple을 활용하여 데이터를 효율적으로 관리하는 방법을 소개합니다. 특히, 웹 자동화나 스크래핑 작업에서 여러 계정을 랜덤하게 선택하는 실제 사례를 중심으

aday7.tistory.com

반응형

댓글


loading