셀레니움으로 티스토리 블로그 포스팅 편하게 하기. 로그인 - 글쓰기 - 임시저장까지.

2023. 6. 4. 23:56python

반응형
import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import random
import pickle
import os

print(os.getcwd())

## Alert
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 셀레니움 웹 드라이버 초기화
driver = webdriver.Chrome(service= Service(ChromeDriverManager().install()))
url = 'https://accounts.kakao.com/login/?continue=https%3A%2F%2Fkauth.kakao.com%2Foauth%2Fauthorize%3Fis_popup%3Dfalse%26ka%3Dsdk%252F1.43.1%2520os%252Fjavascript%2520sdk_type%252Fjavascript%2520lang%252Fko-KR%2520device%252FMacIntel%2520origin%252Fhttps%25253A%25252F%25252Fwww.tistory.com%26auth_tran_id%3Djsypzsj3ips3e6ddd834b023f24221217e370daed18li8o8lvh%26response_type%3Dcode%26state%3DaHR0cHM6Ly93d3cudGlzdG9yeS5jb20v%26redirect_uri%3Dhttps%253A%252F%252Fwww.tistory.com%252Fauth%252Fkakao%252Fredirect%26through_account%3Dtrue%26client_id%3D3e6ddd834b023f24221217e370daed18&talk_login=hidden#login'
# 티스토리 로그인 페이지로 이동
driver.get(url)

#웹브라우저에 쿠키 주입.
# cookies = pickle.load(open("james.p", "rb"))
# with open('james.p', 'rb') as file:    # james.p 파일을 바이너리 읽기 모드(rb)로 열기
#     cookies = pickle.load(file)
#     for cookie in cookies:
#         driver.add_cookie(cookie)

# 로그인 정보 입력
login_element = driver.find_element('id', 'loginKey--1')
login_element.send_keys('test123@gmail.com')

password_element = driver.find_element('id', 'password--2')
password_element.send_keys('aksidkvmae31@dA')

time.sleep(2)
login_element.send_keys(Keys.RETURN)

time.sleep(30)


post_url = 'https://eastjin.tistory.com/manage/post'
driver.get(post_url)
time.sleep(3)

try:
    WebDriverWait(driver, 3).until(EC.alert_is_present())
    alert = driver.switch_to.alert

    # 취소하기(닫기)
    alert.dismiss()

    # 확인하기
    alert.accept()
except:
    print("no alert")

main = driver.window_handles
print(main)
# # 태그 입력
tag_list = ['GOAICAMP', 'AI개발자부트캠프', 'AI부트캠프', 'AI교육','인공지능개발자','인공지능교육','인공지능개발부트캠프', '부트캠프TIL', 'TIL챌린지','경기도미래기술학교', '경기도일자리재단', '에이블런', '에이블런부트캠프', '경기도청년지원', '경기도무료교육', '취업연계교육']  # 태그 리스트


title_element = driver.find_element('id', 'post-title-inp')
title_element.send_keys('경기도미래기술학교 AI개발자 부트캠프 19일차 TIL-이미지와 지도, folium')

tag_element = driver.find_element('id', 'tagText')

random.shuffle(tag_list)
for tag in tag_list[:10]:
    tag_element.send_keys(tag)
    tag_element.send_keys(Keys.TAB)
    time.sleep(1)

temp_element = driver.find_element(By.CLASS_NAME, 'action')
temp_element.click()
# # 전송 버튼 클릭
# driver.find_element_by_id('saveBtn').click()
#
# # 셀레니움 종료
driver.quit()

결론적인 코드다.

 

크게 어려운 부분은 없었지만 약간 까다로웠던 부분은 기존에 블로그 작성했던 부분을 썼다가 임시저장 하지 않고 나가면, 다음에 들어올 때 얼러트 창으로 전에 저장된 것부터 시작하겠냐는 문구가 뜬다. 근데 나는 이 부분을 순간 alert가 아니라 popup으로 인식을 하여 좀 헤맸다. 왜 헷갈렸지.. 바보같은 사람이다. 아무튼 alert를 해결하기 위해 expected_conditions 라는 모듈을 사용하였다. 이 모듈은 어떠한 상태변화를 명시하여 대기하는 용도로 사용된다고 한다.

 

나는 상단 사진의 alert가 나오도록 기다려야 했다. 그래서 저 문법을 사용하여 해결하였다. 그리고 dismiss()를 누르면 alert의 취소 부분이 눌리며 창이 닫힌다. 그 뒤 제목을 작성하고.. 제일 골치였던 태그값을 list로 받아 loop 돌리는 작업을 진행했다. 대충 잘된다.

 

 

 

현재 문제점 : 셀레니움은 새로 웹브라우저를 오픈할 때 기존 웹브라우저의 쿠키를 가져오지 않는다. 이에 따라 2차 보안을 자동해제 하지 못한다..

 

#웹브라우저에 쿠키주입. 이라는 주석이 있는데 구글링을 해보니 최초 로그인해서 쿠키를 긁어와서 특정파일에 저장한 다음 그 쿠키를 셀레니움 오픈 시 사용하는 방식이 있었다. 해당 방식을 채택하여 사용해보니 파일을 찾지 못한다고 되지가 않았다. 아니 왜 대체 되질 않는 것이지? 아무리 검색해도 나오지 않고 환장할 노릇이다.

 

아무튼 실생활 적용을 테스트해봤다. 발전할 것이 좀 있고 또 다른 것은 어떤 테스트를 해볼까 생각 중이다.

 

728x90