안경잡이개발자

728x90
반응형

셀레니움(Selenium)을 활용해 네이버 자동 로그인 및 메일 정보 가져오기

나동빈


※ 셀레니움 개요 ※


  셀레니움(Selenium)자동화 웹 사이트 분석 프레임워크로 크롤링(Crawling)을 수행함에 있어서 매우 효과적인 기능을 제공합니다.  특히 구글 크롬(Chrome)과 같은 웹 브라우저와 연동되어 다양한 디버깅을 할 수 있어 편리합니다.


※ 셀레니움 설치 ※


  셀레니움은 PIP 명령어를 이용해 파이썬(Python) 개발환경에 쉽게 설치할 수 있습니다.


  pip install selenium: 파이썬(Python)에서 셀레니움(Selenium)을 설치하는 명령어입니다.



※ 크롬 웹 드라이버 ※


  우리가 개발한 파이썬 크롤링 소프트웨어에서 크롬(Chrome) 브라우저의 기능을 이용하도록 하기 위해서 웹 드라이버(Web Driver)를 설치해야 합니다.


  크롬 드라이버 URL: http://chromedriver.chromium.org/downloads



  위와 같이 드라이버 다운로드 링크를 눌러서 다운로드를 수행할 수 있습니다.



  자신의 운영체제에 맞는 웹 드라이버를 다운로드 해줍니다.



  저는 위와 같이 C 드라이브에 압축을 풀어주었습니다.


※ 셀레니움을 이용해 네이버 자동 로그인 하기 ※



  먼저 위와 같이 네이버 로그인 페이지의 주소를 확인하고 소스코드를 작성합니다.


# 자동화 테스트를 위해 셀레니움(Selenium)을 불러옵니다.

from selenium import webdriver


# 크롬 웹 드라이버의 경로를 설정합니다.

driver = webdriver.Chrome('C:\Chrome Driver\Chrome Driver.exe')


# 크롬을 통해 네이버 로그인 화면에 접속합니다.

driver.get('https://nid.naver.com/nidlogin.login')



  위와 같이 자동으로 크롬(Chrome) 브라우저가 실행되어 네이버에 접속한 것을 알 수 있습니다.



  이후에 위와 같이 '페이지 소스 보기'에서 아이디 및 비밀번호 입력 <input> 태그의 name 속성을 확인합니다.


# 아이디와 비밀번호를 입력합니다. (0.5초씩 기다리기)

time.sleep(0.5)

driver.find_element_by_name('id').send_keys('아이디')

time.sleep(0.5)

driver.find_element_by_name('pw').send_keys('비밀번호')

time.sleep(0.5)


  기본적으로 대형 포털 서비스는 너무 빠르게 다수의 로그인을 시도하면 트래픽 공격으로 판단할 수 있으므로 0.5초씩 대기하는 등의 작업을 별도로 처리해주어야 합니다.



  이제 네이버에 접속한 이후에 자동으로 아이디 및 비밀번호까지 입력된 것을 알 수 있습니다.



  이후에 자동으로 로그인 버튼까지 누를 수 있도록 개발자 도구(F12)에서 로그인 버튼 부분의 XPath를 복사(Copy)합니다.


# XPath를 이용해 로그인을 시도합니다.

driver.find_element_by_xpath('//*[@id="frmNIDLogin"]/fieldset/input').click()



  이제 위와 같이 성공적으로 로그인까지 이루어진 것을 알 수 있습니다. 이후에 메일함으로 이동해 봅시다.


  네이버 메일함 주소: https://mail.naver.com/



  이후에 개발자 도구로 소스코드를 확인한 결과 메일함의 제목 부분은 <strong> 태그의 mail_title 클래스인 것을 확인할 수 있었습니다. 따라서 이를 파싱하여 출력하는 소스코드를 작성하면 됩니다.


# 웹 페이지의 소스코드를 파싱하기 위해 Beautiful Soup 라이브러리를 불러옵니다.

from bs4 import BeautifulSoup


driver.get("https://mail.naver.com/")

html = driver.page_source

soup = BeautifulSoup(html, 'lxml')


# 메일 제목을 하나씩 파싱합니다.

title_list = soup.find_all('strong', 'mail_title')


# 모든 메일 제목을 출력합니다.

for title in title_list:

    print(title.text)



  위와 같이 정상적으로 최근 도착한 메일 제목들을 출력하는 것을 알 수 있습니다.

728x90
반응형

Comment +1