셀레니움(Selenium)을 활용해 네이버 자동 로그인 및 메일 정보 가져오기
셀레니움(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)
위와 같이 정상적으로 최근 도착한 메일 제목들을 출력하는 것을 알 수 있습니다.
'파이썬 크롤링(Python Crawling)' 카테고리의 다른 글
파이썬(Python) 경기일보 최신 기사 파싱하기 (0) | 2018.12.08 |
---|---|
파이썬(Python) 네이버 인기 검색어 파싱하기 (0) | 2018.12.08 |
웹 크롤러(Web Crawler)로 자동 로그인 및 주요 정보 추출하기 (0) | 2018.08.20 |
웹 크롤러(Web Crawler)로 연속적인 크롤링하기 (1) | 2018.08.20 |
웹 크롤러(Web Crawler)의 개요 및 공지사항 크롤링 해보기 (1) | 2018.08.20 |