指南
任务(令牌)
reCAPTCHA v2

ReCaptchaV2: 解决 reCAPTCHA v2

提示

使用 createTask 方法创建任务,并使用 getTaskResult 方法获取结果。

我们支持的任务 type 类型:

  • ReCaptchaV2TaskProxyLess 使用服务器的内置代理。
  • ReCaptchaV2EnterpriseTask 此任务类型需要您自己的代理。
  • ReCaptchaV2EnterpriseTaskProxyLess 使用服务器的内置代理。

创建任务

使用 createTask 方法创建一个任务。

在创建任务之前,如果您需要在playwright和puppeteer等自动化工具中使用token,您可能需要找到它们的callback函数。参考:

任务对象结构

警告

如果您不清楚如何设置参数,请使用CapSolver扩展程序自动获取所需参数。


如果您发现v2 token无效,请使用CapSolver扩展程序获取JSON配置并发送给我们的客服进行配置。配置后,这将大大提高token分数。

PropertiesTypeRequiredDescription
typeStringRequiredReCaptchaV2TaskProxyLess
ReCaptchaV2EnterpriseTask
ReCaptchaV2EnterpriseTaskProxyLess
websiteURLStringRequired加载验证码的目标网页的URL,最好提交完整的URL而不是仅提交主机名。
websiteKeyStringRequiredRecaptcha网站密钥。
proxyStringOptional了解 使用代理
pageActionStringOptional对于ReCaptchaV2,如果/anchor端点的payload中存在sa参数,请提交其值。
recaptchaDataSValueStringOptional对于ReCaptchaV2普通版本,如果/anchor端点的payload中存在s参数,请提交其值。
enterprisePayloadObjectOptional对于ReCaptchaV2企业版,如果/anchor端点的payload中存在s参数,请提交其值。
isInvisibleBoolOptional如果没有“我不是机器人”复选框但挑战仍会弹出,请传递true,通常在v2隐形模式下需要。
isSessionBoolOptional会话模式,启用后将返回recaptcha-ca-t值,该值用作cookie。它通常出现在v3中。

注意:有些网站需要recaptcha-ca-e值,这通常出现在v2中。如果存在此值,将自动返回,无需额外参数设置。
apiDomainStringOptional加载验证码的域名。通常,此参数无需传递。
http://www.google.com/
http://www.recaptcha.net/

请求示例

POST https://api.capsolver.com/createTask
Host: api.capsolver.com
Content-Type: application/json
{
  "clientKey": "YOUR_API_KEY",
  "task": {
    "type": "ReCaptchaV2Task",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "enterprisePayload": {
      "s": "SOME_ADDITIONAL_TOKEN" // Optional
    },
    "isInvisible": false, // Optional
    "pageAction": "submit", // Optional
    "apiDomain": "", // Optional
    "proxy": "http:ip:port:user:pass", // socks5:ip:port:user:pass, Optional
  }
}

将任务提交给我们后,如果成功,您将在响应中收到一个“taskId”。如果您没有收到任务ID,请阅读 errorCode: 完整的错误列表

响应示例

{
    "errorId": 0,
    "errorCode": "",
    "errorDescription": "",
    "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}

获取结果

获取到taskId后,您需要提交taskId来检索解决方案。响应结构在 getTaskResult 中解释。

根据系统负载,您将在1s10s的间隔内获得结果。

请求示例

POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json
 
{
    "clientKey": "YOUR_API_KEY",
    "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"
}

响应示例

{
    "errorId": 0,
    "errorCode": null,
    "errorDescription": null,
    "solution": {
        "userAgent": "xxx", // 用户代理
        "secChUa": "xxx", // Sec-Ch-Ua
        "createTime": 1671615324290, // token的创建时间
        "gRecaptchaResponse": "3AHJ......", // token
        "recaptcha-ca-t": "AbEM......", // 一些v3网站有会话模式。启用isSession后,此参数将返回并用作cookie。
        "recaptcha-ca-e": "Abp_......" // 一些v2网站有此参数,用作cookie。如果存在此值,将自动返回。
    },
    "status": "ready"
}

使用SDK请求

#pip install --upgrade capsolver
#export CAPSOLVER_API_KEY='...'
 
import capsolver
# capsolver.api_key = "..."
solution = capsolver.solve({
            "type": "ReCaptchaV2TaskProxyLess",
            "websiteURL": "https://www.google.com/recaptcha/api2/demo",
            "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
          })

示例代码

# pip install requests
import requests
import time
 
# TODO: set your config
api_key = "YOUR_API_KEY"  # 你的capsolver api key
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"  # 目标站点的site key
site_url = "https://www.google.com/recaptcha/api2/demo"  # 目标站点的页面url
 
 
def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'ReCaptchaV2TaskProxyLess',
            "websiteKey": site_key,
            "websiteURL": site_url
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("Failed to create task:", res.text)
        return
    print(f"Got taskId: {task_id} / Getting result...")
 
    while True:
        time.sleep(1)  # 延迟
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('gRecaptchaResponse')
        if status == "failed" or resp.get("errorId"):
            print("Solve failed! response:", res.text)
            return
 
 
token = capsolver()
print(token)