Completion over Perfection

파이썬으로 네이버페이 클릭적립 매일 자동으로 하기 본문

파이썬 (Python)

파이썬으로 네이버페이 클릭적립 매일 자동으로 하기

난차차 2021. 6. 29. 23:49
반응형

 

파이썬으로 네이버페이 클릭적립 매일 자동으로 하기

 

요새 사이버폐지 줍기라고 불리는 네이버페이 클릭적립을 많이들 하실건데요,

적립에는 2가지 종류가 있습니다.

 

단발성으로 나오는 40원 (또는 그 이상)의 클릭적립 이벤트가 있고, (나이키 등과 같은)

매일매일 적립할 수 있는 1원짜리 4개의 적립 이벤트가 있습니다. 

 

저는 매일매일 적립할 수 있는 1원짜리 4개 적립 이벤트를 파이썬으로 자동화시켜 볼게요. 

 

1원 적립 이벤트 4개는 URL이 고정되어 있습니다. 

(오늘 적립 안하신 분들은 아래 링크 들어가셔서 적립하고 오세요!)

1번 : https://ofw.adison.co/u/naverpay/ads/55162
2번 : https://ofw.adison.co/u/naverpay/ads/66420
3번 : https://ofw.adison.co/u/naverpay/ads/67823
4번 : https://ofw.adison.co/u/naverpay/ads/72557

 

이 URL들을 돌아가면서 셀레니움 Selenium으로 브라우저를 자동으로 띄우고,

클릭까지 해 보도록 하겠습니다. 

 

프로젝트 준비물

  - 파이썬 Python 3.9
  - 파이참 Pycharm
  - Edge 브라우저 (91버전)
  - Edge 웹드라이버 webdriver (91버전)

 

 


1. 파이참을 실행하고 필요한 라이브러리들을 import 해준다.

 

from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import pyperclip

 

셀레니움을 제외하고도 다른것들도 많이 불러왔는데요, 

밑에서 진행하면서 설명드릴게요. 

 


2. URL들을 리스트에 담아준다.

 

url_list = ["https://ofw.adison.co/u/naverpay/ads/55162",
            "https://ofw.adison.co/u/naverpay/ads/66420",
            "https://ofw.adison.co/u/naverpay/ads/67823",
            "https://ofw.adison.co/u/naverpay/ads/72557"]

 

url들을 굳이 리스트에 담아주는 이유는

나중에 for 문을 돌면서 url들을 불러오고,

이를 통해 자동으로 브라우저에 띄우고 클릭하게 해주기 위해서입니다.

 


 

3. Selenium 셀레니움 사용을 위한 최초 세팅을 해준다.

 

epath = "본인의 Edge webdriver 경로를 지정해준다."
driver = webdriver.Edge(epath)

 

Edge webdriver를 driver 변수로 받아주고, 브라우저창을 자동으로 띄울 수 있게 준비해줍니다.

epath 변수에는 본인의 Edge webdriver 경로를 입력해주세요. 

  - 예시 : epath = "C:/Users/Downloads/edgedriver_win64/msedgedriver.exe"

 


 

4. 네이버 로그인 정보를 login 변수 안에 넣어준다. 

 

login = {
    "id" : "본인의 ID",
    "pw" : "본인의 password"
}

 

나중에 자동으로 입력하기 위해 미리 아이디와 패스워드를 변수에 저장해둡니다.

 


 

다음단계를 넘어가기 전에 설명드릴 것이 있습니다.

네이버의 경우, 웹드라이버 webdriver 로 자동 로그인을 하려고 하면

캡차 captcha 라는 프로그램을 실행시켜 버립니다. 

 

아래 코드와 화면을 보시죠.

 

driver.get("https://nid.naver.com/nidlogin.login")

driver.find_element_by_xpath('//*[@id="id"]').send_keys('본인의 ID')
driver.find_element_by_xpath('//*[@id="pw"]').send_keys('본인의 비밀번호')
driver.find_element_by_xpath('//*[@id="log.login"]').click()

 

위의 코드로 네이버 로그인을 실행하게 되면..

 

 

 

