Kılavuzlar
reCAPTCHA parametrelerini bulma
Bu sayfa Çince sürümden makine çevirisiyle hazırlanmıştır ve hatalar içerebilir. Geçerli olan Çince sürüm sürümüdür.
Bir reCAPTCHA görevi oluşturmak için websiteURL (CAPTCHA’nın göründüğü sayfanın adresi) ve websiteKey (site anahtarı) gerekir; v3 için ayrıca pageAction gerekir. Selenium gibi araçlarla tarayıcıyı yönlendirirken callback fonksiyonunu da bilmeniz gerekir. Bunların hepsini tarayıcının geliştirici araçlarında (F12) bulabilirsiniz.
En hızlı yol: otomatik bulma betiği
Bölüm başlığı “En hızlı yol: otomatik bulma betiği”CAPTCHA’nın göründüğü sayfayı açın, F12 ile Console’u açın, aşağıdaki betiği yapıştırıp çalıştırın:
// 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();Çıktıda sitekey değeri websiteKey, pageurl değeri websiteURL’dir; version v2 mi v3 mü olduğunu gösterir, function ve callback ise callback fonksiyonudur:
[ { "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" }]Boş dizi dönerse sayfada reCAPTCHA henüz yüklenmemiştir; CAPTCHA göründükten sonra betiği yeniden çalıştırın.
websiteKey ve websiteURL
Bölüm başlığı “websiteKey ve websiteURL”Network panelinde anchor araması yapın ve şuna benzer bir istek bulun:
https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&co=...&hl=en&size=normalk=değerinden sonraki kısımwebsiteKey’dir.websiteURLolarak, CAPTCHA’nın göründüğü sayfanın tam adresini yazın (bu isteğinRefererdeğeri genellikle odur).
Sayfa kaynağında data-sitekey araması da yapabilirsiniz.
pageAction (v3)
Bölüm başlığı “pageAction (v3)”pageAction, sayfanın grecaptcha.execute(site anahtarı, {action: '...'}) çağrısında geçirdiği action değeridir ve sayfadakiyle aynı olmalıdır.
Yöntem 1: kaynakta arama. Geliştirici araçlarında Sources panelinde sağ tıklayıp “Search in all files” seçin. Normal v3 için .execute(, v3 Enterprise için .enterprise.execute aratın ve ardından gelen action değerine bakın:
grecaptcha.ready(function () { grecaptcha.execute('6LdpS-gUAAAAAL3Qr2yP7rkrQjkKBVvEY_48JS5l', { action: 'login' }).then(function (token) { // ... });});Burada pageAction değeri login’dir.
Yöntem 2: breakpoint. Kod obfuscate edilmişse ve arama sonuç vermiyorsa, konsolda debug(grecaptcha.execute) komutunu çalıştırın (Enterprise için debug(grecaptcha.enterprise.execute)), ardından sayfada doğrulamayı tetikleyen işlemi yapın (örneğin giriş düğmesine tıklayın). Debugger durduğunda sağdaki Scope bölümünde action değerini okuyun.
Bir site farklı adımlarda farklı action değerleri kullanabilir (örneğin kayıtta önce signup/submit_email, sonra signup/success); geçmeniz gereken adımın değerini kullanın. Sonraki action değerini görmek için F8 ile devam edin.
Callback fonksiyonu
Bölüm başlığı “Callback fonksiyonu”Selenium gibi araçlarla token’ı tarayıcıda sayfaya girdikten sonra, doğrulamanın tamamlandığını bildirmek için sayfanın callback fonksiyonunu çağırmanız gerekir:
- Elements panelinde
data-callbackaraması yapın; değeri callback fonksiyonunun adıdır, örneğindata-callback="onSuccess". - Ya da
grecaptcha.renderaraması yapıp parametrelerdekicallbackdeğerine bakın. - Ya da konsolda
___grecaptcha_cfg.clientsnesnesini inceleyin veya yukarıdaki otomatik bulma betiğini kullanın.
Çağırma yöntemi:
driver.execute_script("onSuccess(arguments[0])", g_recaptcha_response)Bazı sayfalarda callback fonksiyonu yoktur; bu durumda token’ı g-recaptcha-response metin kutusuna yazıp formu doğrudan gönderin. Tüm akış için bkz. Token ile reCAPTCHA’yı geçme.