2022. 3. 22. 11:08ㆍPython
파이썬으로 네이버 블로그 이웃 공감 (좋아요) 누르기
이전 포스팅에서는 파이썬으로 티스토리 공감 버튼을 눌러주는 자동화 프로그램을 만들어봤었다.
2022.03.16 - [Python] - [리원아빠] 파이썬으로 티스토리 공감버튼 (좋아요) 누르기
이번에 파이썬으로 네이버 블로그 이웃 공감 버튼을 눌러주는 프로그램을 만들어봤다.
필자는 네이버 블로그를 운영하지 않으므로 네이버 블로그를 운영하는 와이프 도움을 받았다.
네이버 블로그는 공감 버튼을 누르기 위해서 로그인이 필요하다.
이 부분이 티스토리와는 다른 부분으로 네이버 블로그는 로그인하는 과정이 필요하다.
변수에 네이버 아이디와 네이버 패스워드를 저장해놓고 네이버 로그인을 시도하면
위의 사진처럼 네이버 로그인 이중인증으로 (캡챠) 넘어가버린다.
처음엔 위와 같은 코드로 로그인 과정을 진행했던 것인데
네이버 이중인증으로 넘어가버리니 해결책이 필요했다.
클립보드를 이용해 네이버 로그인을 시도하는 방법으로 이 문제를 해결했다.
클립보드를 이용해 네이버 로그인을 하면
이중인증으로 넘어가지 않고 네이버 로그인이 된다.
이후 과정은 노가다라 할 수 있는 필요한 엘레먼트들을 따오는 과정들이다.
네이버 블로그 메인으로 가는 과정, 네이버 블로그 이웃을 찾아가는 과정,
다시 네이버 블로그 이웃을 하나하나 방문하는 과정 등
사람이라면 간단하게 클릭 몇번으로 가능하지만
네이버 블로그 이웃 공감 버튼 자동화를 위해서는 처음에 이런 수고가 필요하다.
네이버 블로그 이웃들을 방문하는 부분이다.
네이버 블로그 이웃들의 글은 수시로 갱신되므로 매번 새로 링크를 따와야하며
반복문 처리를 해 차례대로 이웃들의 블로그를 방문했다.
여기에서 두번째 문제가 발생했다.
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)
아이디와 패스워드만 변경하여 사용하면 된다.
그럼 끝.
'Python' 카테고리의 다른 글
[리원아빠] 파이썬 티스토리 자동 포스팅 프로그램 (23) | 2022.08.31 |
---|---|
[리원아빠] 파이썬 클라우드 개발 환경 만들기 (파이참 + 구글 드라이브) (6) | 2022.04.28 |
[리원아빠] 파이썬으로 티스토리 공감버튼 (좋아요) 누르기 (18) | 2022.03.16 |
[리원아빠] 생성날짜, 수정날짜로 파일이름 일괄 변경하기 (파이썬) (20) | 2022.03.14 |
[리원아빠] 카카오톡으로 뽐뿌 키워드 알림 받기 (feat. 파이썬) (13) | 2022.03.08 |