콘텐츠로 이동
서비스 상태대시보드

가이드

캡차 유형 판별하기

이 페이지는 중국어 버전을 기계 번역한 것이라 부정확한 내용이 있을 수 있어요. 중국어 버전을 기준으로 해 주세요.

알맞은 작업 유형을 고르려면 먼저 캡차를 알아봐야 해요. 가장 확실한 방법은 브라우저 개발자 도구(F12)를 열고 Network(네트워크) 패널에서 페이지가 어떤 캡차 스크립트를 불러오는지 확인하는 거예요. 겉모습으로도 판단할 수 있어요.

각 캡차가 웹페이지에서 어떻게 보이는지 보여 주는 애니메이션 일러스트예요(스크린샷이 아니에요). 카드를 클릭하면 해당 작업 유형 페이지로 이동해요. 모양만으로 구별하기 어려우면 아래 빠른 참조표와 Network 패널로 확인하세요.

보이는 모습 종류 사용할 작업 유형
“로봇이 아닙니다(I’m not a robot)” 체크박스 reCAPTCHA v2 reCAPTCHA v2
체크박스가 없고, 제출을 누르면 이미지 문제가 나타나요. 오른쪽 아래에 reCAPTCHA 배지가 있어요 reCAPTCHA v2 인비저블(또는 v3) 아래 “reCAPTCHA 버전”을 참고하세요
아무 상호작용 없이 오른쪽 아래에 reCAPTCHA 배지만 있어요 reCAPTCHA v3 reCAPTCHA v3
“I am human” 체크박스, hCaptcha 표시가 있는 이미지 문제 hCaptcha hCaptcha
폼 안에 Cloudflare 인증 상자가 들어 있고, 체크한 뒤에도 페이지가 이동하지 않아요 Cloudflare Turnstile Turnstile
페이지 전체에 “Just a moment…” / “Checking your connection”이 표시되고 자동으로 이동해요 Cloudflare 챌린지 페이지 Cloudflare 챌린지 페이지
Arkose Labs의 퍼즐, 이미지 선택 문제(예: “올바른 방향의 이미지를 고르세요”) FunCaptcha FunCaptcha 이미지 인식
글자와 숫자가 왜곡된 이미지 한 장 문자 캡차 이미지 영숫자 인식

Network 패널에서 api.js 또는 enterprise.js를 검색하세요.

불러온 스크립트 버전
recaptcha/api.js, render 파라미터가 없거나 render=explicit v2 일반 버전
위와 같고, anchor 요청 주소에 size=invisible이 있어요 v2 인비저블 버전, 작업에 "isInvisible": true를 추가하세요
recaptcha/api.js?render=SITE_KEY (render가 explicit이 아닌 경우) v3 일반 버전
recaptcha/enterprise.js, render 파라미터가 없거나 render=explicit v2 Enterprise 버전
recaptcha/enterprise.js?render=SITE_KEY v3 Enterprise 버전

예시:

https://www.google.com/recaptcha/api.js?onload=onloadcallback&render=explicit → v2
https://www.google.com/recaptcha/api.js?render=6LdyC2cUAAAAACGuDKpXeDorzUDWXmdqeg-xy696 → v3
https://www.google.com/recaptcha/enterprise.js?render=explicit → v2 Enterprise

v2 인비저블 버전은 v3 유형으로만 통과되는 경우도 있으니 두 가지를 모두 시도해 보세요.

콘솔(Console)에서 아래 코드를 실행할 수도 있어요. 페이지에 있는 모든 reCAPTCHA의 버전, 사이트 키, 페이지 주소, 콜백 함수를 나열해 줘요.

find-recaptcha-clients.js
// Paste into the browser DevTools console on a page with reCAPTCHA, then run findRecaptchaClients().
// Lists every reCAPTCHA on the page: version (V2/V3), sitekey, page URL and the callback function.
function findRecaptchaClients() {
if (typeof ___grecaptcha_cfg === 'undefined') return [];
return Object.entries(___grecaptcha_cfg.clients).map(([cid, client]) => {
const data = { id: cid, version: cid >= 10000 ? 'V3' : 'V2' };
const objects = Object.entries(client).filter(([, value]) => value && typeof value === 'object');
objects.forEach(([toplevelKey, toplevel]) => {
const found = Object.entries(toplevel).find(
([, value]) => value && typeof value === 'object' && 'sitekey' in value && 'size' in value,
);
if (toplevel instanceof HTMLElement && toplevel.tagName === 'DIV') data.pageurl = toplevel.baseURI;
if (found) {
const [sublevelKey, sublevel] = found;
data.sitekey = sublevel.sitekey;
const callbackKey = data.version === 'V2' ? 'callback' : 'promise-callback';
const callback = sublevel[callbackKey];
if (!callback) {
data.callback = null;
data.function = null;
} else {
data.function = callback;
const keys = [cid, toplevelKey, sublevelKey, callbackKey].map((key) => `['${key}']`).join('');
data.callback = `___grecaptcha_cfg.clients${keys}`;
}
}
});
return data;
});
}
findRecaptchaClients();

실행 결과 예시:

[
{
"id": "0",
"version": "V2",
"sitekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
"function": "onSuccess",
"callback": "___grecaptcha_cfg.clients['0']['l']['l']['callback']",
"pageurl": "https://www.google.com/recaptcha/api2/demo"
}
]

비교용으로 Google 공식 데모 페이지를 사용할 수 있어요. v2 일반 버전은 https://www.google.com/recaptcha/api2/demo, v2 인비저블 버전은 https://www.google.com/recaptcha/api2/demo?invisible=true예요.

Turnstile과 Cloudflare 챌린지 페이지

섹션 제목: “Turnstile과 Cloudflare 챌린지 페이지”

둘 다 Cloudflare에서 제공하지만 서로 다른 종류예요.

  • Turnstile은 웹 페이지 폼에 삽입된 인증 상자예요. 인증이 끝나면 체크 표시가 나타나고 페이지는 이동하지 않아요. 페이지가 challenges.cloudflare.com/turnstile/v0/api.js를 불러와요. Turnstile을 사용하세요.
  • Cloudflare 챌린지 페이지는 페이지 전체가 Cloudflare의 검사 화면(“Just a moment…”, “example.com needs to review the security of your connection”)으로 바뀌어요. 안에 인증 상자가 있을 수도 있고, 통과하면 실제 페이지로 자동 이동해요. 소스에 __cf_chl_rt_tk 또는 cdn-cgi/challenge-platform이 있어요. Cloudflare 챌린지 페이지를 사용하세요.

프로그램으로 요청하면 403과 “Just a moment…“가 반환되는데 브라우저로는 바로 열린다면, 대부분 TLS 핑거프린트 때문에 차단된 거예요. 브라우저의 TLS 핑거프린트를 흉내 내는 라이브러리(예: curl_cffi)로 바꾸면 요청할 수 있고, 챌린지를 풀 필요가 없어요.