产品集成资源文档定价
立即开始

© 2026 CapSolver. All rights reserved.

联系我们

Slack: lola@capsolver.com

产品

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • 浏览器插件
  • 更多验证码类型

集成

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • 合作伙伴
  • 查看所有集成

资源

  • 推荐返佣系统
  • 官方文档
  • API 参考
  • 博客
  • 常见问题 (FAQ)
  • 术语表
  • 系统状态

法律声明

  • 服务条款
  • 隐私政策
  • 退款政策
  • 请勿出售我的信息
博客/reCAPTCHA/使用 Python、Java 和 C++ 解决 reCAPTCHA
Oct25, 2024

使用 Python、Java 和 C++ 解决 reCAPTCHA

Ethan Collins

Ethan Collins

Pattern Recognition Specialist

当我第一次开始使用 reCAPTCHA 时,我发现它是一把双刃剑。一方面,它非常适合过滤机器人,但另一方面,它对于合法的自动化项目来说却是一个不小的障碍。因此,在这篇文章中,我将指导你使用三种强大的编程语言(Python、Java 和 C++)来解决 reCAPTCHA。每种语言在处理 reCAPTCHA 挑战方面都有自己的优势,根据项目的需求提供灵活性。我们将首先了解什么是 CAPTCHA 和 reCAPTCHA,以及它们在网络安全中的重要性。

什么是 CAPTCHA?

让我们从最基本的概念开始:什么是 CAPTCHA,或“完全自动化的公共图灵测试以区分计算机和人类”,这是一种常见的用来区分人类用户和机器人的方法。它通过要求用户解决对人类来说很容易但对机器来说很难的任务来帮助网站避免自动化攻击、垃圾邮件或利用。这可能是识别扭曲的文本、选择包含特定对象的图像或解决逻辑谜题。

什么是 reCAPTCHA?

reCAPTCHA 是一种由 Google 开发的服务,通过区分人类用户和机器人来帮助保护网站免受垃圾邮件和滥用。它随着时间的推移发展出不同的版本,每个版本都提供特定的功能。

  1. reCAPTCHA v2: 这是最常见的形式,用户需要解决的任务例如点击复选框(“我不是机器人”)或选择图像。它更加人性化,但仍然可能会根据风险因素显示挑战。

  2. reCAPTCHA v3: 此版本在后台运行,不会中断用户。它根据用户行为分配风险分数(0.0 到 1.0)。低风险用户无需验证即可通过,而可疑活动可能会触发验证步骤。

  3. reCAPTCHA Enterprise: 此版本专为企业级保护而设计,为大型企业提供增强的安全功能。它提供高级分析、机器学习模型和针对高风险交易量身定制的基于风险的评估,并提供更大的定制选项以满足业务安全需求。

这些版本中的每一个都旨在提供最佳安全性,同时最大程度地减少对合法用户的阻碍,适应机器人和攻击的日益复杂化。

  1. reCAPTCHA v2 演示
    查看 reCAPTCHA v2 演示
  2. reCAPTCHA v3 演示
    查看 reCAPTCHA v3 演示
  3. reCAPTCHA Enterprise 演示
    了解有关 reCAPTCHA Enterprise 的更多信息

在 Python、Java 和 C++ 中解决 reCAPTCHA

每种语言在处理 reCAPTCHA 挑战时都具有独特的优势:

  • Python 以其简洁性和大量用于网页自动化和数据抓取的库而闻名。使用像 Selenium 和 Playwright 这样的库,你可以轻松地自动执行浏览器任务并使用合适的工具绕过 CAPTCHA。

  • Java 非常适合企业级应用程序和跨平台项目。它的多线程功能和像 Selenium WebDriver 这样的框架允许在可扩展系统中流畅地处理 reCAPTCHA。

  • C++ 提供性能优势,使其成为需要速度和低延迟的系统的理想选择。虽然不太常用于自动化,但它可以与其他工具集成以在高性能环境中解决 reCAPTCHA 挑战。

