본문 바로가기

업무 자동화

파이썬 메일 업무 자동화 예제

반응형

 안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다.

오늘 알아볼 내용은 파이썬을 활용하여 메일을 자동으로 보내는 '메일 업무 자동화'입니다. 

 

 

 요즘 들어 특히 '업무 자동화'라는 개념이 많이 유행하는 것 같습니다. 예전에는 더욱 심했겠지만 지금도 여전히 많은 분들이 직장생활을 하면서 비효율적인 단순 노동을 하고 있습니다. 많은 이유가 있겠지만 그 중에서도 우리나라의 고질적인 관료주의적 '꼰대'문화에서 비롯된 과도한 서류처리가 많은 지분을 차지하고 있는것 같습니다. 물론 이러한 사회적 구조가 바뀐다면 가장 좋겠지만 저는 오늘 여러분께 차선책으로써 파이썬을 활용한 메일 업무 자동화를 알려드리고자 합니다. 부디 많은 도움이 되시길 바라겠습니다.

 

 

 그러면 우선적으로  크롬 웹 드라이버를 설치해 주어야 합니다. 이 부분은 제가 다른 글에서 자세하게 다루었으니 아래 링크를 참고하시기 바랍니다. 

 

https://codingopera.tistory.com/18

 

파이썬 업무 자동화 크롬 웹 드라이버 설치

 안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다. 오늘 알아볼 내용은 파이썬을 활용한 업무 자동화 중 웹 업무에 필요한 크롬 웹 드라이버 설치입니다.  요즘 들어 특히

codingopera.tistory.com

 

 그 다음으로는 Selenium을 설치주어야 합니다. Selenium이란 다양한 브라우저 및 플랫폼에서 웹 응용 프로그램을 위한 무료 자동화 테스트 스위트입니다. 한마디로 자동화 업무를 가능하게하는 라이브러리 입니다. 설치는 다음과 같이 cmd에서 pip install selenium을 통해 해줍니다.

 

pip install selenium

 

 

이로써 메일 업무 자동화를 위한 환경설정이 끝이 났습니다. 그러면 본격적으로 메일 업무 자동화에 대해 알아보도록 하겠습니다.

 

 

우선 아래와 같이 webdriver와 time을 import 해줍니다. 

from selenium import webdriver
import time

 

 

그 다음 네이버 로그인을 바로 할 수 있도록 창을 띄우는 코드를 작성해 줍니다.  여기서 webdriver.Chrome('크롬 드라이버 저장위치')를 통해 브라우저를 정의해주고 .get() 함수를 통해 해당 url 페이지를 열어줍니다. 이 코드를 실행시키면 아해 그림과 같이 네이버 로그인 창이 나오는데 여기에 본인의 아이디로 로그인을 해줍니다. 

 

url = 'https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com'
browser = webdriver.Chrome('c://chromedriver.exe')
browser.implicitly_wait(10) # 페이지가 로딩될때 까지 10초 기다려줌
browser.maximize_window() # 화면 최대화
browser.get(url) # 페이지 열기

 

 

 

1. 메일함으로 이동

 '.get('주소')'함수를 통해 메일함 주소로 이동해줍니다. 여기서 time.sleep()함수를 이용해 1초 쉬어주는데 그 이유는 페이지 로딩시간을 기다려줌으로써 다음 명령어를 원활하게 수행하기 위함입니다. 

 

# 메일함으로 이동
browser.get('https://mail.naver.com/')
time.sleep(1)

 

 

2. '메일 쓰기' 클릭

 메일 함에 들어왔으면 '메일 쓰기'를 클릭해야 됩니다. 여기서 우리는 F12를 눌러서 자바스크립트코드를 보이게 합니다. 그 다음 아래 그림에서와 같이 스크립트의 왼쪽 맨위에 화살표 모양을 클릭하고 우리가 원하는 곳인 '메일쓰기'를 클릭해 해줍니다. 

 

 

 

그러면 아래와 같이 일부 코드에 파란색 배경이 생기는데 이곳을 우클릭 -> Copy -> Copy selector를 클릭해 줍니다. 이러면 해당 위치가 코드로 복사가 됩니다. 여기서 '메일쓰기'의 경우 '#nav_snb > div.btn_workset > a.btn_quickwrite._c1\(mfCore\|popupWrite\|new\)._ccr\(lfw\.write\)._stopDefault > strong > span' 입니다.  

 

