[리원아빠] 파이썬으로 네이버 이웃 공감 버튼 누르기

2022. 3. 22. 11:08Python

반응형

파이썬으로 네이버 블로그 이웃 공감 (좋아요) 누르기




이전 포스팅에서는 파이썬으로 티스토리 공감 버튼을 눌러주는 자동화 프로그램을 만들어봤었다.

 

2022.03.16 - [Python] - [리원아빠] 파이썬으로 티스토리 공감버튼 (좋아요) 누르기

 

[리원아빠] 파이썬으로 티스토리 공감버튼 (좋아요) 누르기

파이썬으로 티스토리 공감버튼 (좋아요) 자동 눌러주기 티스토리를 운영하다 보면 신경쓰고 싶지 않아도 신경쓰이는게 방문자수와 공감수이다. 양질의 포스팅을 하게 되면 자연스럽게 올라가

liwonfather.tistory.com

이번에 파이썬으로 네이버 블로그 이웃 공감 버튼을 눌러주는 프로그램을 만들어봤다.

필자는 네이버 블로그를 운영하지 않으므로 네이버 블로그를 운영하는 와이프 도움을 받았다.




네이버 블로그는 공감 버튼을 누르기 위해서 로그인이 필요하다.

이 부분이 티스토리와는 다른 부분으로 네이버 블로그는 로그인하는 과정이 필요하다.

변수에 네이버 아이디와 네이버 패스워드를 저장해놓고 네이버 로그인을 시도하면

위의 사진처럼 네이버 로그인 이중인증으로 (캡챠) 넘어가버린다.



처음엔 위와 같은 코드로 로그인 과정을 진행했던 것인데

네이버 이중인증으로 넘어가버리니 해결책이 필요했다.

클립보드를 이용해 네이버 로그인을 시도하는 방법으로 이 문제를 해결했다.

 

 

 


클립보드를 이용해 네이버 로그인을 하면 

이중인증으로 넘어가지 않고 네이버 로그인이 된다.

이후 과정은 노가다라 할 수 있는 필요한 엘레먼트들을 따오는 과정들이다.




네이버 블로그 메인으로 가는 과정, 네이버 블로그 이웃을 찾아가는 과정,

다시 네이버 블로그 이웃을 하나하나 방문하는 과정 등

사람이라면 간단하게 클릭 몇번으로 가능하지만

네이버 블로그 이웃 공감 버튼 자동화를 위해서는 처음에 이런 수고가 필요하다.



네이버 블로그 이웃들을 방문하는 부분이다.

네이버 블로그 이웃들의 글은 수시로 갱신되므로 매번 새로 링크를 따와야하며

반복문 처리를 해 차례대로 이웃들의 블로그를 방문했다.

여기에서 두번째 문제가 발생했다.


selenium driver 객체에서 beautifulsoup 객체로 전환하는 방법이였는데

해결책을 찾다가 단 한줄의 코드로 문제를 해결 할 수 있었다.

html = driver.page_source()

html 객체로 전환하고 네이버 블로그 이웃들의 링크를 따 올 수 있었다.



다음엔 네이버 블로그 이웃의 좋아요를 누르는 부분으로 두가지 케이스를 고려해야 했다.

• 이미  좋아요 버튼을 눌렀을 경우
• 좋아요 버튼이 없는 경우

하지만 처음에는 네이버 블로그 이웃들의  좋아요 버튼 상태를 전혀 체크를 할 수 없었는데

블로그 이웃의 좋아요 버튼 엘레먼트가 로드도 되기전에 

블로그 이웃의 좋아요 버튼 상태를 체크하려고 했기 때문이다.

이 부분은 아주 간단하게 time.sleep 함수를 호출하여 해결했지만

나 같은 초보에게는 전혀 생각치도 못 한 장애물이였고

이 문제를 해결하기 위해 가장 많은 시간을 소비했다.



네이버 블로그 이웃 좋아요 버튼 자동화를 위해서는

팝업 경고창이 뜨는 경우도 해결해야 한다. 

 

팝업 경고창의 경우 이미 네이버 블로그 이웃신청이 진행중인 상태일 때 발생하는데

이부분 역시 구글신의 도움을 받아 팝업 경고창을 객체로 인지해 처리했다.



