저번에 네이버 메일을 해보았는데 이번에는 네이버 메모에다 내용을 작성하여 저장하는 걸 시도해보았습니다.
네이버 메모는 네이버 ID만 있으면 웹, 앱 상관없이 해당 메모를 볼 수 있어서 간단하게 사용할 때 가끔 이용하는데요.
공부할 겸 자동화 시도해보는것도 좋을 거 같아서 선정하였습니다.
자동화 절차 시나리오는 간단하게 작성하였습니다.
- 메모 URL 이동
- 네이버 로그인
- 메모 쓰기 후 저장
로그인 한 후에 좌측 메모 쓰기 버튼을 누르는 코드인데 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("메모 저장 완료!")
'자동화 > Selenium' 카테고리의 다른 글
지역 아파트 순위 자동화로 추출하여 엑셀에 저장하기 (With Python) (0) | 2023.03.23 |
---|---|
Selenium Element Click이 실패할 때 사용할 수 있는 대안 방법들 (1) | 2023.03.13 |
간단한 네이버 메일 자동화로 보내기 (With Selenium, Python) (0) | 2023.03.07 |
KFC 설문조사 실행파일로 자동화하여 스마트 코드 확인하기 (0) | 2023.02.27 |
업비트 코인 시가총액 및 거래대금 목록 자동화로 엑셀에 저장하기 (0) | 2023.02.22 |