SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
웹킷과 자동화의
약속된 승리
python으로 에반게리온: Q 표 예매하기
발표자 소개
발표자의 나쁜 습관
발표자의 나쁜 습관
첫경험?
예매를 하려고 했는데...
● 갑자기 갑님이랑 워크샵 일정이 잡힘.
○ 위치는 머나먼 휘닉스 파크.
○ 워크샵 일정과 예매 오픈시간이 겹침.
● 스마트폰으로 예매 시도..
강원도의 흔한 통화권 이탈
망했어요
두번째 삽질
자동화를 해볼까?
자동화 하기엔 너무나도 복잡한...
우리에겐 심플한 모바일 페이지가!!
웹페이지 처리 자동화 하기
● Selenium
● Greesemonkey
● Chrome Extensions
● Phantomjs
아예 웹 브라우져를 (재빨리) 만들어버
리자
● 새로운 기술을 바닥부터 배우기엔 시간이 없
다.
● 기존의 웹 브라우져(의 sandbox)에서 제공하
는 기능만으로는 뭔가 부족하다.
● 그리고 쓰기 쉬운 python을 이용하자!!!
Webkit
● 대부분의 모바일 브라우져에서 쓰이는 웹 렌
더러 엔진
● 웹 브라우져에서 제공되는 기능 대부분이 사
용 가능
GObject Introspection
● GObject/Gtk 에서 사용되는 language
binding middleware
○ 여기에 있는 대부분의 API를 지원
● Python을 아주 잘 지원합니다.
● 더 자세히 알고 싶으면 예전 발표자료 나 제목
의 링크를 참조하세요.
GObject Introspection의 단점.
● Documentation이 부실합니다..(..)
○ 바인딩을 위한 middleware 만 제공
○ api 형태는 짬으로 헤쳐나가야 함.
■ webkit-gtk Creference 참조
■ 그런데 dom쪽은 reference조차 없음
● js dom api를 참조
구현할 것
● 특정 페이지를 열면 특정 메소드 수행
○ 로그인 페이지 열면
■ 인증정보 넣고 확인버튼 찾아서 click
○ 극장선택 페이지 열면
■ 원하는 극장/상영관 찾아서 click
○ 결재 페이지 열면
■ 카드 번호와 개인정보 입력후 확인버튼 찾아서
click
● 골든박스 찾아보기
○ 가운데 자리와의 거리를 얻어온 다음, 정렬해서 첫번
째 자리를 얻어옴
개발하기 위해 필요한 것
● 특정 페이지 열기
○ load_uri() 메소드 제공
● 웹 브라우져의 이벤트
○ load-status 라는 property 제공
● DOM
○ get_dom_document() 메소드 제공
○ DOM api는 c reference 문서조차 없음.
■ 쉘에서 하나하나 찾아봐야;;
■ CamelCase vs under_scores
● 특정 js 코드 실행하기
○ execute_script() 메소드 제공
명당자리 찾기
● 앉고싶은 지점을 정한 후 가까운 자리를 찾으
면 됨.
결전의 시간!
망했어요(2)
러시아에선 외양간이 소를 고칩니다.
● 정해진 시간에 페이지 처리를 못하면 reload
추가
덤으로 몇 가지 최적화
● dns prefetch
○ hostname이 하나밖에 안쓰여서, 그렇게 큰 효과는 없
음.
● 이미지 로딩하지 않기
● 그외 설정할 수 있는 여러가지 값
세번째 전쟁
버.. 버틸 수가 없다.
한층 더 열악해진 상황
● 단 하루, 달랑 2회 상영
○ 수요에 비해 공급이 너무 적음
● 덕들 중에 나처럼 생각하는 사람이 있을텐
데...
● 메가박스 페이지는 처리하기 귀찮..
○ cgv는 한땀한땀 div id로 잘 감싸져있는데..
○ megabox는 ...
어쨌든 대충 완성했는데...
망했어요(3)
러시아에선 외양간이 소를 고칩니다.(2)
● alert창 무시하기 추가
● 이대로 포기해야 하나...
취소표를 노리자!!!
● 예매 후 여러가지 이유로 취소를 합니다.
○ 시간이 안맞다던가...
○ 자리 양도라던가...
● 주기적으로 빈자리 확인 후 자동예매 하도록
긴급 수정
7시간 후...
그 외 여러 응용 방법?
● iPhone 도입 후 웹 어플리케이션(특히 모바일
용)으로 할 수 있는 것이 점점 늘어나고 있음
○ 디아블로 한정판 온라인 구매
○ 구글 IO 참가 신청
얼렁뚱땅 결론
● 한번에 잘되는거 없다.
○ 테스트. 테스트. 그리고 또 테스트
● 기술적 접근도 중요하지만, 도메인 지식 또한
상당히 중요하다.
● 프로그래머의 가치를 올려주는 것은 자동화.
http://github.com/ganadist/cgv_reservation
Implementation

