CAPSOLVER
博客
如何使用Python和GO解决reCAPTCHA

如何使用 Python 和 Go 解决 reCAPTCHA

Logo of CapSolver

Emma Foster

Machine Learning Engineer

24-Nov-2025

reCAPTCHA是由Google开发的一种广泛使用的安全措施,网站使用它来防止自动化机器人。它向用户提出挑战以验证其人类身份。在本文中,我们将探讨如何使用Python和Go编程解决reCAPTCHA挑战。我们将涵盖reCAPTCHA v2和v3,为您提供克服这些安全措施的知识和工具,用于您的网络爬虫项目。

什么是reCAPTCHA?

reCAPTCHA为网站提供强大的保护,有效防止欺诈活动和滥用,同时保持用户便利。它由智能风险评估引擎和自适应挑战驱动,有效阻止恶意软件并确保合法用户的顺畅访问。经过十多年的发展,reCAPTCHA积极保护无数网站的数据完整性。其无缝的方法可以轻松识别和阻止机器人和自动化攻击,同时仍允许真实用户无干扰地浏览。利用持续的机器学习,reCAPTCHA的自适应算法分析用户交互和机器人行为,超越了传统基于挑战的机器人检测方法的局限性。

reCAPTCHA有几种版本:

reCAPTCHA由Google开发,有几种版本,每种版本都以不同的方式区分人类和机器人:

  • reCAPTCHA v1:初始版本要求用户辨认扭曲的文本并将其输入文本框。
  • reCAPTCHA v2:此版本引入了一个复选框,让用户确认其人类身份。有时,它还可能提示用户从网格中选择特定的图片。
  • reCAPTCHA v3:与之前的版本不同,此版本在后台运行,分析用户行为以分配一个分数,表示人类或机器人活动的可能性。它提供无缝体验,不需要用户直接交互。

本文将重点介绍解决reCAPTCHA V2和V3。这些版本通常显示一个带有“我不是机器人”提示的复选框,或者可能显示为不可见的徽章,旨在区分真实用户和机器人。以下是其实际运行情况:

最佳的reCAPTCHA求解器:Capsolver

CapSolver 是市场上最优秀的 reCAPTCHA 求解器之一。它提供了一种经济实惠、快速且可靠的解决方案,利用 AI 驱动的 Captcha 求解算法,从而实现更快的求解速度和更低的成本。这一卓越的解决方案确保了处理 reCAPTCHA 挑战时的优秀开发者体验。

为什么选择 CapSolver?

经济实惠且快速:
CapSolver 提供具有竞争力的价格,使其成为解决 reCAPTCHAs 最具成本效益的选择之一。凭借其 AI 驱动的算法,它实现了更快的求解速度,节省了宝贵的时间。

高可靠性:
CapSolver 在类似供应商中拥有最快的更新速度,确保您能够访问最新和最准确的 Captcha 求解技术。这种可靠性确保了顺畅且无中断的求解体验。

无风险解决方案:
使用 CapSolver 时,您只需支付成功解决的 Captcha。他们严格的协作审查流程确保任何非法活动都能被迅速识别和禁止,为解决 reCAPTCHAs 提供了一个安全且值得信赖的平台。

AI 驱动的自动化:
CapSolver 利用人工智能的力量,提供完全自动化的 Captcha 求解。这消除了手动干预的需要,简化了求解过程并提高了效率。

兼容主流服务:
CapSolver 可无缝与主流手动 Captcha 识别服务的 API 配合使用,确保与各种平台和系统的兼容性。这种灵活性允许轻松集成到您的现有工作流程中。

多样化的解决方案:
除了其 API 服务外,CapSolver 还提供了一个 Chrome 扩展程序,扩展了其功能,并为解决 reCAPTCHAs 提供了更多选择。这种多功能性满足了不同的用户偏好和需求。

被广泛平台信任:
超过 1000 个平台集成了 CapSolver 的 API,使其获得了众多企业和开发者的信任和信心。这种广泛的采用证明了 CapSolver 解决方案的可靠性和有效性。

领取 CapSolver 奖励代码

