# 查找 reCAPTCHA 参数

> 怎么找 reCAPTCHA 的 websiteKey（sitekey）、websiteURL、v3 的 pageAction 和回调函数：在开发者工具的 Network、Sources、Console 里查找，附自动查找脚本。

Source: https://docs.yescaptcha.com/zh/guides/find-recaptcha-parameters/ · Last verified: 2026-10-15

创建 reCAPTCHA 任务需要 `websiteURL`（出现验证码的网页地址）和 `websiteKey`（网站密钥），v3 还需要 `pageAction`。用 Selenium 之类的工具模拟提交时，还要知道回调函数。这些都能在浏览器的开发者工具（F12）里找到。

## 最快的办法：自动查找脚本

打开出现验证码的网页，按 F12 打开控制台（Console），粘贴并运行：

find-recaptcha-clients.js

```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` 是回调函数：

```json
[
  {
    "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

在 Network 面板里搜索 `anchor`，找到类似这样的请求：

```text
https://www.google.com/recaptcha/api2/anchor?ar=1&k=6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9&co=...&hl=en&size=normal
```

-   `k=` 后面的值就是 `websiteKey`。
-   `websiteURL` 填出现验证码的那个网页的完整地址（这个请求的 `Referer` 一般就是它）。

也可以在页面源码里搜 `data-sitekey`。

## pageAction（v3）

`pageAction` 是网页调用 `grecaptcha.execute(网站密钥, {action: '...'})` 时传的 `action`，必须和网页的一致。

**方法一：搜索源码。** 在开发者工具的 Sources 面板里右键“Search in all files”，普通 v3 搜 `.execute(`，企业版 v3 搜 `.enterprise.execute`，看后面的 `action`：

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

这里 `pageAction` 是 `login`。

**方法二：断点。** 代码被混淆、搜不到时，在控制台运行 `debug(grecaptcha.execute)`（企业版 `debug(grecaptcha.enterprise.execute)`），然后在网页上进行会触发验证的操作（例如点登录）。断点停下后，在右侧 Scope 里看 `action` 的值。

一个网站可能在不同步骤用不同的 `action`（例如注册时先 `signup/submit_email` 再 `signup/success`），要取你要通过的那一步的值。按 F8 继续执行，可以看到下一个 `action`。

## 回调函数

用 Selenium 等工具在浏览器里填 token 时，填完要调用网页的回调函数，告诉网页验证已完成：

-   在 Elements 面板搜索 `data-callback`，它的值就是回调函数名，例如 `data-callback="onSuccess"`。
-   或者搜索 `grecaptcha.render`，看参数里的 `callback`。
-   或者在控制台查看 `___grecaptcha_cfg.clients`，或用上面的自动查找脚本。

调用方法：

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

有的网页没有回调函数，把 token 填进 `g-recaptcha-response` 文本框后直接提交表单即可。完整流程见 [用 token 完成 reCAPTCHA](https://docs.yescaptcha.com/zh/guides/submit-recaptcha-token/)。
