어느 날 옆부서 부장님이 프로그램제작 의뢰를 한적이 있다.
자기가 이용하는 배드민턴장이 있는데, 코트 예약사이트에서 자동예약을 하는 프로그램을 만들어 달라는것이다.
보수는 한장.
사실 아이스 아메리카노 3잔에 프로그램을 만들어주는 나로써는 꽤나 큰 액수였다.
사이트주소를 받은 나는 사이트를 이리저리 둘러 보았다.
음, Selenium 몇줄이면 떡을 치겠군.
만들다 보니 작동이 안된다.
아뿔사 구글캡챠3.0이 적용되어 있다.
구글캡챠3.0이란 보안 프로그램으로 사람처럼 동작하지 않는 사용자를 봇으로 규정하고 이용하지 못하게 하는 적응형 보안 프로그램이다.
귀찮아서 포기하려는데 사이트에 이런 문구가 적혀있다.
"사이트에 봇이 많아 구글캡챠를 도입했습니다만, 아직도 비정상적인 사용자들이 많습니다. 2초내에 예약을 하시는 분들은 이용정지 처분 하겠습니다."
훗.
그렇다면 이미 캡챠를 뚫고 이용하시는 분들이 많다는 이야기.
나는 질 수 없기 때문에 제작에 착수한다.
간파 방법은 두가지다. 하나는 사람처럼 정교하게 움직이는 알고리즘을 짜거나, 아니면 headless모드로 바꾸고 header의 userAgent를 변작하면 된다.
오케이
작동을 해보니 잘된다. 다음날 부장에게 시연을 한다.
"와 잘되는데? 그럼 이제 내 계정으로 테스트 해보자!"
계정정보를 받아 테스트.
???
예약에 실패했다.
이미 예약이 되어있었다. 불과 2.1초남짓에 예약을 누군가 예약을 했다!
그렇다 .
인간이 아니다.
상대는 봇이었다.
인간이라면 절대 로그인->코트체크->코트예약정보작성->결제 이것을 이 시간에 끝낼수는 없었던 것이다..
쿳쏘.... 닝겐쟈나캇다... 코노야로
알고리즘을 변경한다.
(변경전)
예약가능한 코트 모니터링(2초마다) -> 코트발견 -> 로그인 -> 코트선택 -> 결제
(변경후)
모니터링 집어치우고 예약 열리는 시간 직전에 바로
선로그인, 코트검색대기 -> 예약가능시간에 바로 선택 및 결제
음, 너가 2.1초에 예약해서 계정정지를 피한다면 나는 2.09초다. 나는 이길때까지 싸움을 계속할 것이다.
음으으흐흐으므와하하하!(악당웃음)
그렇게 테스트 돌입, 나는 꿀물을 넣은 홍차를 한잔하며 봇을 돌렸다.
대망의 예약시간
"예약에 성공하셨습니다."
크흐흐 당연하지.
이 홍차는 이길때만 마시는 홍차란 말이다.
의기양양하게 부장에게 프로그램 동작 방법을 전수하여, 거룩한 한장을 받았다.
역시 사람은 머리를 써야해
그렇게 승리의 하루를 보냈다.
.
.
.
그 후 약 7일 후, 부장의 계정은 정지를 당했다.
댓글 0