Cypress로 CAPTCHA 우회하는 방법

Cypress에서 CAPTCHA 처리 방법을 알아보세요. 효과적인 우회 방법과 CAPTCHA가 지속될 때의 대처 방안을 포함하여 원활한 브라우저 자동화를 보장합니다.
2 분 읽기
How to Bypass CAPTCHAs With Cypress blog image

이 글에서 배울 내용:

  • CAPTCHA란 무엇이며 우회 가능한지
  • Cypress와 CAPTCHA의 관계
  • Cypress CAPTCHA 우회 로직 구현 방법
  • CAPTCHA가 여전히 표시될 경우의 대처 방법

자, 시작해 보겠습니다!

CAPTCHA란 무엇이며 자동화가 가능한가?

CAPTCHA는“컴퓨터와 인간을 구분하기 위한 완전 자동화된 공개 튜링 테스트(Completely Automated Public Turing tests to tell Computers and Humans Apart)”의 약자로, 실제 사용자와 자동화된 봇을 구분하는 데 사용되는 방법입니다. 이는 인간에게는 쉽게 풀 수 있지만 기계에게는 어려운 방식으로 설계된 과제입니다. 일반적으로 CAPTCHA는 봇을 차단하기 위해 웹 페이지의 특정 부분에 사용됩니다.

Google reCAPTCHA, hCaptcha, BotDetect가 가장 널리 쓰이는 CAPTCHA 제공업체입니다. 이들은 다음 과제 중 하나 이상을 지원합니다:

  • 텍스트 기반 CAPTCHA: 사용자는 왜곡된 문자 및/또는 숫자 시퀀스를 입력해야 합니다.
  • 이미지 기반 CAPTCHA: 사용자는 이미지 그리드에서 특정 개체를 식별해야 합니다.
  • 음성 기반 CAPTCHA: 사용자는 들리는 단어를 입력해야 합니다.
  • 퍼즐 CAPTCHA: 사용자는 간단한 질문에 답하거나 올바른 개체를 클릭하는 등 간단한 미니 게임을 해결해야 합니다.
Puzzle CAPTCHA example

CAPTCHA는 봇이 완료하지 못하도록 특정 사용자 흐름(예: 양식 제출)에 통합될 수 있습니다:

captcha as a step of a form submission process example

이러한 경우 CAPTCHA는 항상 표시되며 자동화된 로직으로 쉽게 우회할 수 없습니다. 소프트웨어를 CAPTCHA 해결 라이브러리와 통합하거나, 실시간으로 이러한 과제를 해결하는 인간 운영자에 의존하는 서비스를 활용할 수 있습니다. 그러나 하드코딩된 CAPTCHA는 성가시고 사용자 경험을 저하시키기 때문에 흔하지 않습니다.

보다 일반적으로 CAPTCHA는 WAF(웹 애플리케이션 방화벽)와 같은 고급 봇 방지 솔루션의 일부로 활용됩니다:

Example-of-a-Web-Application-Firewall

이러한 솔루션은 현재 사용자가 봇일 가능성이 있다고 판단될 때 동적으로 CAPTCHA를 표시합니다. 이 경우 봇이 실제 사용자와 유사하게 행동하도록 하고 실제 브라우저를 활용하면 CAPTCHA를 피할 수 있습니다. 그럼에도 불구하고 이는 지속적으로 진화하는 봇 탐지 조치를 처리하기 위해 자동화 스크립트를 계속 업데이트해야 하는 지속적인 싸움입니다.

CAPTCHA를 회피하는 더 효과적인 해결책은 Bright Data의 CAPTCHA Solver와 같이 항상 최신 상태를 유지하는 사용자 에뮬레이션 기반 도구를 사용하는 것입니다.

CAPTCHA와 Cypress: 나쁜 관계

Cypress는 현대 웹을 위해 설계된 프론트엔드 테스트 도구입니다. 웹 스크래핑과 같은 일반적인 브라우저 자동화 작업에도 사용할 수 있지만, 주요 초점은 엔드투엔드(E2E) 테스트에 있습니다. 즉, 주로 사용자가 통제할 수 있는 사이트 및 웹 페이지와 상호작용하도록 설계되었습니다.

Cypress로 외부 또는 타사 사이트를 대상으로 하면 문제가 발생하기 시작합니다. 공식 문서에서 강조하듯, 타사 사이트와의 상호작용은 최대한 피하는 것이 최선의 방법입니다. 문서에서 특히 강조하는 주요 이유 중 하나는 바로 봇으로 탐지되어 CAPTCHA를 받게 될 위험성입니다.

이것이 왜 문제일까요? CAPTCHA는 자동화된 스크립트를 차단하도록 설계되었기 때문입니다. 따라서 Cypress 브라우저 자동화 작업을 방해할 수 있습니다. 동시에 Cypress에서 CAPTCHA를 우회하는 것은 까다롭지만 가능하다는 점을 유의해야 합니다. 다음 섹션에서 자세히 알아보세요!

