본문 바로가기
카테고리 없음

Python 네이버 카페 자동 로그인 및 게시글 작성

by 퍼포먼스마케팅코더 2023. 3. 1.
반응형

Python을 이용한 네이버 카페 자동 로그인 및 게시글 작성

안녕하세요, 이번에는 파이썬으로 네이버 카페 자동 로그인 및 글쓰기에 대해 알아보겠습니다. 초보자도 이해하기 쉽게 단계별로 설명드리겠습니다.

네이버 카페에 자동 로그인 후 원하는 게시글 작성방법

  1. 크롬 애플리케이션 구동 먼저, 파이썬으로 크롬 애플리케이션을 구동시킵니다. 만약 구동이 되지 않는다면 크롬 드라이버로 설정을 변경해줍니다.
  2. 네이버 로그인 파이퍼 클립에서 복사한 아이디와 비밀번호를 입력하고 로그인 버튼을 자동으로 클릭합니다.
  3. 네이버 카페 접속 네이버 카페는 모바일 기준으로 접속해야 합니다. PC 기준으로 접속하면 아이프레임 때문에 파이썬 셀리늄이 구동되지 않습니다. 그러므로 모바일 주소로 네이버 카페에 접속합니다.
  4. 글쓰기 네이버 카페에 접속하면 글쓰기 버튼을 찾아 클릭합니다. 이제 파이썬으로 자유롭게 글을 작성할 수 있습니다.

이렇게 파이썬으로 네이버 카페를 자동으로 로그인하고 글쓰기를 할 수 있습니다. 파이썬으로 자동화하는 방법을 익히면 많은 일을 자동으로 처리할 수 있으니 꼭 익혀두시길 추천합니다.

# 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()
반응형

댓글