알맞은 작업 유형을 고르려면 먼저 캡차를 알아봐야 해요. 가장 확실한 방법은 브라우저 개발자 도구(F12)를 열고 Network(네트워크) 패널에서 페이지가 어떤 캡차 스크립트를 불러오는지 확인하는 거예요. 겉모습으로도 판단할 수 있어요.
모양으로 구별하기
섹션 제목: “모양으로 구별하기”각 캡차가 웹페이지에서 어떻게 보이는지 보여 주는 애니메이션 일러스트예요(스크린샷이 아니에요). 카드를 클릭하면 해당 작업 유형 페이지로 이동해요. 모양만으로 구별하기 어려우면 아래 빠른 참조표와 Network 패널로 확인하세요.
- 로봇이 아닙니다reCAPTCHA개인정보처리방침 - 약관
- 이메일비밀번호••••••••제출reCAPTCHA로 보호됨개인정보처리방침 - 약관
- "objects": [1, 5, 8]일치하는 이미지를 모두 선택하세요:자동차해당하는 이미지가 없으면 건너뛰기를 클릭하세요012345678확인
- 사람입니다hCaptcha개인정보처리방침 - 약관
- "top_k": [0, 3, 4, 6, 7]자전거가 포함된 이미지를 모두 클릭하세요012345678건너뛰기확인
- 이메일[email protected]확인하는 중...사람인지 확인하세요성공!CLOUDFLARE개인정보 보호 • 약관로그인
- 잠시만 기다리십시오...예시 사이트×example.com
example.com
사람인지 확인하는 중입니다. 몇 초 정도 걸릴 수 있습니다.
확인하는 중...사람인지 확인하세요성공!CLOUDFLARE개인정보 보호 • 약관example.com은(는) 계속하기 전에 연결의 보안을 검토해야 합니다.
Use the arrows to change the number of objects until it matches the left image (1 of 1)
Submit3 ×Match This!←→- "top_k": [1, 4, 5, 6, 7]
사람인지 확인할게요
모두 선택하세요: 모자
012345678확인 - "text": "LMResm"
빠른 참조표
섹션 제목: “빠른 참조표”| 보이는 모습 | 종류 | 사용할 작업 유형 |
|---|---|---|
| “로봇이 아닙니다(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 이미지 인식 |
| 글자와 숫자가 왜곡된 이미지 한 장 | 문자 캡차 | 이미지 영숫자 인식 |
reCAPTCHA 버전
섹션 제목: “reCAPTCHA 버전”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 → v2https://www.google.com/recaptcha/api.js?render=6LdyC2cUAAAAACGuDKpXeDorzUDWXmdqeg-xy696 → v3https://www.google.com/recaptcha/enterprise.js?render=explicit → v2 Enterprisev2 인비저블 버전은 v3 유형으로만 통과되는 경우도 있으니 두 가지를 모두 시도해 보세요.
콘솔(Console)에서 아래 코드를 실행할 수도 있어요. 페이지에 있는 모든 reCAPTCHA의 버전, 사이트 키, 페이지 주소, 콜백 함수를 나열해 줘요.
// 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)로 바꾸면 요청할 수 있고, 챌린지를 풀 필요가 없어요.