본문 바로가기
그냥 끄적끄적

인터파크 매크로 만들기 [3. 공연 스케쥴 선택하기 - 1]

by 강성주의 알고리즘 2023. 11. 30.

 

2023.11.29 - [분류 전체보기] - 인터파크 매크로 만들기. [1. 환경 구축]

2023.11.29 - [분류 전체보기] - 인터파크 매크로 만들기. [2. 로그인]

앞 글을 보고오셔야 이해가 잘 됩니다!

 

이번 포스팅에서는 인터파크에서 원하는 공연을 선택하고, 미리 입력한 날짜의 시간대의 스케줄을 선택하는 방법을 알아보겠습니다.

이전 포스팅까지 따라오셨다면 로그인이 되어있는 상태에서 인터파크 티켓의 홈 화면을 보고 있겠죠.

본 포스팅에서는 레베카를 예매하는 상황을 가정하고 진행해보겠습니다. 먼저 레베카 공연의 URL을 가져와서 해당 정보를 driver로 열어줍시다.

my_url = "https://tickets.interpark.com/goods/L0000062" # 레베카 공연 URL
driver.get(my_url)

해당 화면에서는 오른쪽 사이드의 관람일과 예매하기 버튼 정보가 필요합니다.

우선, 우리는 원하는 공연의 관람일과 회차를 미리 정해놔야 합니다. 저는 1월 13일의 7시 공연회차를 목표로 정했습니다.

이전에서 했던것과 동일하게 해당 관람일의 정보를 가져와 선택해야 합니다. 그러면 해당 정보의 날짜를 선택하기 위해 F12를 눌러 개발자 도구에 들어가 봅시다. 왼쪽 달력은 SideMain 하위에 있으며 관람일 선택은 datapicker 하위에 있는 것을 볼 수 있습니다.

또한, 선택한 관람일은 picked 라는 정보로 표기가 됩니다. 공연 페이지에 들어가면 초기 관람일 설정은 우리가 관람할 수 있는 가장 빠른 관람일에 picked 되어있습니다. 공연이 없는 날이나, 아직 공연 정보가 풀리지 않은 관람일에는 disabled라는 정보가 있네요.

 

 우리가 1월 공연을 선택하기 위해선 현재 달력이 보여주고있는 년 월 정보를 가져와서 월을 비교해야 합니다.

li의 data-view가 month current 인 부분의 text를 가져오면 될 것 같네요. 이 부분의 XPATH를 가져와서 아래와 같이 찾아주면 됩니다. XPATH를 가져오는 방법은 아래와 사진처럼 가져오시면 됩니다.

 

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

service = Service('C:/Users/seong/chromedriver.exe')
service.start()

driver = webdriver.Remote(service.service_url)

login_url = "https://ticket.interpark.com/Gate/TPLogin.asp"
driver.get(login_url)

iframes = driver.find_elements(By.TAG_NAME, "iframe")
driver.switch_to.frame(iframes[0])

time.sleep(0.2)

id_input = driver.find_element(By.CSS_SELECTOR, "#userId")
pw_input = driver.find_element(By.CSS_SELECTOR, "#userPwd")
id_input.send_keys("인터파크 티켓 아이디")
time.sleep(1)
pw_input.send_keys("인터파크 티켓 비밀번호")
button = driver.find_element(By.CSS_SELECTOR, "#btn_login")
button.click()

my_url = "https://tickets.interpark.com/goods/L0000062" # 레베카 공연 url

driver.get(my_url)
time.sleep(0.3)
current_date = driver.find_element(By.XPATH, "//*[@id='productSide']/div/div[1]/div[1]/div[2]/div/div/div/div/ul[1]/li[2]")
print(current_date.text)

time.sleep(3)
driver.quit()

get 함수 실행 후 딜레이를 어느 정도 주어야 엘리먼트를 잘 가져올 수 있습니다.

 

우리가 선택할 공연은 1월 공연이니 캘린더를 옆으로 한 번 옮겨야겠죠? 캘린더를 옮기기 위해 버튼 속성을 가져와 주고.

 

현재 캘린더가 보여주는 월과 비교하여 우리가 원하는 월의 달력을 보여줄 때까지 버튼을 누르면 됩니다.

해당 코드는 다음과 같습니다.

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

service = Service('C:/Users/seong/chromedriver.exe')
service.start()

driver = webdriver.Remote(service.service_url)

login_url = "https://ticket.interpark.com/Gate/TPLogin.asp"
driver.get(login_url)

iframes = driver.find_elements(By.TAG_NAME, "iframe")
driver.switch_to.frame(iframes[0])

time.sleep(0.2)

id_input = driver.find_element(By.CSS_SELECTOR, "#userId")
pw_input = driver.find_element(By.CSS_SELECTOR, "#userPwd")
id_input.send_keys("인터파크 아이디")
time.sleep(1)
pw_input.send_keys("인터파크 비밀번호")
button = driver.find_element(By.CSS_SELECTOR, "#btn_login")
button.click()

my_url = "https://tickets.interpark.com/goods/L0000062"

driver.get(my_url)
time.sleep(0.3)


want_month = 1

nxt_button = driver.find_element(By.XPATH, "//*[@id='productSide']/div/div[1]/div[1]/div[2]/div/div/div/div/ul[1]/li[3]")

while True:
    current_date = driver.find_element(By.XPATH,"//*[@id='productSide']/div/div[1]/div[1]/div[2]/div/div/div/div/ul[1]/li[2]")
    cur_month = int(current_date.text.split(' ')[1])
    if cur_month != want_month:
        nxt_button.click()
    else:
        break

time.sleep(3)
driver.quit()

 

위 코드를 실행하면 원하는 월에 대한 관람일 달력으로 자동으로 넘어간 결과를 볼 수 있습니다. currnet_data.text를 정수형으로 형변환을 해준 이유는 1월을 01월과 같이 표기한 곳에서는 문자열 비교를 '1'과 '01'을 수행하고 서로 다르다고 판단하기 때문에 정수형으로 바꿔주었습니다.

 

다음 포스팅에서는 원하는 일을 선택해 보도록 하겠습니다.

2023.11.30 - [그냥 끄적끄적] - 인터파크 매크로 만들기 [3. 공연 스케쥴 선택하기 - 2]

 

인터파크 매크로 만들기 [3. 공연 스케쥴 선택하기 - 2]

2023.11.29 - [분류 전체보기] - 인터파크 매크로 만들기. [1. 환경 구축] 2023.11.29 - [분류 전체보기] - 인터파크 매크로 만들기. [2. 로그인] 2023.11.30 - [그냥 끄적끄적] - 인터파크 매크로 만들기 [3. 공연

seongjuk.tistory.com

 

반응형