블로그로 부수익을 얻기 위해 블로그 포스팅을 python을 이용해 자동화 하는 방법을 찾아봤다.
이번 글은 티스토리에 selenium과 chatgpt를 이용해 자동 포스팅하는 방법에 대해 작성해 보도록 하겠다.
openai api에 chatgpt를 요청하기 위한 방법은 아래 링크에 작성되어 있으니 보고 오길 바란다.
selenium을 이용한 티스토리 자동 포스팅
방법은 간단하다. 우선 selenium에 대해 알아야하는데 selenium은 브라우저 동작을 자동화 할 수 있는 도구이며 이를 이용하면 티스토리 블로그에 로그인하고 또 글을 작성하는 과정을 코드 실행 시 자동으로 동작하게 만들어 줄 수 있다.
우선 python 3.7이상의 버전이 필요하다. 이는
해당 경로에 설명되어 있다.
파이썬을 설치한 후
터미널에 pip install selenium을 입력해 셀레니움을 설치하자
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.alert import Alert
# 음식 추천 목록을 받아오기 위한 코드
import food
YOUR_API_KEY = "당신의 gpt api 키"
recipes = food.recommend_food(YOUR_API_KEY)
foodname = recipes[0]
recipe = recipes[1]
# 웹드라이버 실행 및 기본적인 세팅 자세한 내용은 찾아보자
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=options)
driver.implicitly_wait(100)
# 티스토리 로그인 접속
driver.get('https://www.tistory.com/auth/login')
# 카카오 아이디 접속 클릭
driver.find_element(By.CLASS_NAME, 'btn_login.link_kakao_id').click()
# 아이디 비밀번호 입력 후 글 작성으로 들어가기
driver.find_element(By.NAME, 'loginKey').send_keys('당신의 이메일')
driver.find_element(By.NAME, 'password').send_keys('당신의 비밀번호')
driver.find_element(By.CLASS_NAME, 'btn_g.highlight').click()
time.sleep(5)
driver.find_element(By.CLASS_NAME, 'link_profile').click()
time.sleep(1)
driver.find_element(By.XPATH, '/html/body/div[3]/div[1]/div/div[2]/div/div/div/div[2]/div/div[2]/a[2]').click()
time.sleep(5)
Alert(driver).dismiss()
time.sleep(1)
driver.find_element(By.ID, 'category-btn').click()
driver.find_element(By.ID, 'category-item-1338987').click()
# 제목에 추천받은 음식 이름 작성
driver.find_element(By.CLASS_NAME, 'textarea_tit').send_keys(f"[chatgpt] {foodname}")
time.sleep(1)
# iframe을 이용한 부분은 따로 스위칭해줘야 한다.
driver.switch_to.frame("editor-tistory_ifr")
# 본문에 recipe를 입력해준다.
driver.find_element(By.ID, 'tinymce').send_keys(recipe)
# 이후 다시 기존의 콘텐츠로 스위치 해준다.
driver.switch_to.default_content()
# 발행하기 위한 코드들
# 아래 코드는 내 블로그를 기준으로 음식 카테고리로 발행된다.
driver.find_element(By.XPATH, '/html/body/div[1]/div/div[2]/div[3]/button').click()
time.sleep(2)
driver.find_element(By.XPATH, '/html/body/div[6]/div/div/div/form/fieldset/div[2]/div/dl[2]/dd/div/button').click()
time.sleep(5)
driver.find_element(By.XPATH, '/html/body/div[6]/div/div/div/form/fieldset/div[2]/div/dl[2]/dd/div/div/div/div[11]').click()
time.sleep(3)
driver.find_element(By.XPATH, '/html/body/div[6]/div/div/div/form/fieldset/div[3]/div/button[2]').click()
위와 같은 코드를 이용하면 자동으로 포스팅이 된다. 위의 코드를 하나씩 설명해 보도록 하겠다.
우선 gpt에서 음식 추천해달라는 프롬프트를 보낸 후 foodname과 recipe로 대답을 받아온다.
이후 selenium을 이용해 티스토리 로그인 페이지로 넘어간다.
driver.find_element(By.NAME, 'loginKey').send_keys('당신의 이메일')
driver.find_element(By.NAME, 'password').send_keys('당신의 비밀번호')
driver.find_element(By.CLASS_NAME, 'btn_g.highlight').click()
위 그림의 라이언의 오른손 위 반짝이 위의 버튼을 눌러서 카카오메일_아이디, 이메일, 비밀번호칸을 클릭하면 name이 loginKey라고 적혀있는 것을 볼 수 있다.
이 부분에 send_keys 즉 당신의 이메일 주소를 보낸다는 코드를 작성한 것이다. 저 코드를 실행하면 이메일 주소가 저 위치에 자동으로 작성된다.
비밀번호도 마찬가지다.
이후 로그인 버튼을 클릭하는 코드가 실행돼 로그인이 될 것이다.
라이언의 오른손 위 반짝이 위의 버튼을 눌러서 카카오메일_아이디, 이메일, 비밀번호 부분을 클릭하고 해당 label 태그에 마우스 오른쪽 클릭을 해보면 copy 버튼이 있는데 Copy full Xpath를 누르면 Xpath가 복사된다.
이는 태그의 위치를 절대경로로 복사한 것인데
driver.find_element(By.XPATH, '복사한경로').send_keys('당신의 이메일')로 해도 같은 결과가 나올 것이다.
이처럼 하나하나 경로를 따가면서 내가 입력해야하는 것들을 입력하는 것이 위의 코드이다.
위와같은 방식으로 로그인 글쓰기 제목 본문 발행 순으로 경로를 작성해주면 코드 실행시 글이 발행되는 것을 확인할 수 있을 것이다.
그럼 본문 내용과 제목을 불러오는 것은 어떻게 해야할까
food.py라는 파일을 만든 후 chatgpt.py를 import 해준다 chatgpt.py는 맨위 링크에 있다.
import chatgpt
def recommend_food(api_key):
prompt = "내가 시키고싶은 명령" ex) "한국의 음식에 대한 글을 블로그 형식으로 작성해줘 음식이름과 본문은 따로 작성만들어줘"
text = chatgpt.chatGPT(prompt, API_KEY=api_key)
texts = text.split('\n\n')
food_name = #파싱 적당히 하기
# 음식 이름과 본문 내용을 리턴해주기
return (food_name, text)
이에 대한 내용이 셀레니움 코드 중
recipes = food.recommend_food(YOUR_API_KEY)
foodname = recipes[0]
recipe = recipes[1]
에 해당한다. 레시피를 추천받은 후 본문과 음식 이름으로 나눈다.
이후 아래의 코드로 제목과 본문을 작성하게 된다.
아래의 코드도 전부 path나 class_name을 따와서 실행하도록 만들어진 코드이다.
# 제목에 추천받은 음식 이름 작성
driver.find_element(By.CLASS_NAME, 'textarea_tit').send_keys(f"[chatgpt] {foodname}")
time.sleep(1)
# iframe을 이용한 부분은 따로 스위칭해줘야 한다.
driver.switch_to.frame("editor-tistory_ifr")
# 본문에 recipe를 입력해준다.
driver.find_element(By.ID, 'tinymce').send_keys(recipe)
# 이후 다시 기존의 콘텐츠로 스위치 해준다.
driver.switch_to.default_content()
이렇게하면 추천받은 내용을 자동으로 포스팅하게 된다.
이제 이 코드들이 특정 시간에 자동으로 실행되도록 하면 그 시간에 글이 포스팅된다. 이에 대한 내용은 다음에 작성하도록 하겠다.
이해가 안가는 부분이 있다면 댓글로 남겨주길 바란다.
'IT > chatgpt' 카테고리의 다른 글
[chatgpt] 블로그 자동 포스팅 chatgpt api 사용법 (0) | 2023.02.13 |
---|
댓글