정리해 보면 네이버 블로그 이웃 좋아요 버튼 자동 누르기 프로그램은 순서도는 아래와 같다.

• 네이버 로그인
• 네이버 블로그로 이동
• 네이버 블로그 이웃글 확인
• 네이버 블로그 이웃 게시글 방문
• 네이버 블로그 이웃 게시글 좋아요 버튼

 


와이프를 위해 만들었지만 만들고 나서는 내가 더 뿌듯했던

네이버 블로그 이웃 좋아요 버튼 자동 누르기 프로그램.

전체 소스를 첨부한다.

import time
import pyperclip
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert
from webdriver_manager.chrome import ChromeDriverManager


id = ''   #네이버 ID
pw = '' #네이버 패스워드
site_url = 'https://nid.naver.com/nidlogin.login?svctype=262144&url=http://undefined/aside/'    #네이버 모바일 로그인 URL

#크롬 실행
def exec_chrom():
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
    driver.maximize_window()
    return driver


#로그인
def login(driver):
    driver.get(site_url)
    pyperclip.copy(id)  # id를 클립보드에 복사
    driver.find_element(by='name', value='id').send_keys(Keys.CONTROL + 'v')  # id 입력창에 보냄
    pyperclip.copy(pw)  # 패스워드를 클립보드에 복사
    driver.find_element(by='name', value='pw').send_keys(Keys.CONTROL + 'v')  # 패스워드를 입력창에 보냄
    driver.find_element(by='xpath', value='//*[@id="log.login"]').click()  # 로그인 버튼 클릭
    time.sleep(0.5)  # 로그인 되는 시간을 위해 슬립
    driver.find_element(by='xpath', value='//*[@id="HOME_SHORTCUT"]/ul/li[7]/a/div/picture/img').click()  # 블로그 아이콘 클릭


#블로그 링크따기
def get_blog(driver):
    for i in range(0, 30, 1):  # 반복 횟수로 불러올 게시글량 조절 가능
        driver.find_element(by='tag name', value='body').send_keys(Keys.PAGE_DOWN)
        time.sleep(0.5)
    html = driver.page_source  # 링크를 따와야 하므로 게시글이 많이 불러진 상태에서 html 객체를 생성
    soup = BeautifulSoup(html, 'html.parser')
    link_list = soup.select('.thumb_area__IeDdQ > a')   #링크 추출
    return link_list


#포스팅별 방문하여 좋아요 클릭
def click_like(driver, link_list):
    like_cnt = 0  # 좋아요 버튼 누른 횟수 저장 변수

    #추출된 링크 수 만큼 방문하여 좋아요 버튼 클릭
    for i in range(len(link_list)):
        site = (link_list[i]['href'])
        driver.get(site)
        time.sleep(0.5)
        try:
            is_like = driver.find_element(by='xpath', value='//*[@id="body"]/div[10]/div/div[1]/div/div/a').get_attribute('aria-pressed')   #좋아요 버튼 상태 확인
            #print(is_like)
        except Exception:   #간혹 공감 버튼 자체가 없는 게시글이 존재함
            print('공감 버튼 없음')
            continue
        if is_like == 'false':  #좋아요 버튼 상태가 안눌러져있는 상태일 경우에만 좋아요 버튼 클릭
            like_cnt += 1   #좋아요 횟수 1증가
            driver.find_element(by='xpath', value='//*[@id="body"]/div[10]/div/div[1]/div/div/a/span').click()  #하트 클릭
            time.sleep(0.5)
        try:
            time.sleep(1)
            alert = Alert(driver)   #팝업창으로 메시지 뜰 경우를 대비
            alert.accept()
        except Exception:
            continue
    return like_cnt


#크롬 닫기
def close(driver, link_list, like_cnt):
    print('총 {}개의 게시글 중 {}개의 게시글에 좋아요 버튼을 눌렀습니다.'.format(len(link_list), like_cnt))
    time.sleep(3)
    driver.close()


#메인
if __name__ == '__main__':
    driver = exec_chrom()
    login(driver)
    link_list = get_blog(driver)
    like_cnt = click_like(driver, link_list)
    close(driver, link_list, like_cnt)

 

아이디와 패스워드만 변경하여 사용하면 된다.


그럼 끝.

반응형