문서 메뉴

안티게이트 태스크가 있는 모든 캡챠 우회하는 방법

몇 년 동안 연구하고 개발한 끝에 저희는 인간이 만든 캡챠 게이트를 로봇이 통과하도록 도와주는 일반적인 솔루션을 도입했습니다. 저희는 이 솔루션을 "AntiGate"라고 부르며, 이 솔루션은 저희 인력들이 정확한 태스크를 시행하기 위하여 이용하는 시나리오 템플릿입니다.

특정 시점에 앱에서 새로운 캡챠, 난독화 브라우저 스크립트 등으로 구성된 자동화 보호 "gateway"를 마주하게 됩니다. 바로 여기서 안티게이트 태스크가 개입하게 됩니다. 여러분은 저희 작업자 중 한 명에게 실제 사람이 이용하는 브라우저 세션을 구축할 수 있는 권한을 위임합니다.

  • 먼저, 템플릿을 선택하세요. 기존 템플릿을 선택하거나 본인만의 템플릿을 생성할 수 있습니다. 템플릿은 작업자가 따라야 하는 단계별 지침입니다.
  • 둘째로, 입력할 입력값, 입력값의 CSS 셀렉터, 혹은 여러분이 탐색해야 하는 웹 주소와 같이 템플릿에서 요구하는 추가 데이터를 기재합니다.
  • 셋째로, 프록시가 필요합니다(선택 사항). 웹사이트에서 각 세션 쿠키를 정확한 IP 주소와 연관 짓는 경우에 프록시가 필요합니다.
이러한 3가지를 가지고, 여러분은 저희 API로 태스크를 생성합니다. 작업자는 특수한 브라우저 플러그인이 설치된 웹사이트로 탐색하며 모든 시나리오 단계를 수동 혹은 자동으로 진행합니다. 저희는 스크립트 말미에서 쿠키, localStorage 값, 브라우저 지문과 같은 모든 브라우저 세션 정보를 수집하고 앱으로 다시 전송합니다. 이제 남은 단계로, 이 데이터를 이용하여 작업자 세션을 복구하고 인간 유저인 것처럼 작업을 계속 진행하기만 하면 됩니다. 진짜 대단하죠? :)

안티게이트 템플릿이란 무엇인가요?

안티게이트 템플릿은 작업자가 통과해야 하는 정확한 시나리오를 정의합니다. 템플릿은 다양한 단계로 구성되어 있는데, 이러한 단계는 모두 연속적으로 시행됩니다. 한 단계가 완료되면, 작업자는 다음 단계로 넘어갑니다. 모든 단계가 완료되면, 태스크가 완료되고, 작업자 세션의 스냅샷을 찍은 후에 앱으로 다시 전송합니다.

어떤 단계가 있습니까?

  • 자동으로 혹은 수동으로 텍스트 입력란을 채우세요.
  • 텍스트 샘플이 페이지에 나타나기를(혹은 페이지에서 사라지기를) 기다려주세요.
  • CSS에서 정의한 DOM 요소가 페이지에 나타날(혹은 페이지에서 사라질) 때까지 기다려주세요.
  • 키워드가 작업자의 현재 브라우저 URL 주소에 나타날(혹은 현재 브라우저 URL 주소에서 사라질) 때까지 기다리세요.
템플릿의 "description for workers" 텍스트 입력란에서 작업자가 진행해야 하는 다른 단계에 대해서 설명할 수 있습니다. 예시: "Solve a captcha and press the submit button".

예시를 확인해보세요. 개발자 센터을 탐색하고 테스트할 무료 템플릿을 생성하세요. 걱정하지 마세요. 잘못될 건 하나도 없습니다!

클릭하여 템플릿 추가하기
클릭하여 예시 불러오기
단계 섹션을 유의하세요.

