이용가이드
TICKETHELL은 실제 티켓팅 사이트를 모방한 크롤링/자동화 챌린지 플랫폼입니다.
1 전체 플로우
닉네임 로그인
공연 선택
좌석 선택
예매정보 입력
예약 확인
예매 성공
- 공연 클릭 시 로그인이 되어있지 않으면 로그인 페이지로 이동합니다.
- 닉네임만 입력하면 자동 로그인됩니다. 비밀번호 없음.
- 예매 성공해도 실제 좌석 상태는 변경되지 않습니다 — 기록만 남습니다.
- 랭킹은 누구나 로그인 없이 볼 수 있습니다.
2 취소표 모드
처음부터 모든 좌석이 점유된 상태에서, 무작위로 취소표가 등장합니다. 취소표 좌석이 열려 있는 짧은 시간 안에 예매 플로우를 완료해야 합니다.
성공 조건: 취소표 좌석 클릭 → 예매정보 선택 → 예약 확인 모달 → 확인
버튼을 누른 시점에 해당 좌석이 아직 열려 있어야 합니다.
| 난이도 | 등장 주기 | 유지 시간 | 특이 사항 |
|---|---|---|---|
| 쉬움 | 10~30초 | 3~5초 | 단일 구역, 예측 가능한 ID |
| 중간 | 20~40초 | 1~2초 | 다중 좌석 타입(VIP/R/S/A) |
| 어려움 | 20~40초 | 0.5~1초 | 3개 구역, ID 중복, 확인 버튼 ID 중복 |
| 카오스 | 20~40초 | 0.1~0.3초 | 어려움 + 랜덤 서버 오류, CSS 클래스 스크램블, 극단적으로 짧은 창 |
💡 크롤러 힌트: 미리보기 페이지에서 HTML 구조를 F12로 확인하세요.
난이도마다 열린 좌석의 class/id 패턴이 다릅니다.
Hard 이상에서는
document.getElementById만으로는 부족할 수 있습니다.
3 대기열 모드
매 분 정각에 예매하러 가기 버튼이 10초간 활성화됩니다. 버튼 클릭 → (캡챠 통과) → 대기열 진입 → 좌석 선택 순서로 진행됩니다.
- 버튼 활성화: 서버 시간 기준 매 분 :00~:10에만 활성. 새로고침해야 활성 상태를 확인할 수 있음.
- 버튼 비활성화: :10이 지나면 실시간으로 비활성화. 새로고침 불필요.
- 대기 인원: 수식
P(t) = N·(1−exp(−(t/β)^α))에 따라 증가. - 좌석 채우기: 앞자리 우선 지수분포 + 열 정규분포로 순차 점유.
- 취소표: 점유된 좌석 중 일부가 랜덤으로 M초간 다시 열립니다.
| 난이도 | 좌석 수(N) | 캡챠 | K (속도) | M (취소표 유지) |
|---|---|---|---|---|
| 쉬움 | 100 | 없음 | 20 | 3~5초 |
| 중간 | 1,000 | 1자리 (DOM 읽기 가능) | 15 | 1.5~3초 |
| 어려움 | 10,000 | 5자리 캔버스 (OCR 필요) | 10 | 1~1.5초 |
| 카오스 | 10,000 | 5자리 노이즈 캔버스 | 5 | 0.5~1초 |
랭킹 측정: 버튼이 활성화된 순간(:00)부터 예매 완료까지의 시간이 기록됩니다.
빠른 새로고침, 빠른 캡챠 처리, 빠른 좌석 선택이 모두 중요합니다.
4 예매 플로우 상세
- 좌석 선택: 녹색으로 표시된 가용 좌석을 클릭합니다. 클릭 시 좌석이 빛납니다.
- 예매정보 패널: 좌석 선택 후 우측 패널에 티켓 종류 선택이 나타납니다. 기본값은 어른.
- 확인 버튼: 예매정보 확인 버튼을 클릭합니다.
- 예약 확인 모달: "이 예약 정보가 맞습니까?" 모달이 표시됩니다. 최종 확인을 클릭합니다.
- 성공/실패: 서버에서 시점을 검증합니다. 좌석이 열려있는 동안 완료해야 성공.
💡 크롤러 주의: 예매정보 확인 버튼(
#btn-confirm)과 모달 확인 버튼의
ID가 어떤 난이도에서는 동일합니다. querySelectorAll과 인덱싱이 필요할 수 있습니다.
5 새로고침 vs 자동갱신 모드
- 새로고침 모드: 페이지를 새로고침(F5 또는 새로고침 버튼)해야만 좌석 상태가 업데이트됩니다. 실제 티켓팅 사이트와 동일한 방식.
- 자동갱신 모드: 백그라운드에서 주기적으로 좌석 상태를 가져와 UI를 자동 업데이트합니다.
크롤러 입장에서는 새로고침 모드가 보다 현실적입니다. 새로고침 횟수가 랭킹에 기록됩니다.
6 사이트 미리보기
각 공연 상세 페이지에서 "사이트 구조 미리보기" 버튼을 클릭하면, 해당 난이도의 HTML 구조를 F12 개발자 도구로 분석할 수 있는 정적 페이지가 열립니다.
- 열린 좌석(
seat--available)과 닫힌 좌석(seat--occupied) 모두 포함 - 실제 예매 페이지와 동일한 HTML 구조 사용
- 구역 선택 → 좌석 선택 → 확인 버튼 2개(예매 확인 + 예매 확정)까지 체험
- 미리보기 페이지에서 크롤러 셀렉터를 테스트할 수 있습니다
7 랭킹 특이 사항
- 어린이 티켓: 예매 시 '어린이'를 선택하면 랭킹에 🧒 배지가 표시됩니다.
- 취소표 표시: 대기열 모드에서 취소표로 예매에 성공하면 '취소표' 배지가 표시됩니다.
- 새로고침 횟수: 적을수록 효율적인 크롤러입니다.
- 캡챠 풀이 시간: 대기열 중간~카오스 난이도에서 측정됩니다.