프로그래밍/Python

파이썬 - 셀레니움으로 네이버 로그인하기, 캡차(보안문자) 우회

abfc 2021. 2. 28.
반응형

일반적으로 셀레니움을 이용한 네이버 로그인은 캡차때문에 불가능합니다. 캡차(보안문자)를 우회해서 로그인 하기 위해서는 아래의 방법을 사용하시면 됩니다.

 

필요한 모듈 Import

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import pyperclip

 

네이버 캡차(보안문자) 우회하여 로그인하기

#드라이버 로딩
driver = webdriver.Chrome('./chromedriver.exe')

##사용할 변수 선언
#네이버 로그인 주소
url = 'https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com'
uid = '네이버아이디'
upw = '네이버패스워드'

#네이버 로그인 페이지로 이동
driver.get(url)
time.sleep(2) #로딩 대기

#아이디 입력폼
tag_id = driver.find_element_by_name('id')
#패스워드 입력폼
tag_pw = driver.find_element_by_name('pw')

# id 입력
# 입력폼 클릭 -> paperclip에 선언한 uid 내용 복사 -> 붙여넣기
tag_id.click()
pyperclip.copy(uid)
tag_id.send_keys(Keys.CONTROL, 'v')
time.sleep(1)

# pw 입력
# 입력폼 클릭 -> paperclip에 선언한 upw 내용 복사 -> 붙여넣기
tag_pw.click()
pyperclip.copy(upw)
tag_pw.send_keys(Keys.CONTROL, 'v')
time.sleep(1)

#로그인 버튼 클릭
login_btn = driver.find_element_by_id('log.login')
login_btn.click()
time.sleep(2)
  • 드라이버 위치는 파이썬 파일과 같은 위치에 있을경우 위 소스처럼 사용하시면 되고, 다른 위치에 있을 경우 그에 맞는 path를 등록하시면 됩니다.

로그인에 실패할 경우 대비(try ~ except)

#로그인이 실패했을 경우 - 예: 아이디나 패스워드 불일치
try:
  #로그인 실패창
  login_error = driver.find_element_by_css_selector('#err_common > div > p')
  print('로그인 실패 > ', login_error.text)
except:
	print('로그인 성공')

아이디를 틀렸다거나 패스워드를 틀려서 로그인이 되지 않을 경우가 있습니다. 이런 상황을 무시한채 다음 작업으로 넘어가면 안되겠죠? ㅎㅎ

로그인 버튼 클릭 후 로그인 에러가 발생할 경우 생기는 로그인 실패 멘트를 찾아서 멘트가 있을 경우 -> 로그인 실패, 멘트가 없을 경우 -> 로그인 성공으로 처리한 후에 다음 로직으로 넘어가도록 try ~ except 구문을 추가해줍니다.

 

전체 소스코드

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import pyperclip

def naver_login():
    #드라이버 로딩
    driver = webdriver.Chrome('./chromedriver.exe')

    ##사용할 변수 선언
    #네이버 로그인 주소
    url = 'https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com'
    uid = '네이버아이디'
    upw = '네이버패스워드'

    #네이버 로그인 페이지로 이동
    driver.get(url)
    time.sleep(2) #로딩 대기

    #아이디 입력폼
    tag_id = driver.find_element_by_name('id')
    #패스워드 입력폼
    tag_pw = driver.find_element_by_name('pw')

    # id 입력
    # 입력폼 클릭 -> paperclip에 선언한 uid 내용 복사 -> 붙여넣기
    tag_id.click()
    pyperclip.copy(uid)
    tag_id.send_keys(Keys.CONTROL, 'v')
    time.sleep(1)

    # pw 입력
    # 입력폼 클릭 -> paperclip에 선언한 upw 내용 복사 -> 붙여넣기
    tag_pw.click()
    pyperclip.copy(upw)
    tag_pw.send_keys(Keys.CONTROL, 'v')
    time.sleep(1)

    #로그인 버튼 클릭
    login_btn = driver.find_element_by_id('log.login')
    login_btn.click()
    time.sleep(2)

    #로그인이 실패했을 경우 - 예: 아이디나 패스워드 불일치
    try:
        #로그인 실패창
        login_error = driver.find_element_by_css_selector('#err_common > div > p')
        print('로그인 실패 > ', login_error.text)
    except:
        print('로그인 성공')

naver_login()

공감과 댓글은 작성자에게 많은 힘이됩니다. 감사합니다😄

반응형

댓글

💲 추천 글