介绍 CapSolver

当你继续前进时,你会注意到,由于不断变化的算法和复杂性,解决 reCAPTCHA 挑战可能变得很棘手。这就是 CapSolver 的用武之地。它是一种专门的服务,以高精度自动执行 reCAPTCHA 解决过程,处理多种 CAPTCHA 类型,包括 reCAPTCHA v2、reCAPTCHA v3 等等。通过将 CapSolver 集成到你的 Python、Java 或 C++ 项目中,你可以将解决 CAPTCHA 的复杂性卸载到专门的服务中,从而使你的脚本能够平稳高效地运行。

接下来,我们将逐步介绍每种语言的示例代码以及如何在项目中快速集成 CapSolver...

附加代码

领取用于顶级验证码解决方案的 奖励代码;CapSolver:WEBS。兑换后,你每次充值后将获得额外的 5% 奖励,无限次

如何使用 Python 解决 reCAPTCHA

先决条件

步骤 1. 获取站点密钥
对于 V2 和 V3,你可以在浏览器请求日志中搜索请求 /recaptcha/api2/reload?k=6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf,其中 k= 是我们需要的值

步骤 2. 区分 V2 和 V3

V2 和 V3 的处理方法不同。V2 需要图像识别来选择答案,而 V3 相对不显眼;但是,V3 在验证期间需要提供一个 Action。根据之前获得的键值,在响应页面中搜索,你将在页面中找到 Action 值

步骤 3. 调用 CapSolver 服务

区分 reCAPTCHA 版本

  • 在浏览器请求日志中,你可以看到对于 V2,在 /recaptcha/api2/reload 请求之后,通常需要一个 /recaptcha/api2/userverify 请求来获取通行令牌;
  • 对于 V3,/recaptcha/api2/reload 请求可以直接获取通行令牌

CapSolver API 调用的完整示例

  • Python reCAPTCHA V2
python Copy
# 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

# site_key = "6LelzS8UAAAAAGSL60ADV5rcEtK0x0lRsHmrtm62"
# site_url = "https://mybaragar.com/index.cfm?event=page.SchoolLocatorPublic&DistrictCode=BC45"


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)
  • Python reCAPTCHA V3
python Copy
# pip install requests
import requests
import time

# TODO: 设置你的配置
api_key = "YOUR_API_KEY"  # 你在 capsolver 中的 api 密钥

site_key = "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf"  # 你目标网站的站点密钥
site_url = "https://antcpt.com/score_detector/"  # 你目标网站的页面 URL


def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'ReCaptchaV3TaskProxyLess',
            "websiteKey": site_key,
            "websiteURL": site_url,
            "pageAction": "homepage",
        }
    }
    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

# 验证分数
def score_detector(token):
    headers = {
        "accept": "application/json, text/javascript, */*; q=0.01",
        "accept-language": "fr-CH,fr;q=0.9",
        "content-type": "application/json",
        "origin": "https://antcpt.com",
        "priority": "u=1, i",
        "referer": "https://antcpt.com/score_detector/",
        "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"macOS\"",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
        "x-requested-with": "XMLHttpRequest"
    }
    url = "https://antcpt.com/score_detector/verify.php"
    data = {
        "g-recaptcha-response": token
    }
    data = json.dumps(data, separators=(',', ':'))
    response = requests.post(url, headers=headers, data=data)

    print(response.json())
    print(response)

token = capsolver()
print(token)

...
...
{
    'success': True, 
    'challenge_ts': '2024-07-19T10:50:56Z', 
    'hostname': 'antcpt.com', 
    'score': 0.7, 
    'action': 'homepage'
}

如何使用 Java 解决 reCAPTCHA

先决条件