예시를 불러왔습니다. 계정에 예시를 저장하고 나중에 직접 테스트해볼 수 있습니다. 아래에서 템플릿 속성 전체 목록을 확인해보세요.

  • 템플릿 이름. 한 번 저장되면, 수정할 수 없습니다. 한 번 게시하면, 템플릿은 이 이름으로 API에서 이용할 수 있게 됩니다.
  • 고객을 위한 설명. 공개 템플릿은 저희 템플릿 카탈로그에서 볼 수 있습니다.
  • 작업자를 위한 설명. 이 텍스트는 저희 작업자들이 페이지 상단에서 볼 수 있는 텍스트입니다.
    작업자 인터페이스 예시
  • 변수. 이 목록은 영구 값 대신에 이 단계에서 이용하도록 추가할 수 있는 변수 이름의 목록입니다. 예를 들어, 2가지 변수인 "login" 및 "password"가 있다고 합니다. 이러한 2가지 변수는 1단계와 2단계에서 이용되어 로그인 양식을 채워 넣습니다. 이러한 방식으로 템플릿에서 로그인 ID와 비밀번호를 하드코딩하는 대신에 API를 통해서 이러한 값을 제공할 수 있습니다.
    1단계와 2단계에 이용된 변수
  • 작업자 단계. 여기서 시나리오 단계의 순서를 편집하고 변경할 수 있습니다. 저희 예시에서 저희는 다음과 같은 단계를 시행합니다.
    1. CSS 셀렉터 "#login"(으)로 이 텍스트 입력란을 자동으로 채워 넣습니다. 이 입력란의 값은 변수 "login"에 의해 정의됩니다.
    2. CSS 셀렉터 "#password"(으)로 이 텍스트 입력란을 자동으로 채워 넣습니다. 이 입력란의 값은 변수 "password"에 의해 정의됩니다.
    3. 페이지에 대조 문구가 나타날 때까지 기다려주세요. 이 문구는 "Test passed with login" 값으로 영구 설정되었습니다.

이제 템플릿을 저장할 수 있으며, 개발자 센터에 템플릿이 나타날 것입니다. "Sandbox" 상태가 있다는 것을 의식하시길 바랍니다. 이 상태는 여러분만 볼 수 있으며 API에서는 볼 수 없는 상태를 의미합니다. 여기서 마치 여러분이 전용 작업자인 것처럼 새롭게 생성된 템플릿을 테스트해볼 수 있습니다.

템플릿 테스트 중

이 시점에서 여러분은 크롬 브라우저를 이용해야 하며, 프로필 쿠키에 액세스할 수 있는 저희 플러그인을 설치해야 하기 때문에 새로운 사용자 프로필을 생성하는 것을 권장합니다.

그다음, 템플릿 카드에서 "test" 버튼을 클릭합니다.

지시사항을 따라서 플랫폼의 플러그인을 다운로드하세요. 그 후에, 페이지를 다시 불러오기 해서 플러그인이 적용되도록 하고, 일부 무작위 값으로 "login" 및 "password" 변수를 채워 넣고, "Launch Test" 버튼을 누르세요. 이렇게 하면 다음과 같은 새로운 페이지가 열릴 것입니다.

주소바 근처에 플러그인이 타겟 페이지 상단에 추가한 파란색 바가 있습니다. 바로 여기서 작업자들이 할당된 업무에 대해서 알아보고 태스크 진행을 관리할 수 있습니다. 이러한 방식으로 작업자들이 본인에게 할당된 태스크에 대해서 알아보고 태스크 진행을 관리합니다.

또한, 변수 입력 시 로그인 및 비밀번호 입력란이 숨겨져 있다는 점을 유의하시길 바랍니다. 이건 의도적인 것입니다. 작업자들이 개발자의 콘솔을 통해서 태스크 데이터에 완전히 액세스할 수 있더라도, 99.99%는 굳이 배후에서 어떤 일이 일어나고 있는지 알아보려 하지 않습니다.

리캡챠를 풀 때는, "Sign In" 버튼을 클릭하세요. 템플릿의 마지막 단계인 "WAIT_CONTROL_TEXT_PRESENT"를 통과하게 될 것입니다. 플러그인은 여러분의 템플릿에서 영구적인 방식으로 정의되는 대조 문구 "Test passed with login"을 검색합니다. 이 탭은 자동으로 닫히고 세션 스냅샷은 결과 입력란에 나타납니다.

결과 예시

동일한 스냅샷을 API로부터 받을 수 있습니다. 템플릿을 API에서 이용할 수 있도록 하려면, 우선 템플릿을 게시해야 합니다.

템플릿 게시 중

