본문 바로가기
개발/Python

[py] 네이버 블로그 좋아요 자동화 (ft. 셀레니움 actionchains)

by 코딩하는 갓디노 2022. 10. 26.

 

구현 내용

  • 1. 셀레니움 라이브러리의 웹드라이버 크롬 실행
  • 2. 네이버 자동 로그인
  • 3. 네이버 블로그로 이동 (3~5번 무한 반복)
  • 4. 최근 포스팅 클릭
  • 5. 좋아요 클릭

 

actionchains

  • 매크로 프로그램을 만들때 사용하는 pyautogui를 웹에서 작동할 수 있도록 물리적 기능을 지원하는 라이브러리
  • 특정사이트가 자동화나 크롤링을 사전에 막아서 element의 click이 작동하지 않는다면 actionchains를 이용하여 물리적으로 실행 
  • elements로 마우스 이동: ActionChains(driver).move_to_element(요소 변수)

 

주의 사항

실제 작동시에는 스팸 처리를 당하지 않기 위해 random 함수를 사용합니다.  

 

구현 코드

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.action_chains import ActionChains
from  selenium.webdriver.common.keys import Keys

import time
import pyperclip

chrome_options = Options() #브라우저 꺼짐 방지 
chrome_options.add_experimental_option("detach", True)
chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) #불필요한 에러 메세지 삭제

def login(driver) :
    id_form = driver.find_element(By.CSS_SELECTOR, '#id')
    pw_form = driver.find_element(By.CSS_SELECTOR, '#pw')
    id_form.click()
    pyperclip.copy('아이디')
    id_form.send_keys(Keys.COMMAND, 'v')
    time.sleep(1)
    pw_form.click()
    pyperclip.copy('비번')
    pw_form.send_keys(Keys.COMMAND, 'v')
    time.sleep(1)
    login_btn = driver.find_element(By.CSS_SELECTOR, '.btn_login')
    login_btn.click()

def work(driver):
    while True:
        driver.get('https://m.blog.naver.com/Recommendation.nhn')
        time.sleep(5)
        post = driver.find_elements(By.CSS_SELECTOR, '.postlist__LXY3R')[0]
        post.click()
        time.sleep(3)
        like_path = driver.find_element(By.XPATH, '//*[@id="body"]/div[10]/div/div[1]/div/div') #좋아요 태그 찾기
        like_btn = like_path.find_element(By.XPATH, '//*[@id="body"]/div[10]/div/div[1]/div/div/a') #좋아요 선택
        #  like_btn.click() #이 코드는 작동하지 않음(네이버 블로그가 막아놓음) => actionchains 함수로 해결
        actions = ActionChains(driver)
        time.sleep(5)
        actions.move_to_element(like_btn).click().perform()
        time.sleep(5)

def main() :
    service = Service(executable_path = ChromeDriverManager().install()) #크롬 드라이버 최신 버전 자동 설치 후 서비스 만들기
    driver = webdriver.Chrome(service = service, options = chrome_options)  
    driver.implicitly_wait(5)
    driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com") 
    time.sleep(3)
    login(driver)
    time.sleep(3)
    work(driver)

main()
반응형

댓글