在我们深入代码之前,你应该先完成以下几个先决条件,以便成功地完成本教程:

  • Node.js 和 npm: 我们将使用 Node.js(一个 JavaScript 运行时)以及 npm(Node 包管理器)来管理项目依赖项。如果你还没有安装 Node.js,可以从 Node.js 官方网站 下载。
  • CapSolver API 密钥: 要有效地 解决 reCAPTCHA 挑战,你需要访问像 CapSolver 这样的服务,它专门负责以编程方式解决 CAPTCHA 挑战。确保你注册并从 CapSolver 获取 API 密钥,以便将其集成到你的解决方案中。

完成这些先决条件后,你就可以准备设置环境并开始使用 JavaScript 和 CapSolver 解决 reCAPTCHA 挑战。

步骤 1:获取站点密钥

  • 在浏览器的请求日志中,搜索请求
    /recaptcha/api2/reload?k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-,其中 k= 后面的值是我们需要的站点密钥。或者你可以通过 CapSolver 扩展 找到解决 reCAPTCHA 的所有参数
  • URL 是触发 reCAPTCHA V2 的页面的地址。

步骤 2:安装 requests 库

bash Copy
pip install requests

步骤 3:示例代码

python Copy
import requests
import time
from DrissionPage import ChromiumPage

# 创建 ChromiumPage 实例
page = ChromiumPage()

# 访问触发 reCAPTCHA 的示例页面
page.get("https://www.google.com/recaptcha/api2/demo")

# TODO: 设置你的配置
api_key = "你在 capsolver 中的 api 密钥"  # 你的 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
        }
    }
    # 向 CapSolver 发送请求以创建任务
    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

def check():
    # 获取 reCAPTCHA 解决方案
    token = capsolver()
    # 设置 reCAPTCHA 响应值
    page.run_js(f'document.getElementById("g-recaptcha-response").value="{token}"')
    # 调用成功回调函数
    page.run_js(f'onSuccess("{token}")')
    # 提交表单
    page.ele('x://input[@id="recaptcha-demo-submit"]').click()

if __name__ == '__main__':
    check()

如何使用 C++ 解决 reCAPTCHA

先决条件

在开始之前,请确保已安装以下库:

  1. cpr: 一个 C++ HTTP 库。
  2. jsoncpp: 一个用于 JSON 解析的 C++ 库。

你可以使用 vcpkg 安装它们:

bash Copy
vcpkg install cpr jsoncpp

步骤 1:设置你的项目

创建一个新的 C++ 项目,并包含 cpr 和 jsoncpp 的必要头文件。

cpp Copy
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>

步骤 2:定义用于创建和获取任务结果的函数

我们将定义两个主要函数:createTask 和 getTaskResult。

  1. createTask: 此函数创建 reCAPTCHA 任务。
  2. getTaskResult: 此函数检索已创建任务的结果。

以下是完整代码:

cpp Copy
#include <iostream>
#include <cpr/cpr.h>
#include <json/json.h>

std::string createTask(const std::string& apiKey, const std::string& websiteURL, const std::string& websiteKey) {
    Json::Value requestBody;
    requestBody["clientKey"] = apiKey;
    requestBody["task"]["type"] = "ReCaptchaV2Task";
    requestBody["task"]["websiteURL"] = websiteURL;
    requestBody["task"]["websiteKey"] = websiteKey;

    Json::StreamWriterBuilder writer;
    std::string requestBodyStr = Json::writeString(writer, requestBody);

    cpr::Response response = cpr::Post(
        cpr::Url{"https://api.capsolver.com/createTask"},
        cpr::Body{requestBodyStr},
        cpr::Header{{"Content-Type", "application/json"}}
    );

    Json::CharReaderBuilder reader;
    Json::Value responseBody;
    std::string errs;
    std::istringstream s(response.text);
    std::string taskId;

    if (Json::parseFromStream(reader, s, &responseBody, &errs)) {
        if (responseBody["errorId"].asInt() == 0) {
            taskId = responseBody["taskId"].asString();
        } else {
            std::cerr << "错误: " << responseBody["errorCode"].asString() << std::endl;
        }
    } else {
        std::cerr << "解析响应失败: " << errs << std::endl;
    }

    return taskId;
}

