이번에 해볼 자동화는 네이버 메일 보내기입니다.
네이버 로그인 부터 메일 보내기 성공 화면까지 볼 수 있는 자동화를 구현해보았습니다.
메일 URL로 바로 접근하여 네이버 로그인을 할 수 있게 코드를 작성하였습니다.
모두 ID값을 가지고 있어서 쉬운 코드를 작성할 수 있었습니다.
driver.get('https://mail.naver.com')
driver.find_element(By.ID, 'id').send_keys(ID입력창)
driver.find_element(By.ID, 'pw').send_keys(PW입력창)
driver.find_element(By.ID, 'log.login').click()
최대한 시간을 줄이고자 time.sleep보다는 wait를 자주 사용하여 빠르게 시간을 단축할 수 있도록 구현하였습니다.
아래는 로그인 후 메일 쓰기 > 주소 입력창이 뜰때까지 대기하는 코드입니다.
driver.implicitly_wait(5)
driver.find_element(By.CLASS_NAME, 'item.button_write').click()
wait = WebDriverWait(driver, 5)
wait.until(EC.element_to_be_clickable((By.ID, 'user_input_1')))
보낼메일 주소와 메일 제목 입력하는 동작을 send_keys 기능을 통해 구현하였습니다.
반복해서 코드를 실행하면 가끔씩 메일주소 입력하는 동작이 제대로 동작하지 않고 바로 넘어가는 경우가 발견되어 그 부분을 방지하고자
메일주소 입력하는 element를 click하는 코드를 추가하여 동작이 실패하지 않도록 구현하였습니다.
(이렇게 하니 10번 시도했을 때 실패가 없었습니다.)
driver.find_element(By.ID, 'user_input_1').click()
driver.find_element(By.ID, 'user_input_1').send_keys(보낼메일주소)
driver.find_element(By.ID, 'subject_title').send_keys(메일제목)
메일 본문 내용을 작성하기 위해 확인해보니 frame을 변경해야 하는 상황이었습니다.
메일 쓰기에 사용되는 iframe 수는 총 7개였는데 해당 프레임 코드를 살펴보니 ID값 등 특정 속성값으로 코드를 구현하기 어려움이 있었습니다.
그래서 숫자를 통해 특정 프레임으로 이동하는 코드를 사용하였습니다. [switch_to.frame(4)]
프레임을 이동하기 전 wait를 사용하였는데 반복시 정상 동작하지 않을 수도 있어서 그럴때에는 time.sleep 기능을 사용하면 해결이 됩니다.
메일 본문 작성 후 parent_frame으로 다시 상위 프레임으로 돌아와 보내기 버튼을 누르는 코드를 작성하였습니다.
driver.implicitly_wait(3)
#time.sleep(2)
driver.switch_to.frame(4)
driver.find_element(By.CLASS_NAME, 'workseditor-content').send_keys('test1 test2 test3')
driver.switch_to.parent_frame()
driver.find_element(By.CLASS_NAME, 'button_write_task').click()
전체 코드입니다. 해당 코드 실행시 10초 정도로 메일 보내기를 자동화를 통해 편리하게 보낼 수 있음을 확인할 수 있었습니다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get('https://mail.naver.com')
# 네이버 로그인
driver.find_element(By.ID, 'id').send_keys(ID입력창)
driver.find_element(By.ID, 'pw').send_keys(PW입력창)
driver.find_element(By.ID, 'log.login').click()
# 보내기 버튼 클릭
driver.implicitly_wait(5)
driver.find_element(By.CLASS_NAME, 'item.button_write').click()
wait = WebDriverWait(driver, 5)
wait.until(EC.element_to_be_clickable((By.ID, 'user_input_1')))
driver.find_element(By.ID, 'user_input_1').click()
driver.find_element(By.ID, 'user_input_1').send_keys(보낼메일주소)
driver.find_element(By.ID, 'subject_title').send_keys(메일제목)
driver.implicitly_wait(3)
#time.sleep(2)
# 프레임 변경 후 본문 작성
driver.switch_to.frame(4)
driver.find_element(By.CLASS_NAME, 'workseditor-content').send_keys('test1 test2 test3')
# 상위 프레임 이동 후 메일 보내기
driver.switch_to.parent_frame()
driver.find_element(By.CLASS_NAME, 'button_write_task').click()
# 성공 화면 보기
time.sleep(3)
print("메일 보내기 성공!")
driver.close()
'자동화 > Selenium' 카테고리의 다른 글
Selenium Element Click이 실패할 때 사용할 수 있는 대안 방법들 (1) | 2023.03.13 |
---|---|
네이버 메모에 짧은 내용 자동화로 작성해서 올리기 (0) | 2023.03.09 |
KFC 설문조사 실행파일로 자동화하여 스마트 코드 확인하기 (0) | 2023.02.27 |
업비트 코인 시가총액 및 거래대금 목록 자동화로 엑셀에 저장하기 (0) | 2023.02.22 |
네이버 주택담보대출 금리 정보 목록 자동화로 한번에 확인하기 (0) | 2023.02.13 |