티스토리 뷰

728x90
반응형

이번에는 Selenium으로 네이버 로그인을 구현해보려고 해요!

 

우선 일반적인 네이버 로그인부터 구현해보고 뒤에 가서 캡챠 우회에 대해서 다룰 예정이에요!

 

우선 기본적으로 Selenium은 설치되어 있어야 합니다!

그리고 chromedriver 도 셋팅되어 있어야 하구요!

만약 chromedriver를 다운로드 하지 않았다면 아래 링크를 참고해보세요!

https://domdom.tistory.com/283?category=978420 

 

[크롤링] Selenium 사용 시 Chromedriver 다운로드하는 방법

Chromedriver 를 다운로드하기에 앞서 본인이 사용하는 크롬 브라우저가 몇 버전인지 확인해야 합니다. 버전을 확인할 수 있는 방법은 아래 문자열을 크롬 브라우저 URL 입력창에 입력하고 Enter 를

domdom.tistory.com

 

네이버 로그인 버튼 클릭하기

네이버 로그인 버튼의 요소를 확인해보니,
a 태그의 class 이름이 MyView-module__link_login___HpHMW 인 것을 확인할 수 있었어요!

아래는 selenium으로 해당 요소를 가져오기 위해서 find_element_by_class_name 함수를 이용한 코드입니다!

그리고 click 함수로 로그인 버튼을 클릭 해줬습니다.

from selenium import webdriver

browser = webdriver.Chrome() # 현재파일과 동일한 경로일 경우 생략 가능

# 1. 네이버 이동
browser.get('http://naver.com')

# 2. 로그인 버튼 클릭
elem = browser.find_element_by_class_name('MyView-module__link_login___HpHMW')
elem.click()

 

id와 pw를 입력하고 로그인 버튼 누르기

위 로그인 화면에서 id 와 pw 의 input 에 해당하는 id 값을 가져옵니다.

Selenium에서는 find_element_by_id 함수를 이용해서 id 값을 가져올 수 있습니다.

또 send_keys 함수를 이용해서 인자값으로 넘겨준 문자열을 각 요소에 입력해줄 수 있습니다.

# 3. id, pw 입력
browser.find_element_by_id('id').send_keys('naver_id')
browser.find_element_by_id('pw').send_keys('naver_password')

# 4. 로그인 버튼 클릭
browser.find_element_by_id('log.login').click()

그리고 마지막으로 로그인 버튼을 클릭해주게 되면 아래와 같이 동작합니다!

뭔가 엄청 빠르게 아이디와 패스워드 항목란에 입력되고 로그인 버튼이 자동으로 눌리더니

네이버 사이트에서 봇임을 탐지하고 캡챠(자동입력방지)문자를 입력하라고 하네요!

 

아무리 time.sleep 함수를 사용해서 아이디와 패스워드 입력 시간을 늦춘다고 해도 네이버는 이를 잘 탐지하곤 합니다.

 

하지만 방법이 아예 없진 않습니다. 바로 이른바 복붙하는 방법이 있는데요.

아이디와 비밀번호를 말그대로 복사 붙여넣기 해서 입력하는 방법입니다!

(물론 이런 방식도 막아놓는 사이트도 있지만, 다행히 네이버에서는 막지 않았네요!)

 

이제 이 방법을 selenium을 이용해서 하는 방법에 대해서 알아보도록 하겠습니다!

 

HTML 요소를 가져오는 방법은 위에서 설명하였으니 따로 반복해서 설명하지 않고

여기서는 바로 코드로 설명하겠습니다.

 

selenium 외에도 pyperclip 이라는 외부 모듈을 설치해주셔야 합니다!

pyperclip 모듈은 파이썬에서 클립보드를 쉽게 활용할 수 있게 해주는 외부모듈입니다.

매우 유용하니 설치해주세요!

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

browser = webdriver.Chrome() # 현재파일과 동일한 경로일 경우 생략 가능

user_id = 'naver_id'
user_pw = 'naver_pw'

# 1. 네이버 이동
browser.get('http://naver.com')

# 2. 로그인 버튼 클릭
elem = browser.find_element_by_class_name('link_login')
elem.click()

# 3. id 복사 붙여넣기
elem_id = browser.find_element_by_id('id')
elem_id.click()
pyperclip.copy(user_id)
elem_id.send_keys(Keys.CONTROL, 'v')
time.sleep(1)

# 4. pw 복사 붙여넣기
elem_pw = browser.find_element_by_id('pw')
elem_pw.click()
pyperclip.copy(user_pw)
elem_pw.send_keys(Keys.CONTROL, 'v')
time.sleep(1)

# 5. 로그인 버튼 클릭
browser.find_element_by_id('log.login').click()

# 6. html 정보 출력
# print(browser.page_source)

# 7. 브라우저 종료
# browser.close() # 현재 탭만 종료
# browser.quit() # 전체 브라우저 종료

위 코드를 그대로 실행시키면 바로 로그인에 성공할 것입니다!

(2022년 1월 6일 기준)

(2023년 2월 4일 기준 동작여부 확인함, selenium==3.141.0)

(2023년 5월 26일 기준 코드 수정함!!)

 

- 끝 -

728x90
반응형
댓글