본문 바로가기
Developer/Python

[파이썬 셀레니움] 프라이탁 신제품을 실시간으로 확인하기2

by Doony 2020. 9. 4.

지난 포스팅에 이어, 프라이탁 신제품을 실시간으로 확인하기 2탄을 시작하겠습니다.
지난 글은 여기에서 확인하실 수 있습니다.


파이썬 Schedule 스케쥴러 활용하기

보통 서버에서 Task나 Scheduler 같은 기능을 제공합니다. 특정 시간 주기로 어떤 프로그램 혹은 알고리즘을 실행하는 방식입니다. 파이썬에서도 유사한 기능을 하는 라이브러리가 있습니다.

  • pip install schedule

간단한 사용법은 다음과 같습니다.

1
2
3
4
5
6
7
import schedule
 
schedule.every(10).minutes.do(YOUR_FUNCTION)
 
while True:
    schedule.run_pending()
    time.sleep(1)
cs

위 코드는 10분에 한번씩 특정 함수가 실행되게 하고 있습니다. minutes 대신 seconds처럼 다른 시간 단위로 바꾸면 됩니다.


프라이탁 실시간 재고 확인!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from selenium import webdriver
import schedule
import time
 
print('10분마다 프라이탁 홈페이지를 갱신하며, 신제품 여부를 확인합니다.\n')
driver = webdriver.Chrome('./chromedriver')
 
preLinks = []
newLinks = []
 
 
def writeComment():
 
    global preLinks
    global newLinks
    url = 'https://hyongdoc.tistory.com/413'
    driver.get(url)
 
    driver.find_elements_by_css_selector('div.field > input')[0].send_keys("MYID")
    driver.find_elements_by_css_selector('div.field > input')[1].send_keys("PW")
    driver.find_elements_by_css_selector('textarea')[0].send_keys("신제품이 등록되었습니다.")
    driver.find_elements_by_css_selector('div.submit button.btn')[0].click()
    preLinks = newLinks
 
    print(time.strftime('%c', time.localtime(time.time())) + ' ::: 신제품이 나와 댓글을 작성했습니다.')
 
 
def getFreitag():
    print(time.strftime('%c', time.localtime(time.time())) + ' ::: 프라이탁에서 새로 불러옵니다.')
    global newLinks
    global preLinks
    url = 'https://www.freitag.ch/en/f11'
    driver.get(url)
 
    for item in driver.find_elements_by_css_selector('ul.products-list > li > a > img'):
        newLinks.append([item.get_attribute('src')])
 
    newItems = [x for x in newLinks if x not in preLinks]
 
 
    if len(newItems) != 0:
        writeComment()
    else:
        print("신제품이 없습니다.")
 
# 첨에 일단 실행
getFreitag()
 
# 10분에 한번씩 실행
schedule.every(10).minutes.do(getFreitag)
 
while True:
    schedule.run_pending()
    time.sleep(1)
cs

실행결과...


코드는 크게 2가지 함수로 되어있습니다.

  • getFreitag: 프라이탁 홈페이지를 읽어옵니다. 모든 이미지 주소를 리스트로 저장하고, 갱신될 때마다 새로 불러옵니다. 이 때 기존에 갖고 있던 주소 외 새로운 주소가 등장하면, 새로운 이미지가 추가되었다는 것이니 writeComment를 실행합니다.
  • writeComment: 티스토리 블로그에 접속, 댓글을 작성합니다.

티스토리 댓글을 등록하면, 제 폰으로 알람이 오기 때문에 즉시 프라이탁 홈페이지로 접속하면 됩니다.
성공하면 후기로 구매인증 글로 다시 뵙겠습니다.

댓글