Weitere ähnliche Inhalte

Was ist angesagt?

M5 6 1
M5 6 1M5 6 1
M5 6 1nexthw
 
NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅Seungjae Lee
 
개발자의 컴퓨터
개발자의 컴퓨터개발자의 컴퓨터
개발자의 컴퓨터jaehyok Song
 
EMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjsEMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjs이상한모임
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동선협 이
 
클래스의 기초 지식
클래스의 기초 지식클래스의 기초 지식
클래스의 기초 지식. Ruvendix
 
Boss2D 설치과정
Boss2D 설치과정Boss2D 설치과정
Boss2D 설치과정Bonex Gu
 
Geveloper 160816
Geveloper 160816Geveloper 160816
Geveloper 160816Nyeong Ahn
 
WebGL 20150428
WebGL 20150428WebGL 20150428
WebGL 20150428Jun Ho Lee
 

Was ist angesagt? (10)

M5 6 1
M5 6 1M5 6 1
M5 6 1
 
NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅NDC14 - 사례로 배우는 디스어셈블리 디버깅
NDC14 - 사례로 배우는 디스어셈블리 디버깅
 
개발자의 컴퓨터
개발자의 컴퓨터개발자의 컴퓨터
개발자의 컴퓨터
 
EMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjsEMOCON 2015 - Jspm & systemjs
EMOCON 2015 - Jspm & systemjs
 
C++과 Lua script연동
C++과 Lua script연동C++과 Lua script연동
C++과 Lua script연동
 
클래스의 기초 지식
클래스의 기초 지식클래스의 기초 지식
클래스의 기초 지식
 
Boss2D 설치과정
Boss2D 설치과정Boss2D 설치과정
Boss2D 설치과정
 
Bs camp
Bs campBs camp
Bs camp
 
Geveloper 160816
Geveloper 160816Geveloper 160816
Geveloper 160816
 
WebGL 20150428
WebGL 20150428WebGL 20150428
WebGL 20150428
 

Ähnlich wie 웹표준과 자동화의 약속된 승리

온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기Seungjae Lee
 
제 5회 Lisp 세미나 - Graphics Programming in Clojure
제 5회 Lisp 세미나 - Graphics Programming in Clojure제 5회 Lisp 세미나 - Graphics Programming in Clojure
제 5회 Lisp 세미나 - Graphics Programming in ClojureNAVER D2
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
 
[스마트스터디]스마트스터디처럼 Django 쓰지 마세요
[스마트스터디]스마트스터디처럼 Django 쓰지 마세요[스마트스터디]스마트스터디처럼 Django 쓰지 마세요
[스마트스터디]스마트스터디처럼 Django 쓰지 마세요smartstudy_official
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기Chang W. Doh
 
[NDC17] Protocol:hyperspace Diver 개발 포스트모템
[NDC17] Protocol:hyperspace Diver 개발 포스트모템[NDC17] Protocol:hyperspace Diver 개발 포스트모템
[NDC17] Protocol:hyperspace Diver 개발 포스트모템Young Soo Kim
 
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰Eunhyang Kim
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Paprikhan
 
클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)Sang-Kyu Park
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101Chang W. Doh
 
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템강 민우
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
Cocos2d x a to z (상)
Cocos2d x a to z (상)Cocos2d x a to z (상)
Cocos2d x a to z (상)SeungIl Choi
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기Miyu Park
 

Ähnlich wie 웹표준과 자동화의 약속된 승리 (20)

온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
Virtual dom
Virtual domVirtual dom
Virtual dom
 
