반응형
Python을 이용한 네이버 카페 자동 로그인 및 게시글 작성
안녕하세요, 이번에는 파이썬으로 네이버 카페 자동 로그인 및 글쓰기에 대해 알아보겠습니다. 초보자도 이해하기 쉽게 단계별로 설명드리겠습니다.
네이버 카페에 자동 로그인 후 원하는 게시글 작성방법
- 크롬 애플리케이션 구동 먼저, 파이썬으로 크롬 애플리케이션을 구동시킵니다. 만약 구동이 되지 않는다면 크롬 드라이버로 설정을 변경해줍니다.
- 네이버 로그인 파이퍼 클립에서 복사한 아이디와 비밀번호를 입력하고 로그인 버튼을 자동으로 클릭합니다.
- 네이버 카페 접속 네이버 카페는 모바일 기준으로 접속해야 합니다. PC 기준으로 접속하면 아이프레임 때문에 파이썬 셀리늄이 구동되지 않습니다. 그러므로 모바일 주소로 네이버 카페에 접속합니다.
- 글쓰기 네이버 카페에 접속하면 글쓰기 버튼을 찾아 클릭합니다. 이제 파이썬으로 자유롭게 글을 작성할 수 있습니다.
이렇게 파이썬으로 네이버 카페를 자동으로 로그인하고 글쓰기를 할 수 있습니다. 파이썬으로 자동화하는 방법을 익히면 많은 일을 자동으로 처리할 수 있으니 꼭 익혀두시길 추천합니다.
# import gspread
from oauth2client.service_account import ServiceAccountCredentials
import os
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
from googleapiclient.http import MediaFileUpload
from __future__ import print_function
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import warnings
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import NoSuchElementException,StaleElementReferenceException
from bs4 import BeautifulSoup
import time
import pyperclip
import requests
import datetime
import pymssql
import pandas as pd
from pandas.core.frame import DataFrame
import matplotlib.pyplot as plt
import chromedriver_autoinstaller
import subprocess
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.alert import Alert
import chromedriver_autoinstaller
import subprocess
import shutil
import xlrd
import openpyxl
import pygsheets
import csv
import re
import webbrowser
import os
import sys
import urllib.request
import json
from pandas.io.json import json_normalize
import hashlib
import hmac
import base64
import numpy as np
import autoit #autoit는 반드시 autoit 프로그램이 깔려있어야됨
import pyautogui
from PIL import ImageGrab
import glob
warnings.filterwarnings('ignore')
#try:
# shutil.rmtree(r"c:\chrometemp") #쿠키 / 캐쉬파일 삭제
#except FileNotFoundError:
# pass
subprocess.Popen(r'C:\Program Files\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\chrometemp"') # 디버거 크롬 구동
option = Options()
option.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_ver = chromedriver_autoinstaller.get_chrome_version().split('.')[0]
try:
driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=option)
except:
chromedriver_autoinstaller.install(True)
driver = webdriver.Chrome(f'./{chrome_ver}/chromedriver.exe', options=option)
driver.maximize_window() #최대창
time.sleep(3)
driver.implicitly_wait(10)
action = ActionChains(driver) #액션지정
#네이버 이동
url = 'https://www.naver.com'
driver.get(url)
time.sleep(5)
driver.implicitly_wait(10)
driver.find_element_by_class_name('link_login').click()
time.sleep(1)
driver.implicitly_wait(10)
#id, pw 입력할 곳 찾기
tag_id = driver.find_element_by_name('id')
tag_pw = driver.find_element_by_name('pw')
driver.implicitly_wait(10)
#id 입력
tag_id.click()
pyperclip.copy('id')
tag_id.send_keys(Keys.CONTROL, 'v')
time.sleep(2)
driver.implicitly_wait(10)
#pw 입력
tag_pw.click()
pyperclip.copy('pw')
tag_pw.send_keys(Keys.CONTROL, 'v')
time.sleep(2)
driver.implicitly_wait(10)
#로그인 버튼 클릭
login_btn = driver.find_element_by_id('log.login')
login_btn.click()
time.sleep(1)
driver.implicitly_wait(10)
#등록안함 클릭
try :
driver.find_element_by_xpath('//*[@id="new.dontsave"]').click() #등록안함 클릭
except :
pass
time.sleep(1)
driver.implicitly_wait(10)
#네이버 카페 주소 (모바일) 이동
health_naver_posting = pd.read_excel('C:/Users/user/Desktop/able/able/blog_xx.xlsx')
for i in range(1, 16) : #15개씩 #2/28 1,16
###### 네이버 카페 이동
naver_cafe_url = 'https://m.cafe.naver.com/xx' #카페 이동
driver.get(naver_cafe_url)
time.sleep(1)
driver.implicitly_wait(10)
action = ActionChains(driver) #액션지정
try : #사이트 떠나기 엔터키 누르기*(사이트 나가기 창이 뜰시 기준)
# alert 창의 메시지를 확인하고 싶습니다.
alert = driver.switch_to.alert
message = alert.text
print("Alert shows following message: "+ message )
time.sleep(1)
# 메시지를 확인했으니 창을 닫습니다.
alert = driver.switch_to.alert
alert.accept() #에러 받아들이기
time.sleep(1)
driver.implicitly_wait(10)
driver.get(url)
time.sleep(1)
driver.send_keys(Keys.ENTER) #사이트 떠나기 엔터키 누르기
driver.implicitly_wait(10)
except :
print("no alert")
try :
# alert 창의 메시지를 확인하고 싶습니다.
alert = driver.switch_to.alert
message = alert.text
print("Alert shows following message: "+ message )
time.sleep(2)
# 메시지를 확인했으니 창을 닫습니다.
alert = driver.switch_to.alert
alert.dismiss() #무시하기
time.sleep(1)
driver.implicitly_wait(10)
except :
print("no alert")
time.sleep(1)
driver.implicitly_wait(10)
naver_cafe_url = 'https://m.cafe.naver.com/xx' #카페 이동
driver.get(naver_cafe_url)
time.sleep(1)
driver.implicitly_wait(10)
action = ActionChains(driver) #액션지정
###### 네이버 카페 글쓰기 클릭
driver.find_element_by_css_selector('#app > div > div > div.location_bar.section > div > div > div > a > button').click() #카페글쓰기 버튼 클릭
time.sleep(2)
driver.implicitly_wait(10)
driver.find_element_by_xpath("//div[contains(text(),'게시판을')]").click() #게시판 선택
time.sleep(2)
driver.implicitly_wait(10)
#driver.find_element_by_xpath("//div[contains(text(),'자유게시판')]").click() #게시판 선택
pyautogui.click(910, 572, button='left', clicks=1, interval = 1 ) #자유게시판 클릭
time.sleep(1)
driver.implicitly_wait(10)
######## 제목, 본문 컨텐츠 정리
title_directory = health_naver_posting.loc[i]['title_2'] #제목
img_file_directory = health_naver_posting.loc[i]['img_directory'] #이미지
txt_file_directory = health_naver_posting.loc[i]['txt_directory'] #텍스트
img_dir = img_file_directory #이미지
f = open(txt_file_directory, 'r', encoding='utf-8') #메모장 파일열기
f_2 = open(txt_file_directory, 'r', encoding='utf-8') #메모장 파일열기
content_list = f.readlines() #본문
#blogger_title = content_list[0] #제목만
blogger_title = title_directory #제목만
blogger_title_2 = blogger_title.replace("\ufeff", "") #제목 필터링
content_desc = f_2.read() #본문
tistory_title = str(blogger_title_2) #제목
############ 네이버 카페 제목 입력
title = str(tistory_title) #제목
tag_title = driver.find_element_by_xpath("//textarea[@placeholder='제목']") #제목 태그
tag_title.click()
driver.implicitly_wait(10)
action = ActionChains(driver) #초기화
tag_title.send_keys(title) #제목 입력
time.sleep(1)
driver.implicitly_wait(10)
#글꼴설정
tag_font = driver.find_element_by_xpath("//li[@class='se-toolbar-item se-toolbar-item-text']") #폰트
tag_font.click() #폰트 클릭
time.sleep(1)
driver.implicitly_wait(10)
driver.find_element_by_xpath("//li[@class='se-toolbar-item se-toolbar-item-align']").click() #가운데 정렬 클릭
time.sleep(1)
driver.implicitly_wait(10)
driver.find_element_by_xpath("//li[@class='se-toolbar-item se-toolbar-item-font-family']").click() #기본서체 클릭
time.sleep(1)
driver.implicitly_wait(10)
driver.find_element_by_xpath("//span[@class='se-toolbar-select-bar-label-text se-ff-nanummaruburi']").click() #마루부리 서체 클릭
time.sleep(1)
driver.implicitly_wait(10)
#소개말
content_1 = "안녕하세요?" +'\n'
content_1 += '\n' +'\n'
#content_1 += str(product_title) + '\n' + '\n'
#content_1 += str(product_image_2) + '\n' + '\n'
#content_1 += str(model) + '\n'
#content_1 += str(price) + '\n'
#content_1 += str(info) + '\n' + '\n'
#content_1 += "이상으로 오늘 여러분들께" + str(keyword) +"의 제품 소개해 드린 다우후어였습니다." +'\n'
#content_1 += "오늘도 해피 쇼핑되세요!" + '\n' + '\n'
#content_1 += "*쿠팡파트너스 제휴활동으로 일정 수수료를 받을수 있습니다."
action = ActionChains(driver) #초기화
action.send_keys(content_1).perform() #컨텐츠 입력
time.sleep(1)
driver.implicitly_wait(10)
#### 본문 내용 넣기
content_3_detail = str(content_desc) + '\n' + '\n'
action = ActionChains(driver) #초기화
action.send_keys(content_3_detail).perform() #컨텐츠 입력
time.sleep(1)
driver.implicitly_wait(10)
#### 이미지 넣기
file_dir = health_naver_posting.loc[i]['directory'] + '/'
img_lists = glob.glob(str(file_dir)+'submit_img_*.jpg') #리스트화
for n in range(1, len(img_lists)):
pic_dir = img_lists[n] #해당 이미지 가져오기 (첫번째꺼는 제외)
pic_dir = pic_dir.replace("\\", "/") #디렉토리 수정
tag_picture = driver.find_element_by_xpath("//li[@class='se-toolbar-item se-toolbar-item-image']") #이미지 버튼 주소
tag_picture.click() #링크 버튼 클릭
time.sleep(2)
handle = "[CLASS:#32770; TITLE:열기]" #Basic Window info 값 handle 변수에 저장
autoit.win_wait_active("열기", 3) #이름이 '열기'인 창이 나올 때까지 3초간 대기
#img_path = "C:/Users/user/Desktop/test/image/test_"+str(keyword)+".jpg" #이미지경로
img_path = str(pic_dir) #이미지경로 변경
img_path_2 = img_path.replace('/', '\\') # 백슬래시는 두번 써야됨
autoit.control_send(handle, "Edit1", img_path_2) #사진 클릭시 나오는 윈도우 창에서 파일이름(N)에 이미지 경로값 전달
time.sleep(1)
autoit.control_click(handle, "Button1") #사진 클릭시 나오는 윈도우 창에서 Button1 클릭
time.sleep(1)
driver.find_element_by_xpath('//*[@id="app"]/div/div/div[2]/div[1]/header/div/div[2]/a[2]').click() #임시등록 클릭
time.sleep(2)
driver.implicitly_wait(10)
driver.close()
driver.quit()
반응형
댓글