프로그램 개발 의뢰가 들어왔다....
바로 GPT를 이용해 네이버 블로그에 자동으로 글을 올려야 한다는 의뢰 .... !!
코딩을 전문적으로 배운적이 없고 경력도 없어서 어떤게 정석인진 모르겠으나
보통 나는 의뢰 내용을 보고, 미리 어떤 식으로 만들지 머리에 딱 떠오르는 편이다.
1. openai api를 이용해서 gpt와 대화
2. 셀레니움으로 블로그 글쓰기
바로 시작해보자 !
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains, Keys
import pyperclip, time
먼저 모듈을 import 해주자
chrome_options = Options()
chrome_options.add_argument("lang=ko_KR")
chrome_options.add_argument('no-sandbox')
chrome_options.add_argument('disable-gpu')
chrome_options.add_argument("disable-dev-shm-usage")
chrome_options.add_argument("--log-level=3")
chrome_options.add_argument("--disable-3d-apis")
driver = webdriver.Chrome(service=Service(), options=chrome_options)
크롬 옵션 설정해주고 ....!
네이버 블로그에 글을 쓰려면 뭐가 가장 먼저 필요할까?
너무나 간단한 퀴즈의 답은 바로 로그인 하기 !
프로그램 제작을 진행하면서 미리 만들어 놨던 로그인 함수가 있으니 이번엔 그냥 복붙하면 된다.
url = 'https://nid.naver.com/nidlogin.login?mode=form&url=https://blog.naver.com/'
driver.get(url)
# 로그인을 하면 블로그홈으로 자동으로 가게끔 url을 지정해준다 !
bb = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "id"))
)
bb.click()
# 네이버 로그인 창에서 ID=id인 항목이 나올때 까지 대기했다가, 찾으면 클릭
a = pyperclip.paste()
# 복붙을 이용해서 로그인할꺼라, 이미 클립보드에 있던 내용을 a에 복사 해놓자.
pyperclip.copy(id)
# id변수의 값을 클립보드로 옮김
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
# 드라이버에서 컨트롤+V 효과를 냄 !
time.sleep(1)
# 봇인식 무서우니 1초정도 기다리기 ... !
## pw도 똑같음 !
bb = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "pw"))
)
bb.click()
pyperclip.copy(passwd)
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
time.sleep(1)
#복붙 끝났으니 아까 a에 저장했던 값 다시 클립보드로 고고
pyperclip.copy(a)
# 로그인 버튼 기다렸다가, 버튼 누르기
bb = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "log.login"))
)
bb.click()
로그인 성공 했다.
(실제 얼굴들이 나와있어서 가렸음)
근데 뭔가 밋밋하지 않나 ?
로그인을 했는데, 로그인이 된건지 확실히 알고 싶다.
어떻게 하면 알 수 있을까 ?!!>!
로그인을 하게되면? 로그아웃 버튼이 생긴다.
그럼 ? 로그아웃 버튼이 있는지 확인하고 있으면 성공 ! 없으면 실패 !
try:
bb = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.CLASS_NAME, "button_signout"))
)
except:
return 0
return 1
좋다. 로그아웃 버튼의 class name은 button_sighout이라서
이게 있는지 5초 까지 찾아본다.
5초가 지나도 없으면 에러가 나오니까 try구문으로 있는지 없는지 확인이 가능하다.
위 코드들을 전부 def login(): 한 뒤,
d = login()
if d == 1:
print('로그인 성공')
else:
print('로그인 실패')
완.벽
원래 내 블로그의 이름을 파싱해와서 지정된 게시물 작성 링크로 이동하려 했다.
블로그 홈에서 그 이름을 찾을 수 있다 생각했는데, 보이지가 않던 와중 ..
블로그 이름 찾을 필요없이 바로 글쓰기로 이동 가능한 링크가 있어서 그걸 사용하기로 했다.
driver.get('https://blog.naver.com/GoBlogWrite.naver')
driver.execute_script('document.querySelector("#container > div > aside > div > div:nth-child(1) > nav > a:nth-child(2)").click();')
드라이버에 스크립트를 실행해서 버튼을 눌러도 되지만, 그냥 링크 이동 하기로 했다.
(별 뜻 없음)
2편으로 넘어가보자.
.....블로그 글 쓰면서 코딩하려니 정신이 없다 ...................
requests편 보러가기 !!
'프로그램 개발일지' 카테고리의 다른 글
[Python] 파이썬 블루스택 제어하기 - 1 (2) | 2024.06.15 |
---|---|
[Python] 스마트 스토어 API 활용 네이버 커머스 API 1편 (2) | 2024.06.15 |
[Python] 셀레니움으로 접속 안 되는 사이트 우회 방법 (1) | 2024.06.14 |
[Python] 네이버 블로그 자동 포스팅 만들기 - 3 / openai api (0) | 2024.06.14 |
[Python] 네이버 블로그 자동 포스팅 만들기 - 2 (0) | 2024.06.14 |