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

가이드

reCAPTCHA 파라미터 찾기

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

reCAPTCHA 작업을 만들려면 websiteURL(캡차가 나타나는 페이지 주소)과 websiteKey(사이트 키)가 필요하고, v3는 pageAction도 필요해요. Selenium 같은 도구로 제출을 시뮬레이션할 때는 콜백 함수도 알아야 해요. 이 값들은 모두 브라우저 개발자 도구(F12)에서 찾을 수 있어요.

가장 빠른 방법: 자동 조회 스크립트

섹션 제목: “가장 빠른 방법: 자동 조회 스크립트”

캡차가 나타나는 페이지를 열고 F12를 눌러 콘솔(Console)을 연 다음, 아래 스크립트를 붙여넣고 실행하세요.

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();

결과에서 sitekey가 websiteKey, pageurl이 websiteURL이에요. version은 v2인지 v3인지를 나타내고, function과 callback은 콜백 함수예요.

[
{
"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"
}
]

빈 배열이 반환되면 페이지에 reCAPTCHA가 아직 로드되지 않은 거예요. 캡차가 나타난 뒤에 다시 실행하세요.

Network 패널에서 anchor를 검색해 다음과 같은 요청을 찾으세요.

https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&co=...&hl=en&size=normal
  • k= 뒤의 값이 websiteKey예요.
  • websiteURL에는 캡차가 나타나는 페이지의 전체 주소를 넣으세요(이 요청의 Referer가 보통 그 주소예요).

페이지 소스에서 data-sitekey를 검색해도 찾을 수 있어요.

pageAction은 페이지가 grecaptcha.execute(사이트 키, {action: '...'})를 호출할 때 전달하는 action 값이에요. 반드시 페이지와 같아야 해요.

방법 1: 소스 검색. 개발자 도구의 Sources 패널에서 마우스 오른쪽 버튼을 눌러 “Search in all files”를 선택하세요. 일반 v3는 .execute(, Enterprise v3는 .enterprise.execute를 검색하고 뒤에 오는 action을 확인하세요.

grecaptcha.ready(function () {
grecaptcha.execute('6LdpS-gUAAAAAL3Qr2yP7rkrQjkKBVvEY_48JS5l', { action: 'login' }).then(function (token) {
// ...
});
});

여기서 pageAction은 login이에요.

방법 2: 브레이크포인트. 코드가 난독화되어 검색되지 않으면 콘솔에서 debug(grecaptcha.execute)(Enterprise는 debug(grecaptcha.enterprise.execute))를 실행한 뒤, 페이지에서 검증이 발생하는 동작(예: 로그인 클릭)을 하세요. 브레이크포인트에서 멈추면 오른쪽 Scope에서 action 값을 확인하세요.

한 사이트가 단계마다 다른 action을 쓸 수도 있어요(예: 회원가입 시 먼저 signup/submit_email, 그다음 signup/success). 통과하려는 단계의 값을 사용하세요. F8을 누르면 계속 실행되어 다음 action을 볼 수 있어요.

Selenium 등으로 브라우저에 토큰을 입력할 때는, 입력한 뒤 페이지의 콜백 함수를 호출해 검증이 끝났음을 페이지에 알려야 해요.

  • Elements 패널에서 data-callback을 검색하세요. 그 값이 콜백 함수 이름이에요. 예: data-callback="onSuccess"
  • 또는 grecaptcha.render를 검색해 인자의 callback을 확인하세요.
  • 또는 콘솔에서 ___grecaptcha_cfg.clients를 확인하거나 위의 자동 조회 스크립트를 사용하세요.

호출 방법:

driver.execute_script("onSuccess(arguments[0])", g_recaptcha_response)

콜백 함수가 없는 페이지도 있어요. 이럴 때는 토큰을 g-recaptcha-response 텍스트 상자에 입력한 뒤 바로 폼을 제출하면 돼요. 전체 과정은 토큰으로 reCAPTCHA 완료하기를 참고하세요.