본문 바로가기
개발기록/python

[python] Selenium 활용 예스24 티켓예매 매크로 만들기

by spectrum20 2024. 5. 28.
반응형

Selenium 활용 Yes24 티켓 예매 매크로 만들기

(*selenium 연습용으로 사용할 것)
 
 

1. 패키지 설치

pip install selenium
 
 

2. 모듈 import

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select
import time

 
 

3. 웹 드라이버 설정

 
웹드라이버를 설정해준 뒤, yes24 티켓예매 페이지를 받아온다

# 브라우저 꺼짐 방지 옵션
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)


driver = webdriver.Chrome(options=chrome_options)
driver.set_window_size(1900, 1000)
yse24_rul = 'http://ticket.yes24.com/'


# 웹페이지가 로드될 때까지 2초를 대기
driver.implicitly_wait(time_to_wait=2)
driver.get(url=yse24_rul)

 

yes24 티켓예매 페이지는 스크롤을 아래로 내려줘야 로그인 버튼이 생성된다

# 스크롤 내리기
driver.find_element(By.TAG_NAME,'body').send_keys(Keys.PAGE_DOWN)

 
 

4. 로그인

# 로그인
driver.find_element(By.XPATH,'//*[@id="consiceLogin"]').click()

userId = driver.find_element(By.ID, 'SMemberID')
userId.send_keys('아이디')
userPwd = driver.find_element(By.ID, "SMemberPassword")
userPwd.send_keys('비밀번호')
userPwd.send_keys(Keys.ENTER)

 
 

5. 티켓 예매 페이지 이동

# 티켓 사이트 이동
driver.get('http://ticket.yes24.com/Special/49580')
driver.find_element(By.XPATH,'//*[@id="mainForm"]/div[9]/div/div[4]/a[4]').click()

 
 
 

6. 관람일/회차 선택

# 날짜 선택
driver.find_element(By.CLASS_NAME,'select').click()
driver.find_element(By.XPATH,'//*[@id="btnSeatSelect"]').click()

 
 
7. 좌석선택

아이프레임 이동 후, 구역선택

# 구역, 좌석 선택하기
driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@id="divFlash"]/iframe'))

driver.find_element(By.XPATH,'//*[@id="area5"]').click()
driver.find_element(By.XPATH,'//*[@id="divSeatArray"]/div[string-length(@title)>0]').click()

# 좌석선택 완료
driver.find_element(By.XPATH,'//*[@id="form1"]/div[3]/div[2]/div/div[2]/p[2]/a/img').click()

 
좌석선택 화면에서 개발자모드(F12)를 열어 요소를 살펴보면, 선택되지 않은 빈 좌석은 title 속성을 가지고있다
따라서, div 요소 중 title 속성의 길이가 0이상인 요소를 찾아서 빈 좌석을 선택해준다

 
 

8. 결제하기

# 할인/쿠폰
driver.switch_to.default_content()
driver.find_element(By.XPATH,'//*[@id="StepCtrlBtn03"]/a[2]/img').click()

# 수령방법
time.sleep(3)  ## 주문자 정보 받아오기``
driver.find_element(By.XPATH,'//*[@id="StepCtrlBtn04"]/a[2]/img').click()

#결제방법
driver.find_element(By.XPATH,'//*[@id="rdoPays22"]').click()  #무통장 입금

select = Select(driver.find_element(By.XPATH,'//*[@id="selBank"]'))
select.select_by_index(1)

# 예매하기
driver.find_element(By.XPATH,'//*[@id="cbxAllAgree"]').click()
driver.find_element(By.XPATH,'//*[@id="imgPayEnd"]').click()

 
 

 

 

반응형

 

 
완성코드

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select
import time



# 브라우저 꺼짐 방지 옵션
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)


driver = webdriver.Chrome(options=chrome_options)
driver.set_window_size(1900, 1000)
yse24_rul = 'http://ticket.yes24.com/'


# 웹페이지가 로드될 때까지 2초를 대기
driver.implicitly_wait(time_to_wait=2)
driver.get(url=yse24_rul)

# 스크롤 내리기
driver.find_element(By.TAG_NAME,'body').send_keys(Keys.PAGE_DOWN)

# 로그인
driver.find_element(By.XPATH,'//*[@id="consiceLogin"]').click()

userId = driver.find_element(By.ID, 'SMemberID')
userId.send_keys('아이디')
userPwd = driver.find_element(By.ID, "SMemberPassword")
userPwd.send_keys('비밀번호')
userPwd.send_keys(Keys.ENTER)


# 티켓 사이트 이동
driver.get('http://ticket.yes24.com/Special/49580')
driver.find_element(By.XPATH,'//*[@id="mainForm"]/div[9]/div/div[4]/a[4]').click()




#예매하기 탭 이동
time.sleep(1)
print('--------------------')
print(driver.window_handles)
driver.switch_to.window(driver.window_handles[-1])

# 날짜 선택
driver.find_element(By.CLASS_NAME,'select').click()
driver.find_element(By.XPATH,'//*[@id="btnSeatSelect"]').click()

# 구역, 좌석 선택하기
driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@id="divFlash"]/iframe'))

driver.find_element(By.XPATH,'//*[@id="area5"]').click()
#driver.find_element(By.XPATH,'//*[@id="t5700156"]').click()
driver.find_element(By.XPATH,'//*[@id="divSeatArray"]/div[string-length(@title)>0]').click()
#driver.find_element(By.XPATH,'//*[@id="divSeatArray"]/div[120]').click()
#driver.find_element((By.XPATH("//*[@attribute='grade']"))).click()


# 좌석선택 완료
driver.find_element(By.XPATH,'//*[@id="form1"]/div[3]/div[2]/div/div[2]/p[2]/a/img').click()


# 할인/쿠폰
driver.switch_to.default_content()
driver.find_element(By.XPATH,'//*[@id="StepCtrlBtn03"]/a[2]/img').click()

# 수령방법
time.sleep(3)  ## 주문자 정보 받아오기``
driver.find_element(By.XPATH,'//*[@id="StepCtrlBtn04"]/a[2]/img').click()

#결제방법
driver.find_element(By.XPATH,'//*[@id="rdoPays22"]').click()  #무통장 입금

select = Select(driver.find_element(By.XPATH,'//*[@id="selBank"]'))
select.select_by_index(1)

# 예매하기
driver.find_element(By.XPATH,'//*[@id="cbxAllAgree"]').click()
driver.find_element(By.XPATH,'//*[@id="imgPayEnd"]').click()

 
 + element 제어기 안된다는 댓글이 많아서 추가
셀레늄 감지 방지 코드 (요소가 클릭이 안될때 아래 코드를 추가하여 셀레늄 감지를 피할 수 있다) ↓

[python] selenium-stealth 셀레늄 감지 방지 (구글 크롬)

selenium-stealth로 selenium 우회하기, 셀레늄 막힘 방지 웹사이트에서 셀레늄을 통한 웹 크롤링을 막아놓으면 버튼 클릭, 키 입력 등 element 선택이 되지 않는다셀레늄 스텔스를 모듈을 사용하여 기존

spectrum20.tistory.com

 
 
인터파크 티켓 예매 ↓

[python] Selenium 활용 예스24 티켓예매 매크로 만들기

Selenium 활용 Yes24 티켓 예매 매크로 만들기(*selenium 연습용으로 사용할 것)  1. 패키지 설치pip install selenium  2. 모듈 importfrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdri

spectrum20.tistory.com

 

반응형

댓글