İçeriğe geç
DurumPanel

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.

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:

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

Çı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.

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=normal
  • k= değerinden sonraki kısım websiteKey’dir.
  • websiteURL olarak, CAPTCHA’nın göründüğü sayfanın tam adresini yazın (bu isteğin Referer değeri genellikle odur).

Sayfa kaynağında data-sitekey araması da yapabilirsiniz.

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.

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-callback araması yapın; değeri callback fonksiyonunun adıdır, örneğin data-callback="onSuccess".
  • Ya da grecaptcha.render araması yapıp parametrelerdeki callback değerine bakın.
  • Ya da konsolda ___grecaptcha_cfg.clients nesnesini 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.