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

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

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

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

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

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

 

저번 포스팅에 이어서 원하는 관람일을 선택하여 예매하기 버튼까지 눌러보겠습니다. 이전 포스팅에서 1월 13일 7시 공연을 선택하는 시나리오를 가정하고 진행하였습니다.

13일에 해당하는 요소의 속성을 보면 text 위치에 13이 적혀있습니다. 이 값을 이용해서 해당 엘리먼트를 클릭해 보도록 합시다.

want_day = 13
find_day = driver.find_element(By.XPATH, "//li[text()='"+str(want_day)+"']")
find_day.click()

우리가 원하는 일은 13일이고, li의 텍스트가 "13"인 엘리먼트를 찾아서 find_day라는 변수에 대입하겠다. 그리고 find_day를 클릭해라!라는 코드가 위의 3줄 코드입니다.

이전에 작업한 코드에 해당 부분을 삽입해서 실행시켜보도록 하죠.

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

my_interpark_id = "내 인터파크 아이디"
my_interpark_pw = "내 인터파크 비밀번호"

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(my_interpark_id)
time.sleep(1)
pw_input.send_keys(my_interpark_pw)
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
want_day = 13

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()
        time.sleep(0.3)
    else:
        time.sleep(0.3)
        break

find_day = driver.find_element(By.XPATH, "//li[text()='"+str(want_day)+"']")
find_day.click()

time.sleep(3)
driver.quit()

 

 

그러면 이제 공연이 1회 (2시) 공연인지 2회 (7시) 공연인지 선택하고 예매하기 버튼을 누르기만 하면 됩니다.

우리는 2회 공연을 티케팅하기로 하였으니 해당 요소를 받아와야 합니다. 근데 element 요소를 보니 영,,, 어떤 정보를 가져와야 할지 모르겠네요.

셀레니움에 find_elements 함수는 여러 개 엘리먼트를 가져올 수 있습니다. 그러면 우리는 이 함수를 사용해서 timeTableItem 아이템을 모두 가져오면, 1회와 2회 엘리먼트를 모두 가져올 수 있고 그중 두 번째 요소를 선택하면 되겠구나 알 수 있습니다.

 

공연 순서를 선택하고 예매하기 버튼까지 클릭하는 아래 코드를 이전 코드에 추가해서 실행해 봅시다.

want_turn = 2
turn_list = driver.find_elements(By.CLASS_NAME, "timeTableItem")
turn_list[want_turn - 1].click()

go_button = driver.find_element(By.CSS_SELECTOR, "a.sideBtn.is-primary")
go_button.click()

 

 

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

my_interpark_id = "내 아이디"
my_interpark_pw = "내 비밀번호"

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(my_interpark_id)
time.sleep(1)
pw_input.send_keys(my_interpark_pw)
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
want_day = 13

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()
        time.sleep(0.3)
    else:
        time.sleep(0.3)
        break

find_day = driver.find_element(By.XPATH, "//li[text()='"+str(want_day)+"']")
find_day.click()

want_turn = 2
turn_list = driver.find_elements(By.CLASS_NAME, "timeTableItem")
turn_list[want_turn - 1].click()

go_button = driver.find_element(By.CSS_SELECTOR, "a.sideBtn.is-primary")
go_button.click()

time.sleep(3)
driver.quit()

 

다음 포스팅에서는 좌석을 선택하고 결제 창까지 넘어가는 마지막 단계에 대한 포스팅을 진행하도록 하겠습니다.

2023.12.01 - [그냥 끄적끄적] - 인터파크 매크로 만들기 [4. 좌석 선점하기 - 1]

 

인터파크 매크로 만들기 [4. 좌석 선점하기 - 1]

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

seongjuk.tistory.com

 

반응형