ReCaptchaV2: 解决 reCAPTCHA v2
提示
使用 createTask 方法创建任务,并使用 getTaskResult 方法获取结果。
我们支持的任务 type
类型:
ReCaptchaV2TaskProxyLess
使用服务器的内置代理。ReCaptchaV2EnterpriseTask
此任务类型需要您自己的代理。ReCaptchaV2EnterpriseTaskProxyLess
使用服务器的内置代理。
创建任务
使用 createTask 方法创建一个任务。
在创建任务之前,如果您需要在playwright和puppeteer等自动化工具中使用token,您可能需要找到它们的callback函数。参考:
任务对象结构
警告
如果您不清楚如何设置参数,请使用CapSolver扩展程序自动获取所需参数。
- 参考文章:如何检测任何验证码并提取其参数
如果您发现v2 token无效,请使用CapSolver扩展程序获取JSON配置并发送给我们的客服进行配置。配置后,这将大大提高token分数。
Properties | Type | Required | Description |
---|---|---|---|
type | String | Required | ReCaptchaV2TaskProxyLess ReCaptchaV2EnterpriseTask ReCaptchaV2EnterpriseTaskProxyLess |
websiteURL | String | Required | 加载验证码的目标网页的URL,最好提交完整的URL而不是仅提交主机名。 |
websiteKey | String | Required | Recaptcha网站密钥。 |
proxy | String | Optional | 了解 使用代理。 |
pageAction | String | Optional | 对于ReCaptchaV2,如果/anchor 端点的payload中存在sa 参数,请提交其值。 |
recaptchaDataSValue | String | Optional | 对于ReCaptchaV2普通版本,如果/anchor 端点的payload中存在s 参数,请提交其值。 |
enterprisePayload | Object | Optional | 对于ReCaptchaV2企业版,如果/anchor 端点的payload中存在s 参数,请提交其值。 |
isInvisible | Bool | Optional | 如果没有“我不是机器人”复选框但挑战仍会弹出,请传递true,通常在v2隐形模式下需要。 |
isSession | Bool | Optional | 会话模式,启用后将返回recaptcha-ca-t 值,该值用作cookie。它通常出现在v3中。注意:有些网站需要 recaptcha-ca-e 值,这通常出现在v2中。如果存在此值,将自动返回,无需额外参数设置。 |
apiDomain | String | Optional | 加载验证码的域名。通常,此参数无需传递。 • 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 中解释。
根据系统负载,您将在1s
到10s
的间隔内获得结果。
请求示例
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)