본문 바로가기
PYTHON

카카오뷰 매크로 프로그램 사지마세요 만드세요

by 규우울 2022. 1. 3.
반응형

카카오 뷰 매크로 프로그램?

이 글을 보시는 분들은 매크로를 아시나요?? 보통 어릴 때 매크로라고 하면 게임을 하면서

자동 사냥을 생각하시는 분들이 많을 겁니다. 그 프로그램도 매크로의 한 종류가 맞습니다.

매크로는 정확히 여러 개의 명령을 묶어서 하나의 명령으로 만드는 것입니다. 반복 작업을 할 때 매우 유용하게 쓰이는 프로그램이죠. 하지만 아까 예로 든 게임에서 쓰는 매크로나, 제가 쓰는 카카오 뷰 자동 포스팅 매크로는 거의 불법입니다.  저도 매크로 만드는 법은 알지만 실제로 카카오 뷰에서는 사용하지 않습니다.

여러분들도 사용하지 마세요 정지먹습니다. 그럼에도 제가 이렇게 글을 쓰는 이유는 이 글을 보시는 분들은 저런 프로그램을 사지 마시고 만드는 법만 알아두고 회사에서나, 혹은 다른 반복적인 일을 할 때 사용하시라고 글을 올리는 겁니다. 만약 이 프로그램을 진짜 사용하신다면 정지당할 확률이 높습니다.

 

프로그램 제작 언어는?

저는 python이라는 언어를 사용해서 매크로 프로그램을 만들어 보겠습니다.

파이썬에는 selenium, bs4 등의 크롤링에 특화된 라이브러리들이 있습니다. 이 라이브러리들의 사용 방법들만 알아도

거의 왠만한 웹 자동화 프로그램을 만들 수 있습니다.

이 글을 보면서 프로그램을 만드시는 분들은 파이썬의 기본적인 문법과 라이브러리의 대해서 아셔야

만드실 수 있습니다. 라이브러리의 설치 방법은 따로 설명드리지 않겠습니다.

(구글링을 하면 쉽게 나옵니다)

파이썬이란?

파이썬은 귀도 반 로섬이라는 개발자가 만든 언어입니다. C언어를 기반으로 만든 언어고 하이레벨 언어가 필요하다는 것을 느껴서 만든 언어라고 합니다. 참고로 Python은 그리스 신화에 나오는 뱀 이름으로 유명하지만 그 신화를 참고한 것이 아니라 좋아하는 코미디 프로그램의 이름에서 가져온 것이라고 합니다.

 

초보자도 배울 수 있을까요?

파이썬은 요즘 가장 핫한 언어 중 하나입니다. 그 이유는 언어 자체가 간결하고 쉽기 때문입니다.

표현 구조 자체가 사람이 대화하는 형식이고, 무료로 누구나 사용 가능합니다.

이 글을 보는데 아직 코딩 공부를 안 하셨다면 파이썬을 당장 배우셔야 합니다.

코딩과 관련이 없는 직종 이어도, 코딩을 배우고 안 배우고의 차이는 하늘과 땅 차이 같습니다.

이 글을 쓰는 저도 코딩과는 전혀 관련 없는 직종이지만, 코딩을 배움으로써 업무 효율이 많이 늘었고

실생활에서 많이 사용하고 있습니다.

프로그램 코딩

이제 코딩을 시작해보겠습니다. 프로그램의 순서는

데이터 긁어오기(네이버 뉴스 랭킹 10위까지를 긁어오겠습니다.) -> 카카오 뷰 홈페이지 로그인 -> 업로드

이렇게 진행하겠습니다.

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import requests

먼저 필요한 라이브러리들을 선언해줬습니다.

selenium, time, bs4, requests입니다. 크롤링을 할 때 가장 많이 사용하는 라이브러리들입니다.

여기서 간단하게 라이브러리들의 역할을 설명하겠습니다.

selenium

셀레니움은 웹 자동화 테스트를 지원하는 라이브러리입니다. 원래 크롤링을 위한 기술은 아니고

웹 페이지가 만들어지면 테스트를 진행하기 위해 사용했던 것인데 요즘은 크롤링을 할 때 자주 쓰이는 라이브러리입니다.

time

time은 시간을 다루는 라이브러리입니다. 이 프로그램에서는 sleep라는 기능을 사용할 건데

어디서든 자주 쓰이는 라이브러리입니다.

beautifulsoup4

html의 정보를 가져와주는 라이브러리입니다. 

requests

requests는 http 관련된 작업을 편리하게 해주는 모듈입니다. beautifulsoup와 같이 많이 사용됩니다.

 

driver = webdriver.Chrome()
driver.get('https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=100')
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')

첫 번째 줄은 driver이라는 변수에 크롬 드라이버를 넣어줬습니다.

(참고로 자신이 사용하는 크롬 버전에 맞는 크롬드라이 버가 만드는 폴더 안에 같이 있어야 프로그램이 실행됩니다)

두 번째 줄은 정치뉴스 홈페이지로 접속을 한 것입니다.

세 번째 줄은 지금 열려있는 페이지 소스를 req라는 변수에 담아줬고 4번째 줄에서 페이지 소스를 parsing 해줬습니다.

지금 여기서 print(soup)를 하게 되면 해당 html의 코드들이 나옵니다.

그렇다면 이제는 우리가 원하는 뉴스 10개만 뽑아내면 됩니다.

하지만 지금 페이지에는 헤드라인 뉴스와 옆에 언론사별 많이 본 뉴스가 있으니 헤드라인에서 3개를 뽑고, 언론사별 많이 본 뉴스에서 7개를 뽑겠습니다.

네이버 뉴스 정치탭

Enter_date = []
politics_element =  soup.find_all('a', {'class': 'cluster_text_headline nclicks(cls_pol.clsart)'})

