Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
웹킷과 자동화의
약속된 승리
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 Cref...
구현할 것
● 특정 페이지를 열면 특정 메소드 수행
○ 로그인 페이지 열면
■ 인증정보 넣고 확인버튼 찾아서 click
○ 극장선택 페이지 열면
■ 원하는 극장/상영관 찾아서 click
○ 결재 페이지 열면
■ 카드 번...
개발하기 위해 필요한 것
● 특정 페이지 열기
○ load_uri() 메소드 제공
● 웹 브라우져의 이벤트
○ load-status 라는 property 제공
● DOM
○ get_dom_document() 메소드 제공...
명당자리 찾기
● 앉고싶은 지점을 정한 후 가까운 자리를 찾으
면 됨.
결전의 시간!
망했어요(2)
러시아에선 외양간이 소를 고칩니다.
● 정해진 시간에 페이지 처리를 못하면 reload
추가
덤으로 몇 가지 최적화
● dns prefetch
○ hostname이 하나밖에 안쓰여서, 그렇게 큰 효과는 없
음.
● 이미지 로딩하지 않기
● 그외 설정할 수 있는 여러가지 값
세번째 전쟁
버.. 버틸 수가 없다.
한층 더 열악해진 상황
● 단 하루, 달랑 2회 상영
○ 수요에 비해 공급이 너무 적음
● 덕들 중에 나처럼 생각하는 사람이 있을텐
데...
● 메가박스 페이지는 처리하기 귀찮..
○ cgv는 한땀한땀 div id로 잘...
어쨌든 대충 완성했는데...
망했어요(3)
러시아에선 외양간이 소를 고칩니다.(2)
● alert창 무시하기 추가
● 이대로 포기해야 하나...
취소표를 노리자!!!
● 예매 후 여러가지 이유로 취소를 합니다.
○ 시간이 안맞다던가...
○ 자리 양도라던가...
● 주기적으로 빈자리 확인 후 자동예매 하도록
긴급 수정
7시간 후...
그 외 여러 응용 방법?
● iPhone 도입 후 웹 어플리케이션(특히 모바일
용)으로 할 수 있는 것이 점점 늘어나고 있음
○ 디아블로 한정판 온라인 구매
○ 구글 IO 참가 신청
얼렁뚱땅 결론
● 한번에 잘되는거 없다.
○ 테스트. 테스트. 그리고 또 테스트
● 기술적 접근도 중요하지만, 도메인 지식 또한
상당히 중요하다.
● 프로그래머의 가치를 올려주는 것은 자동화.
http://github.com/ganadist/cgv_reservation
Implementation
Upcoming SlideShare
Loading in …5
×

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

795 views

Published on

python과 webkit을 이용해서 영화표를 자동으로 예매했던 경험을 공유한 발표자료입니다.
python korea 2013년 5월에 사용했었습니다.
현재 자동예매 스크립트는 각 영화관 사이트의 개편으로 인해 동작하지 않습니다. OTL

Published in: Software

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

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

×