不要错过进一步优化您的操作的机会!在充值 CapSolver 账户时使用奖励代码 CAPN,每次充值均可获得额外 5% 的奖励,没有限制。立即访问 CapSolver 来领取您的奖励!

如何通过 API 解决 reCAPTCHA v3

ReCaptchaV3Task

ReCaptchaV3Task 是一种需要您自己代理的求解任务类型。它适合那些拥有可靠代理池的用户。使用个人代理可以对求解过程进行更大的控制和自定义。

python 复制代码
# pip install --upgrade capsolver
# export CAPSOLVER_API_KEY='...'

import capsolver
# capsolver.api_key = "..."
solution = capsolver.solve({
    "type": "ReCaptchaV3Task",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-",
    "proxy":"ip:port:user:pass", ...
})

ReCaptchaV3TaskProxyLess

如果您没有代理访问权限或不想使用代理,ReCaptchaV3TaskProxyLess 是一个完美的选择。它利用服务器内置的代理,使过程更加流畅和用户友好。

python 复制代码
# pip install --upgrade capsolver
# export CAPSOLVER_API_KEY='...'

import capsolver

# capsolver.api_key = "..."
solution = capsolver.solve({
    "type": "ReCaptchaV3TaskProxyLess",
    "websiteURL": "https://www.google.com/recaptcha/api2/demo",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-", ...
})

步骤 1:创建任务

要开始这个过程,您需要使用 createTask 方法创建一个识别任务。

这是一个示例请求:

json 复制代码
POST https://api.capsolver.com/createTask

{
  "clientKey":"yourapiKey",
  "task": {
    "type":"ReCaptchaV3Task",
    "websiteURL":"https://antcpt.com/score_detector",
    "websiteKey":"6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf",
    "pageAction": "homepage",
    "proxy":"yourproxy"
  }
}

一旦任务成功提交,您将在响应中收到一个任务 ID:

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

步骤 2:获取结果

一旦您有了任务 ID,就可以使用它来获取解决方案。使用 getTaskResult 方法提交任务 ID。结果应该在 1 秒到 10 秒之间准备好。

这是一个示例请求:

json 复制代码
POST https://api.capsolver.com/getTaskResult
Host: api.capsolver.com
Content-Type: application/json

{
  "clientKey":"YOUR_API_KEY",
  "taskId": "TASKID OF CREATETASK" //由 createTask 方法创建的 ID
}

响应将包含解决方案令牌:

json 复制代码
{
  "errorId": 0,
  "errorCode": null,
  "errorDescription": null,
  "solution": {
    "userAgent": "xxx",
    "expireTime": 1671615324290,
    "gRecaptchaResponse": "3AHJ....."
  },
  "status": "ready"
}

在响应中,'solution' 包含 'userAgent',令牌的过期时间 'expireTime' 和解决方案令牌 'gRecaptchaResponse'。在验证码被解决后,您可以将令牌发送到网站以检查验证码令牌,例如:

json 复制代码
var request = require('request');

var options = {
  method: 'POST',
  url: 'https://antcpt.com/score_detector/verify.php',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ 'g-recaptcha-response': '这里是 Capsolver 的令牌' }),
};

request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

有关如何 解决 reCAPTCHA v2 的更多信息,请参阅此 文档

如何使用 Python 和 GO 解决 reCAPTCHA

reCAPTCHA v2 的示例代码

python 复制代码
# pip install requests
import requests
import time

# TODO: 设置您的配置
api_key = "YOUR_API_KEY"  # 您的 Capsolver API 密钥
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"  # 您目标网站的站点密钥
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("创建任务失败:", res.text)
        return
    print(f"获取到 taskId: {task_id} / 正在获取结果...")

    while True:
        time.sleep(3)  # 延迟
        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("求解失败!响应:", res.text)
            return


token = capsolver()
print(token)
go 复制代码
package main

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"net/http"
	"time"
)

type capSolverResponse struct {
	ErrorId          int32          `json:"errorId"`
	ErrorCode        string         `json:"errorCode"`
	ErrorDescription string         `json:"errorDescription"`
	TaskId           string         `json:"taskId"`
	Status           string         `json:"status"`
	Solution         map[string]any `json:"solution"`
}

