개발일지 - 파이썬 크롤링

아침7시개발·2022년 4월 27일
0

개발일지

목록 보기
12/19

운영에서 알리고라는 문자메시지 라이브러리를 사용하고 있다.
알리고 문자메시지는 1달에 얼마 이런식이 아니고 한건당 몇 포인트씩 차감되는 방식이다.

얼마 전에 알리고 문자메시지 포인트가 부족해서 회원가입이 안된다는 cs가 들어왔다.
회사에서 결재를 받아서 매번 충전하는 방식이기 때문에 포인트가 부족하다는 사실을 알리는 메일이 필요하다는 팀장님의 판단이 있어서 개발하게 되었다.

현재 aws에서 서비스를 하고 있기 때문에 기본적으로 설치되어 있는 python2를 사용하라는 지시가 있었다.
사용하는 메소드에 있어서 python3과 큰 차이는 없었다.
이미 여러번 크롤링을 만들어 봤기 때문에 크게 어렵지는 않았다.

1. 크롬 브라우저 경로설정
from selenium import webdriver
driver = webdriver.Chrome(self.chromedriver_path)
크롬드라이버를 다운받아 각각 적용하여 사용할 때 주로 사용
크롬브라우저가 버전이 변경되면 다시 다운 받아야 된다.

2.웹 드라이버매니저 이용
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
버전 변경에 상관없이 현재 OS에 설치된 크롬브라우저를 사용

지금까지 python3으로 만들어 왔기 때문에 위의 2가지의 방법은 사용하지 않았다.

su - 루트
yum install pip
pip install selenium

cd /root/src/
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
yum localinstall google-chrome-stable_current_x86_64.rpm
google-chrome --version
## Google Chrome 101.0.4951.41
wget https://chromedriver.storage.googleapis.com/101.0.4951.15/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
mv chromedriver /usr/bin/chromedriver

## https://chromedriver.chromium.org/downloads

########## 사용자 ########## 
su - 사용자
cd /home/사용자/aligo_crawling
python aligo_point_alarm.py
## crontab 을 이용하여 아침 9시에 동작하도록 함.

기본으로 pip가 설치되어 있지 않으므로 yum으로 pip부터 설치한다.
aws에서 필요한 크롬과 크롬드라이버, 셀레니움을 설치를 해줘야 한다.
마지막으로 xftp로 py파일을 넣어주고 실행을 했다.

#-*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import time
import smtplib
from email.mime.text import MIMEText

url_login = 'https://smartsms.aligo.in/login.html'
url_point = 'https://smartsms.aligo.in/admin/api/info.html'
chromedriver_location = '/usr/bin/chromedriver'
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(chromedriver_location,options=chrome_options)
def login(driver):
    driver.get(url_login)
    id = '알리고 아이디'
    pwd = '알리고 비밀번호'
    elem_id = driver.find_element_by_id('id') 
    elem_id.send_keys(id)
    time.sleep(3)
    elem_pwd = driver.find_element_by_id('pwd')  
    elem_pwd.send_keys(pwd)
    time.sleep(3)
    elem_pwd.send_keys(Keys.ENTER)
    time.sleep(3)

try:
    smtp = smtplib.SMTP('smtp.gmail.com', 587)
    smtp.ehlo()   
    smtp.starttls()  
    sender = '이메일 보내는 사람'
    recipient = '이메일 받는 사람 1,이메일 받는 사람 2,이메일 받는 사람 3'
    mail_id = 'gmail 아이디'
    mail_pwd = 'gamil 비밀번호'
    title = 'aligo 문자서비스 잔액'
    count = 0
    while True :
        count += 1
        if count > 30:
            break
        time.sleep(3) 
        print(str(count) + '번째 로그인 중...')
        login_btn = login(driver)
        curr_url = driver.current_url
        if curr_url.__contains__('login.html') == False:
            break
      
    print('로그인 완료..')
    driver.get(url_point)
    
    time.sleep(3)
    elem_point = driver.find_element_by_id('headerRemainHeart')  
    print('포인트 조회..')
    print(elem_point.text)
    content_fin = str(elem_point.text)
    contents = title + ': ' + content_fin
    print('메일 전송 중..')
    smtp.login(mail_id, mail_pwd)
    msg = MIMEText(contents)
    msg['Subject'] = title # 2
    msg['From'] = sender # 2
    msg['To'] = recipient # 2
    smtp.sendmail(sender, msg['To'].split(','), msg.as_string()) # 4
    print('메일 전송 완료..')
    time.sleep(3)
finally:
    smtp.quit()
    driver.quit()
profile
쉬엄쉬엄하는 개발자

0개의 댓글