자주 이용하는 브랜드 메뉴가 있는 경우 정가보다 싸게 구매할 수 있는 중고 판매 기프티콘 앱을 사용합니다. (기프티스타)
최대 10% 이상 할인된 금액으로 구매할 수 있어 종종 항목들을 체크하는 경우가 있는데 이부분을 자동화로 구현해보면 재밌을 거 같아서 구현해보았습니다.
자주 사용하는 카테고리인 커피, 치킨/피자, 패스트푸드 항목을 선택하여 베스트상품 10개 목록을 추출하는 코드를 작성하였습니다.
우선 웹으로 계속 이용하기 위해 배너를 닫는 코드를 구현한 후 해당 카테고리로 이동할 수 있게 find_elements > class_name 코드를 이용하였습니다.
카테고리 항목 이동 제외하고는 모든 코드가 동일하기 때문에 함수를 사용하여 구현하였습니다. (카테고리 번호만 입력값으로 구분)
def giftList(listnum):
driver.get('https://app.giftistar.net/home-best')
time.sleep(5)
# 웹으로 이용하기 위해 버튼 클릭
driver.find_element(By.CLASS_NAME, 'bottom-text').click()
time.sleep(3)
# 원하는 카테고리 항목으로 이동
driver.find_elements(By.CLASS_NAME, 'category-wrapper')[listnum].click()
time.sleep(3)
10개 목록을 확인하기 위해 해당 메뉴들을 확인할 수 있게 스크롤 코드가 필요하였습니다.
모바일 웹 환경 기반이어서 그런지 다른 스크롤 코드로는 동작하지 않아 여러가지 방법을 사용하다가 move_to_element 코드로 스크롤을 내릴 수 있어서 해당 코드를 사용하여 구현하였습니다.
해당 스크롤한 위치 데이터만 추출할 수 있는걸로 확인되어 중간 중간 스크롤한 후 데이터를 콘솔로 보여주는 방식을 사용하였습니다.
(해당 내용은 엑셀 저장까지는 필요하지 않은듯 하여 구현을 제외하였습니다.)
action = ActionChains(driver)
action.move_to_element(brand_list[3]).perform()
for i in range(0, 3):
sale_price = price_list[i].text.split(' ')
print(i + 1, brand_list[i].text, name_list[i].text, origin_list[i].text, sale_price[3], percent_list[i].text)
전체 코드입니다. 해당 코드 실행시 각 카테고리별 인기 기프티콘 10개 항목 결과를 콘솔에서 확인할 수 있습니다.
모웹 기반도 일부 제한이 있는듯 하지만 자동화로 구현이 되는점을 확인할 수 있는 좋은 경험이었습니다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import time
from selenium.webdriver import ActionChains
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
def giftList(listnum):
driver.get('https://app.giftistar.net/home-best')
time.sleep(5)
# 웹으로 이용하기 위해 버튼 클릭
driver.find_element(By.CLASS_NAME, 'bottom-text').click()
time.sleep(3)
# 원하는 카테고리 항목으로 이동
driver.find_elements(By.CLASS_NAME, 'category-wrapper')[listnum].click()
time.sleep(3)
# 필요한 항목들 추출
brand_list = driver.find_elements(By.CLASS_NAME, 'brand')
name_list = driver.find_elements(By.CLASS_NAME, 'menu-name')
origin_list = driver.find_elements(By.CLASS_NAME, 'origin-price')
price_list = driver.find_elements(By.CLASS_NAME, 'price')
percent_list = driver.find_elements(By.CLASS_NAME, 'percent')
time.sleep(2)
action = ActionChains(driver)
action.move_to_element(brand_list[3]).perform()
for i in range(0, 3):
sale_price = price_list[i].text.split(' ')
print(i + 1, brand_list[i].text, name_list[i].text, origin_list[i].text, sale_price[3], percent_list[i].text)
action.move_to_element(brand_list[6]).perform()
for i in range(3, 6):
sale_price = price_list[i].text.split(' ')
print(i + 1, brand_list[i].text, name_list[i].text, origin_list[i].text, sale_price[3], percent_list[i].text)
action.move_to_element(brand_list[8]).perform()
for i in range(6, 8):
sale_price = price_list[i].text.split(' ')
print(i + 1, brand_list[i].text, name_list[i].text, origin_list[i].text, sale_price[3], percent_list[i].text)
action.move_to_element(price_list[9]).perform()
for i in range(8, 10):
sale_price = price_list[i].text.split(' ')
print(i + 1, brand_list[i].text, name_list[i].text, origin_list[i].text, sale_price[3], percent_list[i].text)
print('------------ 커피/음료 -----------')
giftList(1)
print('------------ 치킨/피자 -----------')
giftList(5)
print('------------ 패스트푸드 -----------')
giftList(14)
driver.close()
'자동화 > Selenium' 카테고리의 다른 글
밴드웹에서 밴드 글을 자동으로 써보기 (1) | 2024.02.03 |
---|---|
지역 맛집 리스트 자동화로 추출해서 확인하기 (with 카카오맵) (2) | 2024.02.03 |
AWS 인스턴스 환경 세팅 절차 Selenium 자동화로 구현하기 (0) | 2024.02.02 |
Selenium 텍스트 입력창 지우는 방법들 (Clear, Keys..) (1) | 2024.02.02 |
Selenium으로 밴드웹 자동 로그인 해보기 (0) | 2024.02.02 |