func capSolver(ctx context.Context, apiKey string, taskData map[string]any) (*capSolverResponse, error) {
	uri := "https://api.capsolver.com/createTask"
	res, err := request(ctx, uri, map[string]any{
		"clientKey": apiKey,
		"task":      taskData,
	})
	if err != nil {
		return nil, err
	}
	if res.ErrorId == 1 {
		return nil, errors.New(res.ErrorDescription)
	}

	uri = "https://api.capsolver.com/getTaskResult"
	for {
		select {
		case <-ctx.Done():
			return res, errors.New("solve timeout")
		case <-time.After(time.Second):
			break
		}
		res, err = request(ctx, uri, map[string]any{
			"clientKey": apiKey,
			"taskId":    res.TaskId,
		})
		if err != nil {
			return nil, err
		}
		if res.ErrorId == 1 {
			return nil, errors.New(res.ErrorDescription)
		}
		if res.Status == "ready" {
			return res, err
		}
	}
}

func request(ctx context.Context, uri string, payload interface{}) (*capSolverResponse, error) {
	payloadBytes, err := json.Marshal(payload)
	if err != nil {
		return nil, err
	}
	req, err := http.NewRequestWithContext(ctx, "POST", uri, bytes.NewReader(payloadBytes))
	if err != nil {
		return nil, err
	}
	req.Header.Set("Content-Type", "application/json")
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()
	responseData, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}
	capResponse := &capSolverResponse{}
	err = json.Unmarshal(responseData, capResponse)
	if err != nil {
		return nil, err
	}
	return capResponse, nil
}

func main() {
	apikey := "YOUR_API_KEY"
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*120)
	defer cancel()

	res, err := capSolver(ctx, apikey, map[string]any{
		"type":       "ReCaptchaV2TaskProxyLess",
		"websiteURL": "https://www.google.com/recaptcha/api2/demo",
		"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
	})
	if err != nil {
		panic(err)
	}
	fmt.Println(res.Solution["gRecaptchaResponse"])
}

reCAPTCHA v3 的示例代码

python 复制代码
# pip install requests
import requests
import time

# TODO: 设置您的配置
api_key = "YOUR_API_KEY"  # 您的 Capsolver API 密钥
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-"  # 您目标网站的站点密钥
site_url = "https://www.google.com"  # 您目标网站的页面 URL


def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'ReCaptchaV3TaskProxyLess',
            "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("创建任务失败:", res.text)
        return
    print(f"获取到 taskId: {task_id} / 正在获取结果...")

    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("求解失败!响应:", res.text)
            return


token = capsolver()
print(token)
go 复制代码
package main

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"net/http"
	"time"
)

type capSolverResponse struct {
	ErrorId          int32          `json:"errorId"`
	ErrorCode        string         `json:"errorCode"`
	ErrorDescription string         `json:"errorDescription"`
	TaskId           string         `json:"taskId"`
	Status           string         `json:"status"`
	Solution         map[string]any `json:"solution"`
}

func capSolver(ctx context.Context, apiKey string, taskData map[string]any) (*capSolverResponse, error) {
	uri := "https://api.capsolver.com/createTask"
	res, err := request(ctx, uri, map[string]any{
		"clientKey": apiKey,
		"task":      taskData,
	})
	if err != nil {
		return nil, err
	}
	if res.ErrorId == 1 {
		return nil, errors.New(res.ErrorDescription)
	}

	uri = "https://api.capsolver.com/getTaskResult"
	for {
		select {
		case <-ctx.Done():
			return res, errors.New("solve timeout")
		case <-time.After(time.Second):
			break
		}
		res, err = request(ctx, uri, map[string]any{
			"clientKey": apiKey,
			"taskId":    res.TaskId,
		})
		if err != nil {
			return nil, err
		}
		if res.ErrorId == 1 {
			return nil, errors.New(res.ErrorDescription)
		}
		if res.Status == "ready" {
			return res, err
		}
	}
}

func request(ctx context.Context, uri string, payload interface{}) (*capSolverResponse, error) {
	payloadBytes, err := json.Marshal(payload)
	if err != nil {
		return nil, err
	}
	req, err := http.NewRequestWithContext(ctx, "POST", uri, bytes.NewReader(payloadBytes))
	if err != nil {
		return nil, err
	}
	req.Header.Set("Content-Type", "application/json")
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()
	responseData, err := io.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}
	capResponse := &capSolverResponse{}
	err = json.Unmarshal(responseData, capResponse)
	if err != nil {
		return nil, err
	}
	return capResponse, nil
}