std::string getTaskResult(const std::string& apiKey, const std::string& taskId) {
    Json::Value requestBody;
    requestBody["clientKey"] = apiKey;
    requestBody["taskId"] = taskId;

    Json::StreamWriterBuilder writer;
    std::string requestBodyStr = Json::writeString(writer, requestBody);

    while (true) {
        cpr::Response response = cpr::Post(
            cpr::Url{"https://api.capsolver.com/getTaskResult"},
            cpr::Body{requestBodyStr},
            cpr::Header{{"Content-Type", "application/json"}}
        );

        Json::CharReaderBuilder reader;
        Json::Value responseBody;
        std::string errs;
        std::istringstream s(response.text);

        if (Json::parseFromStream(reader, s, &responseBody, &errs)) {
            if (responseBody["status"].asString() == "ready") {
                return responseBody["solution"]["gRecaptchaResponse"].asString();
            } else if (responseBody["status"].asString() == "processing") {
                std::cout << "任务仍在处理中,等待 5 秒..." << std::endl;
                std::this_thread::sleep_for(std::chrono::seconds(5));
            } else {
                std::cerr << "错误: " << responseBody["errorCode"].asString() << std::endl;
                break;
            }
        } else {
            std::cerr << "解析响应失败: " << errs << std::endl;
            break;
        }
    }

    return "";
}

int main() {
    std::string apiKey = "YOUR_API_KEY";
    std::string websiteURL = "https://example.com";
    std::string websiteKey = "SITE_KEY";

    std::string taskId = createTask(apiKey, websiteURL, websiteKey);
    if (!taskId.empty()) {
        std::cout << "任务创建成功。任务 ID: " << taskId << std::endl;
        std::string recaptchaResponse = getTaskResult(apiKey, taskId);
        std::cout << "reCAPTCHA 响应: " << recaptchaResponse << std::endl;
    } else {
        std::cerr << "创建任务失败。" << std::endl;
    }

    return 0;
}

最后的想法

在结束时,我可以自信地说,将 CapSolver 集成到我的项目中,使处理 reCAPTCHA 挑战变得容易得多。无论是 V2 还是 V3,流程都很简单,并且为我节省了大量时间。如果你也遇到了类似的挑战,我强烈建议你尝试一下 CapSolver——它对我来说是一个游戏规则改变者。

查看更多

reCAPTCHAApr 16, 2026

reCAPTCHA 无效的站点密钥或令牌?原因与解决指南

遇到“reCAPTCHA 无效的站点密钥”或“无效的 reCAPTCHA 令牌”错误?发现常见原因、逐步修复方法和故障排除技巧,以解决 reCAPTCHA 验证失败的问题。学习如何修复 reCAPTCHA 验证失败,请再试一次。

Aloísio Vítor
Aloísio Vítor
reCAPTCHAMar 25, 2026

如何解决 reCAPTCHA v2 Python 和 API

学习如何使用 Python 和 API 解决 reCAPTCHA v2。这份全面指南涵盖代理和无代理方法,提供可用于自动化的生产就绪代码。

Nikolai Smirnov

目录

Nikolai Smirnov
reCAPTCHAFeb 27, 2026

如何自动化破解reCAPTCHA以用于人工智能基准测试平台

学习如何自动化处理reCAPTCHA v2和v3以进行AI基准测试。使用CapSolver优化数据收集并保持高性能的AI流水线。

Aloísio Vítor
Aloísio Vítor
reCAPTCHAFeb 12, 2026

如何修复网络爬虫中的常见reCAPTCHA问题

学习如何解决网络爬虫中的常见reCAPTCHA问题。探索针对reCAPTCHA v2和v3的实用解决方案,以确保数据收集流程的顺畅。

Sora Fujimoto
Sora Fujimoto