본문 바로가기
Developer/Python

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

by Doony 2020. 9. 3.

원래부터 알고 있었지만, 최근들어 뽐뿌가 강하게 오고 있는 녀석이 있습니다. 바로 프라이탁이지요. 아는 사람들은 모두 아는 브랜드인데, 제품 하나하나가 모두 다르다는 매력적인 특징이 있습니다. 문제는 예쁜 디자인들은 공식 홈페이지에 나오자마자 사람들이 사가버린다는 점입니다.


그래서 문득 생각이 들더군요. 파이썬을 이용해서 주기적으로 페이지를 불러오고, 신제품이 떴을 때 해당 신제품의 이미지를 제 이메일이나 카톡과 같은 알림으로 전달할 수 있다면 어떨까요?

가장 베스트는 별도의 서버를 만들고, 서버에서 스케쥴러를 활용하여 자동주문까지 해주는 방식이겠습니다만... 너무 일이 커지므로 간단하게 알람만 주는 식으로 진행해보고자 합니다.

알람을 주는 방식

티스토리 앱을 활용합니다. 즉, 현재 쓰고 있는 이 글에 댓글을 활용하여, 모바일 폰으로 알람이 전달되도록 합니다. 티스토리 앱은 댓글이 작성되면 알람이 전달되니까요.


파이썬 셀레니움 가즈아

이제 프라이탁 홈페이지를 스크래핑해서, 신제품이 나오는지 확인하는 방식을 서술해보겠습니다.
방식은 이렇습니다.

위 사진처럼 프라이탁 공홈 에서 라씨 제품들을 볼 수 있습니다. 각 아이템마다 고유의 id를 저장할 수 있습니다.
파이썬 셀레니움을 통해 해당 id값들을 모두 불러와 저장하고, 특정 시간 주기로 계속 코드를 돌리면서 못보던 id가 새로 나타났을 경우, 해당 id값과 img 정보를 댓글에 작성해주는 코드를 작성해보겠습니다.

BeautifulSoup와 같은 단순 스크랩핑 라이브러리도 사용해봤는데, 프라이탁 홈페이지가 일부러 로딩 시간을 두고 있어서 쓰기가 좀 난해하더군요. 그래서 시간도 조절할 수 있는 셀레니움으로 진행했습니다.

웹 읽어들이기

request 라이브러리를 사용해서 웹을 읽은 뒤, 상품의 img 태그를 읽고, 태그 안의 src, 즉 이미지 링크를 저장합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from selenium import webdriver
 
driver = webdriver.Chrome('./chromedriver')
 
url = 'https://www.freitag.ch/en/f11'
driver.get(url)
 
# 쿠키 노땡큐
# driver.find_element_by_css_selector('a#dismiss-cookies-cta').click()
 
# 상품 전체보기 클릭
# driver.find_element_by_css_selector('i.mdi.mdi-chevron-down').click()
 
 
preLinks = []
newLinks = []
for item in driver.find_elements_by_css_selector('ul.products-list > li > a > img'):
    newLinks.append([item.get_attribute('src')])
 
cs

주석처리된 쿠키와, 전체보기 버튼은 굳이 없어도 다 불러와지길래 삭제했습니다. 보시면 아시겠지만, 프라이탁 페이지에서 각 태그 순서대로 최종 img를 찾게 해놨고, 그 이미지들이 곧 상품 이미지가 됩니다.

get_attribute를 통해 특정 태그에 있는 텍스트를 불러오며, 이를 newLinks라는 리스트에 모두 저장합니다.

티스토리에 댓글남기기

셀레늄을 이용해 제 블로그의 코드에 맞는 HTML 스타일을 구했습니다.

1
2
3
4
5
6
7
8
9
 
url = 'https://hyongdoc.tistory.com/413'
driver.get(url)
 
driver.find_elements_by_css_selector('div.field > input')[0].send_keys("IDIDID")
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()
 
cs

ID, PW, 내용을 입력한 뒤 등록 버튼까지 클릭하는 코드입니다. 즉, 위 코드가 실행되면 댓글이 입력되며, 티스토리 앱에 의해 저는 폰으로 알람을 받을 수 있게 됩니다.
원래는 댓글에 신제품 이미지까지 보여주려고 했는데, 티스토리 블로그 댓글이 태그 삽입이 안되는 것 같네요.


스케쥴러를 활용해서 완성하는 포스팅은 다음 포스팅에서...

댓글