위와 같이 캡차가 뜨게 됩니다. 

이러면 더 이상 로그인을 진행할 수가 없게 됩니다. 

 

그래서 구글링을 좀 해보니, 

역시 능력자분들은 우회하는 방법을 다 찾아놓으셨더군요. 

 

Pyperclip이라는 라이브러리를 통해서만 로그인을 해야 

캡챠에 걸리지 않는다고 하네요. 

 

아래 코드로 실행해보면

아주 잘 로그인되는것을 알 수 있습니다. 

 


5. Pyperclip 라이브러리로 네이버에 로그인 해준다. 

 

먼저 함수로 Pyperclip으로 입력할 ID와 PW를 만들어주고, 

def clipboard_input(user_xpath, user_input):
    temp_user_input = pyperclip.paste()  # 사용자 클립보드를 따로 저장

    pyperclip.copy(user_input)
    driver.find_element_by_xpath(user_xpath).click()
    ActionChains(driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()

    pyperclip.copy(temp_user_input)  # 사용자 클립보드에 저장 된 내용을 다시 가져 옴
    time.sleep(1)

 

Pyperclip 함수를 이용하여 네이버 로그인을 해 줄 또다른 함수를 만들어 주겠습니다. 

 

def naver_pay_click(url):
    driver.get(url)
    try:
        clipboard_input('//*[@id="id"]', login.get("id"))
        clipboard_input('//*[@id="pw"]', login.get("pw"))
        driver.find_element_by_xpath('//*[@id="log.login"]').click()
    except:
        pass
    time.sleep(2)
    driver.find_element_by_xpath('//*[@id="app"]/div[1]/div/div/div/button').click()
    time.sleep(2)

 

위에 try 명령어를 써준 이유는, 

한번 로그인을 해주면 두번째 url 부터는 또다시 로그인을 해줄 필요가 없기 때문입니다. 

(로그인은 한번만 필요하기 때문입니다.)

 

만약 try 명령을 쓰지 않는다면 로그인을 다시 시도하도록 짜여져 있기 때문에

try 함수로 에러가 날 경우를 대비해 줍니다. 

 


6. for문으로 4개의 url에 접속하여 모두 자동으로 클릭하도록 마무리 해준다.  

for i in range(4):
    url = url_list[i]
    naver_pay_click(url)

driver.quit()

 

이렇게 하면 url 4개를 모두 돌면서 자동으로 적립하게 됩니다. 

 

전체코드도 같이 보여드릴게요. 

 

from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
import pyperclip

url_list = ["https://ofw.adison.co/u/naverpay/ads/55162",
            "https://ofw.adison.co/u/naverpay/ads/66420",
            "https://ofw.adison.co/u/naverpay/ads/67823",
            "https://ofw.adison.co/u/naverpay/ads/72557"]

epath = "본인의 엣지 웹드라이버 경로 입력"
driver = webdriver.Edge(epath)

login = {
    "id" : "본인의 네이버 아이디 입력",
    "pw" : "본인의 네이버 비밀번호 입력"
}

def clipboard_input(user_xpath, user_input):
    temp_user_input = pyperclip.paste()  # 사용자 클립보드를 따로 저장

    pyperclip.copy(user_input)
    driver.find_element_by_xpath(user_xpath).click()
    ActionChains(driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()

    pyperclip.copy(temp_user_input)  # 사용자 클립보드에 저장 된 내용을 다시 가져 옴
    time.sleep(1)

def naver_pay_click(url):
    driver.get(url)
    try:
        clipboard_input('//*[@id="id"]', login.get("id"))
        clipboard_input('//*[@id="pw"]', login.get("pw"))
        driver.find_element_by_xpath('//*[@id="log.login"]').click()
    except:
        pass
    time.sleep(2)
    driver.find_element_by_xpath('//*[@id="app"]/div[1]/div/div/div/button').click()
    time.sleep(2)

for i in range(4):
    url = url_list[i]
    naver_pay_click(url)

driver.quit()




 

 

 

 

반응형
Comments