for i in range(0,3): 
    
    politics_zip = str(politics_element[i])
    politics_zip_replace = politics_zip.replace('amp;','')
    politics_zip_url = str(politics_zip_replace[63:150])
    Enter_date.append(politics_zip_url)
    sleep(0.5)

 

먼저 Enter_date라는 변수를 만든 후에 빈 리스트를 만들어줬고, 메인 뉴스 탭의 a태그 class가

"cluster_text_headline nclicks(cls_pol.clsart"라는 class라는 것을 확인 후에 soup.find_all을 해줬습니다.

여기서 처음에 저는 soup.find를 했었는데 제일 처음 것만 find가 되어서 구글링을 통해 find_all이라는 명령어를 찾고, 모든 cluster_text_headline nclicks(cls_pol.clsart라는 클래스를 가진 a태그를 찾아줬습니다.

그 후에 for문을 통해 아까 만들어 놔둔 Enter_date라는 빈 리스트에 담아줬습니다.

그다음 사이드에 있는 뉴스 7개도 똑같은 방법으로 list에 넣어준 후에 카카오 뷰에 들어가겠습니다.

driver.get('https://accounts.kakao.com/login/creators?continue=https%3A%2F%2Fcreators.kakao.com%3A443%2Fkakao%2Fauth')
sleep(0.5)
element = driver.find_element_by_xpath('//*[@id="id_email_2"]')
element.send_keys(id)
sleep(0.5)
element = driver.find_element_by_xpath('//*[@id="id_password_3"]')
element.send_keys(pw)
sleep(0.5)
driver.find_element_by_xpath('//*[@id="login-form"]/fieldset/div[8]/button[1]').click()
sleep(10)

카카오 뷰 홈페이지에 들어간 후에 id와 pw를 적고 로그인 버튼을 클릭해줍니다.

여기서 하나 문제가 발생하였는데 로그인을 한 후에는 크롬 웹 드라이버로 들어가면 계속 인증을 받아야 했습니다.

그래서 저는 sleep(10)을 줬고 그 10초 동안 인증번호를 받아서 로그인을 했습니다.

driver.find_element_by_xpath('//*[@id="mainContent"]/ul/li/a').click()
sleep(1)
driver.find_element_by_xpath('//*[@id="mainContent"]/div/div[1]/div[2]/div/a').click()
sleep(0.5)
driver.find_element_by_xpath('//*[@id="mainContent"]/div[2]/div/div[2]/div[2]/ul/li[2]/a').click()# 링크 직접입력 클릭!
sleep(0.5)
for rink_input in range(0,10):
    element = driver.find_element_by_xpath('//*[@id="mainContent"]/div[2]/div/div[2]/div[3]/form/div[1]/div/input')
    element.send_keys(Enter_date[rink_input])
    sleep(1)
    try:
        button = driver.find_element_by_xpath('//*[@id="mainContent"]/div[2]/div/div[2]/div[2]/ul/li[3]/div/button').click()
        sleep(1.5)
        driver.find_element_by_xpath('/html/body/div[1]/div[2]/main/section/div/article/div[2]/div/div[2]/div[3]/form/div[1]/div/div/button[2]').click()
        sleep(2)
        driver.find_element_by_xpath('//*[@id="mainContent"]/div[2]/div/div[2]/div[3]/form/div[2]/ul/li/div[3]/button').click()
        sleep(3)
        driver.find_element_by_xpath('/html/body/div[1]/div[2]/main/section/div/article/div[2]/div/div[2]/div[3]/form/div[1]/div/div/button[1]/span').click()
        sleep(1)
    except:
        driver.find_element_by_xpath('/html/body/div[1]/div[2]/main/section/div/article/div[2]/div/div[2]/div[3]/form/div[1]/div/div/button[2]').click()
        sleep(2)
        driver.find_element_by_xpath('//*[@id="mainContent"]/div[2]/div/div[2]/div[3]/form/div[2]/ul/li/div[3]/button').click()
        sleep(3)
        driver.find_element_by_xpath('/html/body/div[1]/div[2]/main/section/div/article/div[2]/div/div[2]/div[3]/form/div[1]/div/div/button[1]/span').click()
        sleep(1)

마지막 코드는 한 번에 넣었습니다.  전부 클릭을 하는 작업들이고 하나씩 주소를 넣어가는 과정입니다.

중간에 try와 except가 있는데 안내 창이 중간에 있어서 링크 업로드 버튼이 안 눌려서 저렇게 에러를 잡아주는 코드를 넣었습니다.

코드는 여기서 끝입니다. 기초적인 것들은 설명을 안 하고 그냥 넘어갔는데 하나하나 다 설명을 하게 되면 글이 너무 길어져서 하지 않았습니다. 필요한 부분만 가져다가 쓰시고 모르는 것들은 구글링을 추천드립니다.

사용하면 안 되는 이유

제가 위에 써놓은 코드들을 진짜 카카오 뷰 업로드에 쓰시면 안 됩니다. 물론 작동을 하는 코드이지만

하나의 예시로 제가 쓴 것뿐입니다. 크롤링 자체가 불법은 아니지만, 저렇게 뉴스 데이터를 막 가져다 쓰는 것은 남의 데이터를 훔치는 것이기 때문에 불법적인 요소가 될 수 있습니다. 실제로 대형 플랫폼끼리 이것 때문에 재판까지 간다고 합니다.(물론 이 경우에는 수백만 개의 정보를 크롤링을 했겠죠)

그리고 이렇게 업로드를 했다가 카카오 뷰 정지를 당하신 경우를 몇 번 봤습니다. 정지당하고 싶지 않으시면 사용하지 마세요 이상 포스팅을 마치겠습니다.

반응형

댓글