요즘 인터넷에 네이버페이 포인트 적립하는 글이 자주 눈에 띈다.
중복 링크도 가끔 있고, 바쁠 땐 잊기도 해서 자동으로 적립해주는 스크립트를 만들어봤다.
Python 개발자는 아니니 stackoverflow의 도움으로..
단, 네이버 로그인에 이중 인증이 설정되어 있으면 실행할 수 없다.
pip3 install selenium
pip3 install webdriver_manager
pip3 install pyperclip
pip3 install python-telegram-bot
pip3 install asyncio
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--single-process")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'ko,ko_KR'})
chrome_options.add_argument("--window-size=100,100")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.implicitly_wait(5)
driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com")
user_id = driver.find_element(By.ID,'id')
passwd = driver.find_element(By.ID,'pw')
pyperclip.copy(naver_id)
user_id.send_keys(Keys.COMMAND, 'v')
pyperclip.copy(naver_pw)
passwd.send_keys(Keys.COMMAND, 'v')
btn_login = driver.find_element(By.CSS_SELECTOR,'button.btn_login')
btn_login.click()
윈도우에선 Keys.COMMAND 대신 Keys.CONTROL로 변경한다.
여기선 클리앙 알뜰구매 게시판의 글 중 '네이버'가 포함된 글에서 링크를 추출한다.
driver.get("https://www.clien.net/service/board/jirum")
jirum_elements = driver.find_elements(By.CSS_SELECTOR,'div.list_title a[data-role=list-title-text]')
jirum_links = []
for element in jirum_elements:
title = element.text
if title.find("네이버") >= 0:
jirum_url = element.get_attribute('href')
jirum_links.append(jirum_url)
npay_links = []
for jirum_url in jirum_links:
driver.get(jirum_url)
pay_elements = driver.find_elements(By.CSS_SELECTOR,'.post_content a.url')
for link in pay_elements:
link_url = link.get_attribute('href')
npay_links.append(link_url)
for link_url in npay_links:
driver.get(link_url)
try:
WebDriverWait(driver, 5).until(EC.alert_is_present())
driver.switch_to.alert.accept()
print("alert accepted")
except TimeoutException:
print("no alert")
except WebDriverException as e:
print("load failed", e)
time.sleep(5)
포인트 적립 링크의 경우 alert가 뜨는 케이스도 있기 때문에 alert가 나타나는 경우에 accept 해주고, 웹페이지 진입 후 몇초 기다려야 적립되므로 5초동안 대기하도록 해준다.
driver.get("https://new-m.pay.naver.com/pointshistory/list")
points = driver.find_element(By.CSS_SELECTOR,'strong:has(span)')
points_text = points.text
print(points_text)
bot = telegram.Bot(telegram_token)
asyncio.run(bot.sendMessage(chat_id=telegram_chat_id, text="네이버페이 " + points_text))
#!/usr/bin/python
# -*- coding: utf-8 -*-
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import pyperclip
import time
import telegram
import asyncio
naver_id = "네이버 아이디"
naver_pw = "네이버 비밀번호"
telegram_token = "텔레그램 봇 토큰"
telegram_chat_id = "텔레그램 채팅 ID"
# 드라이버 다운로드 및 로딩
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--single-process")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'ko,ko_KR'})
chrome_options.add_argument("--window-size=100,100")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
driver.implicitly_wait(5)
# 네이버 로그인
driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com")
user_id = driver.find_element(By.ID,'id')
passwd = driver.find_element(By.ID,'pw')
pyperclip.copy(naver_id)
user_id.send_keys(Keys.COMMAND, 'v')
pyperclip.copy(naver_pw)
passwd.send_keys(Keys.COMMAND, 'v')
btn_login = driver.find_element(By.CSS_SELECTOR,'button.btn_login')
btn_login.click()
# 클리앙 게시판 조회
driver.get("https://www.clien.net/service/board/jirum")
jirum_elements = driver.find_elements(By.CSS_SELECTOR,'div.list_title a[data-role=list-title-text]')
jirum_links = []
for element in jirum_elements:
title = element.text
if title.find("네이버") >= 0:
jirum_url = element.get_attribute('href')
jirum_links.append(jirum_url)
npay_links = []
for jirum_url in jirum_links:
driver.get(jirum_url)
pay_elements = driver.find_elements(By.CSS_SELECTOR,'.post_content a.url')
for link in pay_elements:
link_url = link.get_attribute('href')
npay_links.append(link_url)
for link_url in npay_links:
driver.get(link_url)
print(link_url)
time.sleep(1)
try:
WebDriverWait(driver, 5).until(EC.alert_is_present())
driver.switch_to.alert.accept()
print("alert accepted")
except TimeoutException:
print("no alert")
except WebDriverException as e:
print("load failed", e)
time.sleep(5)
# 포인트 확인
driver.get("https://new-m.pay.naver.com/pointshistory/list")
points = driver.find_element(By.CSS_SELECTOR,'strong:has(span)')
points_text = points.text
print(points_text)
bot = telegram.Bot(telegram_token)
asyncio.run(bot.sendMessage(chat_id=telegram_chat_id, text="네이버페이 " + points_text))
driver.quit()
댓글 영역