Cypress에서 CAPTCHA 처리 방법

방금 배운 바와 같이, CAPTCHA는 Cypress 문서에서도 인정하듯 Cypress의 주요 과제 중 하나입니다. 하지만 아직 백기를 들 때가 아닙니다. Cypress CAPTCHA 우회 로직 구현을 위한 몇 가지 잠재적 접근법을 살펴보겠습니다!

접근법 #1: CAPTCHA 비활성화

대부분의 CAPTCHA 제공업체는 테스트 환경에서 챌린지를 비활성화하거나 건너뛸 수 있는 방법을 제공합니다. 자동화를 수행해야 하는 사이트를 제어할 수 있다면 CAPTCHA 메커니즘을 완전히 비활성화하거나 더 간단한 버전으로 대체해야 합니다.

예를 들어, reCAPTCHA v3의 경우 테스트 환경용 별도 키를 생성할 수 있습니다. reCAPTCHA v2의 경우 다음 테스트 키를 사용할 수 있습니다:

  • 사이트 키: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
  • 비밀 키: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe

이러한 키를 사용할 경우 항상 아래와 같은 reCAPTCHA “No CAPTCHA” 위젯이 표시됩니다:

이는 실제 운영 환경에서 사용되지 않도록 특별 경고 메시지를 표시합니다. 해당 확인란 클릭을 자동화하면 항상 봇 방지 검증을 통과할 수 있습니다. 자세한 내용은 reCAPTCHA 문서에서 확인하세요.

다른 CAPTCHA 제공업체들도 유사한 메커니즘을 제공한다는 점에 유의하십시오.

방법 #2: CAPTCHA 상호작용 자동화

일부 CAPTCHA는 reCAPTCHA “No CAPTCHA” 위젯처럼 체크박스 클릭과 같은 간단한 동작만 요구합니다:

Simple clicking CAPTCHA example

이러한 검증은 단순해 보일 수 있지만, 실제로는 사용자의 마우스 움직임을 분석하여 인간인지 판단하는 정교한 방식일 수 있습니다. 하지만 모든 CAPTCHA가 이렇게 복잡한 것은 아닙니다. 기본적인 봇을 차단하기 위해 설계된 단순한 방식도 있으며, 이런 경우 Cypress 로직을 활용해 자동화할 수 있습니다.

위 예제의 CAPTCHA 요소를 검사해 보면 iframe임을 확인할 수 있습니다:

Inspecting the CAPTCHA element

이는 대부분의 CAPTCHA 제공업체에서 흔히 보이는 동작입니다.

Cypress는 크로스 도메인 iframe을 자동으로 처리할 수 없다는 점을 유의하세요. 이 제한을 극복하려면 cypress.json 파일에서 chromeWebSecurity 속성을 false로 설정하세요:

{

"chromeWebSecurity": false

}

그러면 CAPTCHA 확인란 요소를 선택하고 클릭할 수 있습니다. reCAPTCHA의 “No CAPTCHA” 위젯의 경우, 이를 수행하는 자동화 코드는 다음과 같습니다:

cy.get('iframe[src*=recaptcha]')

.its('0.contentDocument')

.should(d => d.getElementById('recaptcha-token').click())

이것은 단지 우회 방법일 뿐이며 대부분의 상황에서는 작동하지 않습니다. CAPTCHA는 로봇과 인간의 클릭을 구분할 만큼 정교해졌습니다. 결국 그것이 바로 CAPTCHA의 본질입니다.

CAPTCHA 자동화는 고양이와 쥐의 게임과 같으며, 오늘 효과가 있는 방법이 내일은 통하지 않을 수 있습니다. 최신 접근법은 이 방법이 유래된 GitHub gist를 참고하세요.

접근법 #3: 안티봇 브라우저 통합

앞서 소개한 두 가지 Cypress CAPTCHA 우회 방법은 실제 대상에 적용하기에는 가정 조건이 너무 많습니다. 더 효과적인 해결책은 Cypress가 안티디텍트 브라우저를 제어하도록 구성하는 것입니다. 안티디텍트 브라우저란 웹사이트가 자동화된 행동을 감지하지 못하도록 설계된 특수 브라우저입니다.

기본적으로 Cypress는 다음 목록 중 로컬에 설치된 브라우저 중 하나에 대한 접근을 제공합니다:

  • Chrome
  • Chrome 베타
  • Chrome Canary
  • 크로미움
  • Edge
  • Edge 베타
  • Edge Canary
  • Edge Dev
  • Electron
  • Firefox
  • Firefox 개발자 에디션
  • Firefox Nightly
  • WebKit (실험적)