제 5회 Lisp 세미나 - Graphics Programming in Clojure
제 5회 Lisp 세미나 - Graphics Programming in Clojure제 5회 Lisp 세미나 - Graphics Programming in Clojure
제 5회 Lisp 세미나 - Graphics Programming in Clojure
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
[스마트스터디]스마트스터디처럼 Django 쓰지 마세요
[스마트스터디]스마트스터디처럼 Django 쓰지 마세요[스마트스터디]스마트스터디처럼 Django 쓰지 마세요
[스마트스터디]스마트스터디처럼 Django 쓰지 마세요
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
[NDC17] Protocol:hyperspace Diver 개발 포스트모템
[NDC17] Protocol:hyperspace Diver 개발 포스트모템[NDC17] Protocol:hyperspace Diver 개발 포스트모템
[NDC17] Protocol:hyperspace Diver 개발 포스트모템
 
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Node.js + Websocket 삽질기
Node.js + Websocket 삽질기
 
클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101
 
Dynamodb 삽질기
Dynamodb 삽질기Dynamodb 삽질기
Dynamodb 삽질기
 
Visual shock vol.2
Visual shock   vol.2Visual shock   vol.2
Visual shock vol.2
 
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
Cocos2d x a to z (상)
Cocos2d x a to z (상)Cocos2d x a to z (상)
Cocos2d x a to z (상)
 
Docker
DockerDocker
Docker
 
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
HTML5/JSON 을 이용해 범용 2D 맵에디터 제작하기
 

Mehr von Young-Ho Cha

마세라티의 비밀
마세라티의 비밀마세라티의 비밀
마세라티의 비밀Young-Ho Cha
 
More than nexus, better than nexus.
More than nexus, better than nexus.More than nexus, better than nexus.
More than nexus, better than nexus.Young-Ho Cha
 
7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트Young-Ho Cha
 
Cairo clock for android wear
Cairo clock for android wearCairo clock for android wear
Cairo clock for android wearYoung-Ho Cha
 
GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기Young-Ho Cha
 
코드 리뷰 시스템 소개
코드 리뷰 시스템 소개코드 리뷰 시스템 소개
코드 리뷰 시스템 소개Young-Ho Cha
 
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기Young-Ho Cha
 
자막을 뿌리려면 해야 할 여러가지 삽질모음
자막을 뿌리려면 해야 할 여러가지 삽질모음자막을 뿌리려면 해야 할 여러가지 삽질모음
자막을 뿌리려면 해야 할 여러가지 삽질모음Young-Ho Cha
 
Browser history and overview
Browser history and overviewBrowser history and overview
Browser history and overviewYoung-Ho Cha
 
Introduce native client
Introduce native clientIntroduce native client
Introduce native clientYoung-Ho Cha
 
Introduce gobject introspection
Introduce gobject introspectionIntroduce gobject introspection
Introduce gobject introspectionYoung-Ho Cha
 

Mehr von Young-Ho Cha (12)

마세라티의 비밀
마세라티의 비밀마세라티의 비밀
마세라티의 비밀
 
More than nexus, better than nexus.
More than nexus, better than nexus.More than nexus, better than nexus.
More than nexus, better than nexus.
 
7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트
 
Cairo clock for android wear
Cairo clock for android wearCairo clock for android wear
Cairo clock for android wear
 
GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기
 
코드 리뷰 시스템 소개
코드 리뷰 시스템 소개코드 리뷰 시스템 소개
코드 리뷰 시스템 소개
 
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
 
자막을 뿌리려면 해야 할 여러가지 삽질모음
자막을 뿌리려면 해야 할 여러가지 삽질모음자막을 뿌리려면 해야 할 여러가지 삽질모음
자막을 뿌리려면 해야 할 여러가지 삽질모음
 
Browser history and overview
Browser history and overviewBrowser history and overview
Browser history and overview
 
Introduce native client
Introduce native clientIntroduce native client
Introduce native client
 
Introduce gobject introspection
Introduce gobject introspectionIntroduce gobject introspection
Introduce gobject introspection
 
페챠쿠챠
페챠쿠챠페챠쿠챠
페챠쿠챠
 

웹표준과 자동화의 약속된 승리