본문 바로가기
Information

[Python] 네이버 블로그 자동 포스팅 프로그램 만들기 - 2. 제목, 본문 작성

by 정티그로 2021. 8. 5.

네이버 블로그 자동으로 포스팅해주는 프로그램을 파이썬(Python)으로 짜 보겠다. 만약 이전 글을 읽지 않았다면, 기본 세팅에 대한 내용을 모를 수 있으므로 참고하기 바란다. 

 

 

[Python] 네이버 블로그 자동 포스팅 프로그램 만들기 - 1. 기본 세팅 및 설명

네이버 블로그를 이용해 쿠팡 파트너스 진행을 했었다. 글 내용은 매우 간단하고 단순하다 보니, 빠르게 글을 쓸 수 있었다. 그러나 이것을 손으로 직접 하려고 하니, 눈도 아프고, 생각보다 매

kissi-pro.tistory.com

 

Chrome_Driver_Path는 여러분의 크롬 드라이버 경로이며, BLOG_URL은 자동 포스팅을 진행할 블로그의 주소이다. 

ex) BLOG_URL : 'https://blog.naver.com/여러분의ID' 형식일 것이다.

 

제일 처음에 해야 할 것은 내 블로그로 이동한 후, '글쓰기'버튼을 누르는 것이다. 글쓰기 버튼의 XPath를 그대로 가져올 경우, 셀레니움 동작이 먹히지 않는다. 이유는 iframe으로 감싸여 있기 때문이다.

따라서 우리는 바로 글쓰기 버튼을 누르는 것이 아니라, 브라우저의 프레임을 바꿔줄 것이다.

 

import autoit
import time
from pandas.core.frame import DataFrame
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
import requests
import re
from bs4 import BeautifulSoup
from urllib.parse import quote
import pandas as pd
import datetime
import os

Chrome_Driver_Path = "크롬 브라우저 경로"
BLOG_URL  = "블로그 주소"

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_driver = Chrome_Driver_Path # Your Chrome Driver path
browser = webdriver.Chrome(chrome_driver, options=chrome_options)
action = ActionChains(browser)

browser.get(BLOG_URL)
browser.switch_to.frame("mainFrame")
time.sleep(1)
browser.find_element_by_xpath('//*[@id="post-admin"]/a[1]').click()
time.sleep(3)

browser.get(BLOG_URL) : BLOG_URL 주소로 이동한다.

browser.switch_to.frame("mainFrame") : 'mainFrame'이라는 이름을 갖고 있는 frame으로 변경한다.

 

time.sleep을 이용해 중간중간 시간을 주었다. 코드 중간에 시간을 주지 않을 경우, 웹페이지를 불러오기 전에 행동을 하므로 해당 XPath가 없다는 오류가 발생할 수 있다. 인터넷이 느린 환경이라면, 조금 넉넉하게 주는 것을 추천한다. 

 

크롬 개발자 도구를 켜서 '글쓰기'버튼의 XPath를 확인해보면, '//*[@id="post-admin"]/a[1]'이라는 것을 알 수 있다. 

 

browser.find_element_by_xpath('//*[@id="post-admin"]/a[1]').click()

위 코드는 '글쓰기'를 클릭하라는 코드이다. find_element_by_xpath는 앞으로 굉장히 많이 사용할 것이므로 기억해두는 것이 좋다.

 

작성한 코드를 그대로 실행하면 다음과 같이 글쓰기 화면이 나온다. 이제부터 본격적으로 글을 작성해보도록 하겠다.

 

아까와 같이 XPath가 무엇인지 확인하고, find_element_by_xpath를 이용해 접근하면 될 것 같으나, 실제로 해보면 해당 XPath를 찾지 못한다! 이것 때문에 엄청 고생을 했었는데, 방법을 찾아냈다.

 

우선 안 되는 이유부터 먼저 살펴보도록 하겠다. '제목'을 누르기 위해 제목의 XPath를 가져와봤다.

 

 

browser.find_element_by_xpath('//*[@id="SE-3adf2355-ba83-4775-8a32-5ea9d5615991"]').click()

위와 같이 작성을 하면 원래 '제목'부분을 클릭해야 한다. 하지만 코드 실행을 해보면, 'no such element: Unable to locate element'라는 에러가 발생한다. 

 

에러가 발생하는 원인은 무엇일까? 그것은 바로 제목의 id 값이 새로운 글쓰기를 할 때마다 변하기 때문이다. 직접 해보면 알겠지만, 새로운 글쓰기를 하면, 제목의 id 값이 아까와는 다른 id값이라는 것을 금방 알 수 있다.

 

네이버에서 자동 포스팅을 막기 위해 일부러 그런 것인지까지는 모르겠으나, id값이 매번 변하기 때문에, 이 방법을 이용해 클릭을 하는 것은 불가능하다. 그렇다면 어떤 방법을 사용해야 할까?

 

다음과 같이 contains를 이용하면 제목을 클릭하는 것이 가능하다.

browser.find_element_by_xpath('//span[contains(text(),"제목")]').click()

영문으로 작성된 글을 봐서 정확하지는 않지만, 모자란 영어 실력(?)으로 해석해본 결과 위 코드의 의미는 span태그로 감싸져 있고, '제목'이라는 텍스트를 포함하고 있는 XPath를 클릭하라는 뜻이다. '제목'이라는 텍스트는 다른 값으로 변하지 않기 때문에, 이를 이용하면 어렵지 않게 제목에 접근할 수 있다.

 

action.send_keys('Kissi-Pro 티스토리 방문을 환영합니다.').perform()

이어서 다음과 같이 ActionChains을 이용해 원하는 값을 전달해보았다. 

 

'네이버 블로그로 이동 - 글쓰기 클릭 - 제목 클릭 - send_keys를 이용해 값 전달'까지 되는 것을 확인할 수 있다. 쿠팡 파트너스를 할 때에는 send_keys로 상품명을 변수로 전달하면 된다.

 

같은 방법으로 본문을 클릭 후 원하는 값을 전달하면 된다. 글쓴이는 아래와 같이 코드를 작성했다.

browser.find_element_by_xpath('//span[contains(text(),"본문에")]').click()
time.sleep(1)
action = ActionChains(browser)
time.sleep(1)
action.send_keys('이곳은 본문입니다.').perform()
time.sleep(1)

action = ActionChains(browser)을 한번 더 해준 이유는 이 코드를 작성하지 않으면, 이전 값이 그대로 딸려오는 경우가 발생한다. ActionChains을 초기화를 한다고 생각하면 될 것 같다. 

 

코드를 실행해보면, 원하는 대로 클릭 및 값 전달하는 모습을 볼 수 있다. 이렇게 해서 파이썬 셀레니움을 이용해 블로그로 이동 후 글쓰기 클릭, 제목 및 본문 작성을 하는데까지 성공했다.

 

2021.08.09 - [파이썬] - [Python] 네이버 블로그 자동 포스팅 프로그램 만들기 - 3. 사진 올리기

 

[Python] 네이버 블로그 자동 포스팅 프로그램 만들기 - 3. 사진 올리기

이전 글에서 기본 세팅 및 어떤 식으로 구동할지에 대한 설명과 글쓰기를 누른 후 제목과 본문 작성까지 해보았다. 이전에 작성한 코드에서 추가로 작성할 예정이니, 이전 코드를 모른다면, 아

kissi-pro.tistory.com