이 외에도 모든 크로뮴 기반 브라우저를 지원합니다. 따라서 시중에서 가장 우수한 안티 탐지 브라우저 목록에서 크로뮴 기반 브라우저를 선택하고, 구매한 후 다운로드하여 컴퓨터에 설치하세요.

그런 다음 아래와 같이 Cypress에 지정된 브라우저로 스크립트를 실행하도록 지시할 수 있습니다:

cypress open --browser <브라우저 경로>

여기서 <브라우저_경로> 는 안티디텍트 브라우저 바이너리가 포함된 폴더의 절대 경로입니다.

마찬가지로, cypress.config.js에 다음 코드를 추가하여 Cypress UI에서 안티디텍트 브라우저를 선택 가능한 옵션으로 표시하도록 구성할 수 있습니다:

import { defineConfig } from 'cypress'

export default defineConfig({

e2e: {

setupNodeEvents(on, config) {

const antidetectBrowser = {

name: '<ANTIDETECT_BROWSER_NAME>',

channel: 'stable',

family: 'chromium',

displayName: '<ANTIDETECT_BROWSER_DISPLAY_NAME>',

version,

path: '<path_to_your_browser>',

majorVersion,

}

return {

browsers: config.browsers.concat(antidetectBrowser),

}

},

},

})

Cypress에 자동화 코드를 안티디텍트 브라우저에서 실행하도록 지시하는 것은 봇으로 탐지될 가능성을 줄일 뿐입니다. 안티봇 시스템이 자동화 코드 실행을 인지할 경우, 여전히 일부 CAPTCHA를 적용하여 차단할 수 있습니다.

위의 Cypress CAPTCHA 우회 솔루션이 작동하지 않을 때: 어떻게 해야 할까요?

위에서 제시한 세 가지 방법 모두 주요 단점이 있습니다:

  • 방법 #1: 대상 사이트의 코드 접근 권한이 필요하며, 외부 온라인 사이트를 다룰 때는 해당되지 않습니다.
  • 방법 #2: 매우 단순한 CAPTCHA에만 효과가 있으며 신뢰할 수 있는 기술이 아닙니다.
  • 방법 #3: 외부 서비스를 구매해야 하며, 프록시 통합을 위해 추가 비용이 발생할 수 있습니다. 또한 CAPTCHA를 해결하는 것이 아니라 회피하는 데만 도움이 됩니다.

이들 모두 시도해 볼 가치는 있지만, Cypress 자동화에서 프로그래밍 방식으로 CAPTCHA를 우회할 수 있는 방법은 없습니다.

진정한 Cypress CAPTCHA 우회 도구를 찾고 계신가요? Bright Data 웹 스크래핑 솔루션을 사용해 보세요!

이 솔루션은 전용 CAPTCHA 해결 기능을 통해 reCAPTCHA, hCaptcha, px_captcha, SimpleCaptcha, GeeTest CAPTCHA, FunCaptcha, Cloudflare Turnstile, AWS WAF Captcha, KeyCAPTCHA 등 다양한 CAPTCHA를 자동으로 처리하는 탁월한 잠금 해제 기능을 제공합니다.

Bright Data의 CAPTCHA Solver는 Cypress를 포함한 모든 HTTP 클라이언트 또는 브라우저 자동화 도구와 호환되므로 스크립트에 쉽게 통합할 수 있습니다.

Bright Data의 Web Unlocker 사용 방법에 대해 자세히 알아보세요. 또한 모든 통합 및 구성 세부 정보에 대한 문서를 확인하세요.

결론

이 글에서는 CAPTCHA가 무엇이며 Cypress에 왜 큰 도전 과제가 되는지 알아보았습니다. 또한 이를 우회하는 세 가지 방법을 살펴보았지만, 각 접근 방식에는 심각한 한계가 있습니다.

사이프레스의 CAPTCHA 우회 로직이 아무리 정교해도, 고도화된 봇 탐지 시스템은 여전히 스크립트를 자동화된 것으로 식별할 수 있습니다. 최선의 해결책은 모든 웹 페이지의 CAPTCHA 없는 HTML을 반환할 수 있는 언락킹 API를 통해 대상 사이트에 연결하는 것입니다.

이러한 API가 실제로 존재하며, 웹 언락커(Web Unlocker)라고 합니다. 이 API는 프록시 통합을 통해 요청마다 출구 IP를 자동으로 회전시키고, 브라우저 지문 인식(fingerprinting)을 처리하며, 자동 재시도를 수행하고, CAPTCHA를 대신 해결해 줍니다. 이제 봇 방지 조치가 더 이상 골칫거리가 아닙니다!

지금 등록하여 Bright Data 제품 중 귀하의 요구에 가장 적합한 것을 확인하세요. 오늘 무료 체험으로 시작하세요.