reCAPTCHA 작업을 만들려면 websiteURL(캡차가 나타나는 페이지 주소)과 websiteKey(사이트 키)가 필요하고, v3는 pageAction도 필요해요. Selenium 같은 도구로 제출을 시뮬레이션할 때는 콜백 함수도 알아야 해요. 이 값들은 모두 브라우저 개발자 도구(F12)에서 찾을 수 있어요.
가장 빠른 방법: 자동 조회 스크립트
섹션 제목: “가장 빠른 방법: 자동 조회 스크립트”캡차가 나타나는 페이지를 열고 F12를 눌러 콘솔(Console)을 연 다음, 아래 스크립트를 붙여넣고 실행하세요.
// 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가 아직 로드되지 않은 거예요. 캡차가 나타난 뒤에 다시 실행하세요.
websiteKey와 websiteURL
섹션 제목: “websiteKey와 websiteURL”Network 패널에서 anchor를 검색해 다음과 같은 요청을 찾으세요.
https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&co=...&hl=en&size=normalk=뒤의 값이websiteKey예요.websiteURL에는 캡차가 나타나는 페이지의 전체 주소를 넣으세요(이 요청의Referer가 보통 그 주소예요).
페이지 소스에서 data-sitekey를 검색해도 찾을 수 있어요.
pageAction (v3)
섹션 제목: “pageAction (v3)”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 완료하기를 참고하세요.