본문 바로가기

자동화/Selenium

네이버 메모에 짧은 내용 자동화로 작성해서 올리기

728x90

저번에 네이버 메일을 해보았는데 이번에는 네이버 메모에다 내용을 작성하여 저장하는 걸 시도해보았습니다.

네이버 메모는 네이버 ID만 있으면 웹, 앱 상관없이 해당 메모를 볼 수 있어서 간단하게 사용할 때 가끔 이용하는데요.

 

공부할 겸 자동화 시도해보는것도 좋을 거 같아서 선정하였습니다.

 

자동화 절차 시나리오는 간단하게 작성하였습니다.

 

  1. 메모 URL 이동
  2. 네이버 로그인
  3. 메모 쓰기 후 저장

로그인 한 후에 좌측 메모 쓰기 버튼을 누르는 코드인데 wait를 같이 추가하여 클릭 가능할 때 바로 클릭될 수 있도록 구현하였습니다.

 

wait = WebDriverWait(driver, 5)
wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'btn.write._write_btn')))
driver.find_element(By.CLASS_NAME, 'btn.write._write_btn').click()

 

메모 작성하는 부분 코드를 살펴보면 class_name이 workseditor로 있어서 해당 부분을 element로 찾으려고 시도하였는데 에러가 발생하였습니다.

 

 

바로 element not interactable 에러인데 구글에 검색해보니

해당 element를 찾을 수 있지만 상호작용을 할 수 없을 때 발생하는 에러로 확인되었습니다.

 

다른 방법들을 찾아보았는데 실패하였고 그래서 해당 element를 다른 방식으로 찾는 방법으로 전환하였습니다.

 

시도하였지만 실패한 방법들 

 

  • time이나 wait를 주는 방법
  • send_keys(Keys.ENTER)를 사용하는 방법
    -> click이 안될 때 사용하는 방식이라고 해서 다른 케이스에서는 해당 방법으로 성공할 가능성도 있습니다.

 

해당 element 상위에 있는 엘리먼트부터 잡은 후 하위 element로 접근하는 방식으로 코드를 구현하였더니 성공하였습니다.

해당 방식을 xpath로 구현시 한줄로 간단하게 구현을 할 수도 있었습니다.

 

xpath로 구현하는게 좀 더 편리하지만 최대한 xpath를 사용하지 않기 위해 첫번째 방법으로 코드를 선택하였습니다.

 

driver.find_element(By.ID, 'editorWrapper').find_element(By.TAG_NAME, 'div').send_keys(저장할 메모 문구)
driver.find_element(By.XPATH, '//*[@id="editorWrapper"]/div').send_keys(저장할 메모 문구)

 

전체 코드입니다. 네이버 메모를 쉽게 자동화로 작성할 수 있는걸 확인해볼 수 있었던 좋은 경험이었습니다.

GUI로 구현한다면 좀 더 편리하게 사용할 수 있을거 같아서 한번 도전해보는 것도 좋을 거 같습니다.

 

자동화를 구현하다보면 단순한 부분에서 막힐때가 있어서 어려움이 있는데 조금이나마 도움이 되셨으면 합니다.

 

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

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

driver.get('https://memo.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()

wait = WebDriverWait(driver, 5)
wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'btn.write._write_btn')))
driver.find_element(By.CLASS_NAME, 'btn.write._write_btn').click()

wait = WebDriverWait(driver, 5)
wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="editorWrapper"]/div')))

driver.find_element(By.ID, 'editorWrapper').find_element(By.TAG_NAME, 'div').send_keys(저장할 메모 문구)
#driver.find_element(By.XPATH, '//*[@id="editorWrapper"]/div').send_keys(저장할 메모 문구)

driver.find_element(By.CLASS_NAME, 'button.btn_save._btn._ct_save').click()

wait = WebDriverWait(driver, 3)
wait.until(EC.presence_of_element_located((By.CLASS_NAME, '_alert_message')))
print("메모 저장 완료!")

 

코드 실행 후 네이버 메모에 작성된 걸 확인할 수 있습니다.

 

728x90