템플릿을 게시할 때 비공개 혹은 공개 중에서 선택할 수 있습니다.

  • 비공개 템플릿은 API 키로만 이용할 수 있습니다. 다른 고객들은 이용할 수 없습니다. 검토 및 게시 비용은 $10입니다.
  • 공개 템플릿은 모든 사람들이 이용할 수 있습니다. 여러분은 고객이 이 템플릿을 이용하는 비용의 5%를 커미션으로 받게 될 것입니다. 템플릿에 오류가 발생하는 경우 고객들이 여러분에게 도움을 구할 수 있도록 연락처를 남겨둬야 합니다. 검토 및 게시 비용은 $1입니다.

저희는 모든 템플릿을 꼼꼼하게 검토합니다. 생산 모드로 성공적으로 전환하려면 다음과 같은 일부 기본 요건을 충족해야 합니다.

  • 일체의 불법 활동 없음.
  • 기존 템플릿을 복사해서는 안 됩니다.
  • 어떤 웹사이트 혹은 서비스와도 관련 없는 중립적인 템플릿 이름만 이용하세요.
  • 더미 템플릿이나 테스트 템플릿을 제출하지 마세요.
  • 검토할 예시 웹 주소와 변수 값을 제공하세요. 저희는 테스트를 시행할 것이며, 모든 단계는 성공적으로 완료되어야 합니다.

API 요청

위의 안티게이트 템플릿에 대하여 API에 태스크 생성 요청 전송 시 다음과 같이 간단하게 보일 것입니다.

CURL
          curl -i -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -X POST -d '{
    "clientKey":"YOUR_API_KEY",
    "task":
        {
            "type":"AntiGateTask",
            "websiteURL":"https://anti-captcha.com/tutorials/v2-textarea",
            "templateName":"Demo sign-in at anti-captcha.com #123456",
            "variables": {
                "login":"some value",
                "password":"some value"
            }
        }
}' https://api.anti-captcha.com/createTask
        

즉, "templateName" 및 "variables" 매개 변수를 넘겨주어, 템플릿을 채우는 것입니다.

태스크 결과 이용 중

"cookies", "localStorage", "fingerprint" "url"을 포함하는 안티게이트 태스크 반환 솔루션을 성공적으로 완료하였습니다. 여러분이 이용하는 소프트웨어는 이 요청에서 "cookies"를 이용하여, 최소한 브라우저 사용자 에이전트의 "fingerprint.self.navigator.userAgent" 값을 이용하여 "url"을 탐색해야 합니다. 더 복잡한 웹사이트는 최신 버전의 쿠키인 localStorage에 중요 데이터를 저장합니다. 이 경우, 사실상 자바스크립트를 실행하기 전에 페이지에 데이터를 입력해야 합니다. 이러한 작업은 퍼펫티어와 같은 개발 환경에서 시행할 수 있습니다. 아마 이 주제는 따로 다른 글에서 다뤄볼 수 있을 것 같습니다.

자체 템플릿 생성 중

예시 템플릿을 불러오지 않고 위의 단계를 따라하기만 하면 됩니다. 모든 세부사항을 신중하게 기입하시고 조심스럽게 단계를 추가하세요. 모든 단계가 연속적으로 진행된다는 점을 유의하세요. 현재 단계가 완료되어야 다음 단계로 진행할 수 있습니다. 작업자의 브라우저 플러그인으로 언제든지 템플릿을 저장하고 테스트할 수 있습니다.

가격 책정

이때, 저희는 1000건의 태스크당 $2로 가격을 설정합니다. 여기에 더하여, 태스크를 완료하는 순간마다 태스크 가격의 1/60을 추가로 지급합니다. 예를 들어, 태스크 한 건당 $0.002가 지급되며, 작업자가 태스크를 푸는 데 20초 정도 소요된다고 가정해봅시다.
최종 비용은 $0.00266 = 0.002 + (0.002 / 60 * 20)이 됩니다.

To conclude

이 글을 쓸 시점인 2021년 12월, 이 기능은 아직 "beta" 상태입니다. 주저하지 마시고 고객 서비스 팀을 통해 안티게이트 태스크에 대한 의견과 제안사항을 보내주시길 바랍니다.