웹킷과 자동화의
약속된 승리
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

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