이를 코드로 나타내면 아래와 같습니다. .find_element_by_css_selector()함수를 통해 윈하는 위치를 설정하고 .click()을 통해 이를 클릭합니다.

 

# 메일쓰기 클릭
browser.find_element_by_css_selector('#nav_snb > div.btn_workset > a.btn_quickwrite._c1\(mfCore\|popupWrite\|new\)._ccr\(lfw\.write\)._stopDefault > strong > span').click()       
time.sleep(2)

 

# 메일쓰기 클릭
browser.find_element_by_css_selector('클릭할 위치').click()       
time.sleep(2)

 

 

3. 메일 주소 입력

 메일 주소를 클릭하기 까지의 과정은 위 2번과 동일 합니다. 그리고 나서 .send_keys()함수를 이용해 글자를 적어줍니다. 

 

# 메일 주소 입력
browser.find_element_by_css_selector('#toInput').send_keys('메일주소@naver.com')
time.sleep(1)

 

 

메일 제목 입력또한 위와동일 합니다.

 

# 메일 제목 입력
browser.find_element_by_css_selector('#subject').send_keys('파이썬에서 자동으로 보낸 메일')
time.sleep(1)

 

 

4. 메일 본문 입력

 메일 본문 입력은 위와는 조금 차이가 있습니다. 아래 그림과 같이 메일 프레임 아래에 메일 본문 프레임이 존재하기 때문입니다. 따라서 우리는 먼저 메일 본문 프레임에 들어가 코드를 작성해주고 다시 이 프레임 밖으로 나와야 됩니다. 

 

 

 

코드는 아래와 같습니다. 먼저 .switch_to.frame()함수를 이용해 메일 본문 프레임으로 들어가줍니다. 그다음 과정은 위와 동일합니다. 마지막으로 .switch_to.parent_frame()함수를 통해 부모 프레임 즉 메일 프레임으로 빠져나와줍니다. 

 

# iframe 태그 안에 해당 되는 태그가 있는가?
# iframe은 웹페이지 안에 또 다른 웹페이지를 넣고 싶을 때 사용, 여기서는 메일 웹페이지 안에 본문작성 웹페이지가 또 있어서 문제 발생
# iframe 안으로 들어가기
browser.switch_to.frame('se2_iframe')
# 메일 본문 입력
browser.find_element_by_css_selector('.se2_inputarea').send_keys('본문내용')
time.sleep(1)
# ifram 밖으로 나오기
#browser.switch_to_default_content()
browser.switch_to.parent_frame()

 

 

5. 메일 보내기 버튼 누르기

 마지막으로 아래 코드를 통해 메일을 보내면 됩니다. 

 

# 메일 보내기 버튼 누르기
browser.find_element_by_css_selector('#sendBtn').click()
browser.find_element_by_css_selector('#sar > div > div > div.addButton.nb > span:nth-child(2) > button').click()

 

 

지금까지 사용한 함수들을 정리하면 다음과 같습니다.

- webdriver.Chrome('크롬 드라이버 저장위치') :  크롬 드라이버를 불러줌

- get('url 주소') : 원하는 url주소로 이동

- .find_element_by_css_selector('원하는 버튼 css코드') : 사이트의 원하는 위치(버튼)으로 이동

- .click() : 클릭

- .send_keys('원하는 텍스트') : 원하는 텍스트 입력

- .switch_to.frame('원하는 프레임') : 원하는 프레임으로 이동

- .switch_to.parent_frame() : 부모프레임으로 이동

 

 

 오늘은 파이썬을 통해 메일 업무 자동화에 대해 알아보았습니다. 도움이 되셨나요? 만약 되셨다면 구독 및 좋아요로 표현해 주시면 정말 많은 힘이 됩니다. 궁금한 사항 혹은 앞으로 다루어 주었으면 좋을 주제가 있으시면 댓글 남겨주시면 감사하겠습니다. 저는 '코딩 오페라'의 'Master.M'이었습니다. 감사합니다.

 

반응형