func main() {
	apikey := "YOUR_API_KEY"
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*120)
	defer cancel()

	res, err := capSolver(ctx, apikey, map[string]any{
		"type":       "ReCaptchaV3TaskProxyLess",
		"websiteURL": "https://www.google.com",
		"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-",
	})
	if err != nil {
		panic(err)
	}
	fmt.Println(res.Solution["gRecaptchaResponse"])
}

}
res, err = request(ctx, uri, map[string]any{
"clientKey": apiKey,
"taskId": res.TaskId,
})
if err != nil {
return nil, err
}
if res.ErrorId == 1 {
return nil, errors.New(res.ErrorDescription)
}
if res.Status == "ready" {
return res, err
}
}
}

func request(ctx context.Context, uri string, payload interface{}) (*capSolverResponse, error) {
payloadBytes, err := json.Marshal(payload)
if err != nil {
return nil, err
}
req, err := http.NewRequestWithContext(ctx, "POST", uri, bytes.NewReader(payloadBytes))
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
responseData, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
capResponse := &capSolverResponse{}
err = json.Unmarshal(responseData, capResponse)
if err != nil {
return nil, err
}
return capResponse, nil
}

func main() {
apikey := "YOUR_API_KEY"
ctx, cancel := context.WithTimeout(context.Background(), time.Second*120)
defer cancel()

复制代码
res, err := capSolver(ctx, apikey, map[string]any{
	"type":       "ReCaptchaV3TaskProxyLess",
	"websiteURL": "https://www.google.com",
	"websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-",
})
if err != nil {
	panic(err)
}
fmt.Println(res.Solution["gRecaptchaResponse"])

}

复制代码
  
## 总结
使用 Python 和 Go 编程解决 reCAPTCHA 挑战,并结合强大的 [CapSolver](https://dashboard.capsolver.com/dashboard/overview/?utm_source=blog&utm_medium=article&utm_campaign=price-intelligence-captcha) 解决方案,为网络爬虫和自动化任务提供了有效的途径。通过理解 reCAPTCHA v2 和 v3 的复杂性,并利用 CapSolver 的功能,开发者人员可以高效且可靠地克服这些安全措施。按照提供的完整指南和代码示例,您可以成功将 CapSolver 集成到 Python 和 Go 应用程序中,无缝解决 reCAPTCHA 挑战。

# **常见问题**

### **1. 本文重点是什么?**

本文解释了如何使用 Python 和 Go 编程解决 reCAPTCHA v2 和 v3,包括完整的 API 工作流程和示例代码。

### **2. 适用于哪些人群?**

从事网络爬虫、自动化、SEO 工具、监控系统或任何遇到 reCAPTCHA 挑战的工作流程的开发人员。

### **3. 支持哪些 reCAPTCHA 版本?**

reCAPTCHA v2(复选框和不可见)和 reCAPTCHA v3(基于分数)。

### **4. 开始需要什么?**

* 目标网站的 sitekey
* 页面 URL
* CapSolver API 密钥
* 可选:代理(用于非无代理任务类型)

### **5. 可以直接使用代码示例吗?**

可以。替换 API 密钥、sitekey 和目标 URL,代码将按提供的内容运行。

### **6. 解决通常需要多长时间?**

通常在 1-10 秒之间,具体取决于验证码难度和环境。

### **7. 如何验证返回的令牌是否有效?**

将 `gRecaptchaResponse` 提交到网站的验证端点(文章中提供了示例)。

### **8. 支持无代理模式吗?**

是的,reCAPTCHA v2 和 v3 都有无代理任务类型,非常适合没有代理的用户。

### **9. 是否它保证 reCAPTCHA v3 的高分吗?**

它提供高质量的环境模拟,但最终分数取决于 Google 的风险评估。

### **10. 可以用于大规模或商业项目吗?**

是的。该 API 适用于大规模爬虫、自动化流水线和可扩展系统。

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多