# hCaptcha 图像识别

> 用 YesCaptcha 识别 hCaptcha 的图片题（HCaptchaClassification）：九宫格选择、点击指定位置、拖动到指定位置、动画题；同步返回，没识别出目标时不扣点。

Source: https://docs.yescaptcha.com/zh/tasks/hcaptcha-classification/ · Last verified: 2026-10-15

`HCaptchaClassification` 识别 hCaptcha 弹出的图片题：把题目和图片发过来，返回该选哪几张图、该点哪个位置或者从哪拖到哪，由你的程序在浏览器里操作。它**不返回 token**。同步返回，每次 8 点（0.008 元），没有识别出目标（结果为空）时不扣点。

> **提示:** 不想自己写点击逻辑，可以直接用 [浏览器插件](https://docs.yescaptcha.com/zh/extension/)，这几种题型插件都支持。想要 token 而不是点击位置，用 [hCaptcha](https://docs.yescaptcha.com/zh/tasks/hcaptcha/)。

- POST `https://api.yescaptcha.com/createTask` (国际节点)
- POST `https://cn.yescaptcha.com/createTask` (国内节点)

## 类型与价格

| 任务类型 | 价格 | 返回方式 | 说明 |
| --- | --- | --- | --- |
| `HCaptchaClassification` | 8 点（0.008 元） | 同步 | 没有识别出目标（结果为空）时不扣点 |

## 请求参数

| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `type` | string | 是 | 任务类型，取值见本页"类型与价格" |
| `queries` | array | 是 | 题目图片的 Base64 编码列表，按网页上的顺序（九宫格就是 9 张小图） |
| `question` | string | 否 | 题目原文整句，直接取网页上显示的（建议简体中文或英文），例如 `Please click each image containing a bicycle`。`question`、`anchors` 至少传一个，建议都传 |
| `anchors` | array | 否 | 提示图（题目旁边的示例小图）的 Base64 编码列表，有提示图的题目要传 |

-   `question` 直接取网页上显示的整句题目，不需要翻译，建议把 hCaptcha 切换成简体中文或英文。新的题目一般会很快支持，全新的类别 3 个工作日内支持。
-   题目右上角有提示小图的，要把小图放进 `anchors`；必须看小图才能判断的题目，不传 `anchors` 识别不了。

## 九宫格选择

题目是“请点击每个包含 … 的图像”，下面有 9 张小图。`queries` 按顺序放 9 张小图的 Base64：

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "HCaptchaClassification",
    "question": "Please click each image containing a bicycle",
    "queries": [
      "BASE64_IMAGE_1",
      "BASE64_IMAGE_2"
    ]
  }
}
```

返回：

```json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "objects": [true, false, false, true, true, false, true, true, false],
    "top_k": [0, 3, 4, 6, 7],
    "confidences": [1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0]
  }
}
```

`objects` 和 `top_k` 意思相同：前者是每张图是不是目标，后者是目标图片的序号（从 0 开始）。点击这些图片即可。

## 点击指定位置

题目是“请点击 …”，下面是一张大图，要点击图上的某个（或几个）位置。

1.  `question` 取网页上的题目；有示例小图的，放进 `anchors`。
2.  `queries` 放一张图：最好用 canvas 直接导出的原图（建议转成 JPG），只能截图的话截下面红框里的大图区域，不要多也不要少。
3.  返回的 `box` 是要点击的坐标，依次是 x1、y1、x2、y2……，以上传图片的左上角为原点。
4.  上传的图片尺寸和网页上显示的尺寸不同时要换算：网页上的 x = 返回的 x × 显示宽度 ÷ 上传图片宽度（y 同理）。例如返回 x = 769，canvas 显示宽 350、上传图片宽 1000，网页上要点 769 × 350 ÷ 1000 ≈ 269。

![点击题的截图范围：题目文字作为 question，三张示例小图作为 anchors，下面的大图作为 queries](https://docs.yescaptcha.com/_astro/hcaptcha-click-areas.DCBFUFPf_Z123RnJ.webp)

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "HCaptchaClassification",
    "question": "Please click on the entity present in the sample image.",
    "anchors": [
      "BASE64_ANCHOR_1",
      "BASE64_ANCHOR_2",
      "BASE64_ANCHOR_3"
    ],
    "queries": [
      "BASE64_OF_THE_BIG_IMAGE"
    ]
  }
}
```

返回：

```json
{ "errorId": 0, "status": "ready", "solution": { "box": ["221", "213"] } }
```

要点多个目标时，`box` 里依次是多组坐标：`["221", "213", "340", "118", ...]`。

## 拖动到指定位置

题目是“拖动 … 到 …”，要把右边的小块拖到图中对应的位置。

1.  `question` 取网页上的题目。
2.  截一张图放进 `queries`，图里要**同时**有要拖动的小块和目标位置，图片任意一边不小于 260 像素。
3.  返回的 `box` 里每一项是一次拖动：`start` 是小块的位置，`end` 是要拖到的位置。有多个小块时逐个拖动。

```json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "type": "drag",
    "box": [{ "start": [644, 218], "end": [239, 315] }]
  }
}
```

![拖动题的识别结果示意：Start 是要拖动的小块，End 是目标位置](https://docs.yescaptcha.com/_astro/hcaptcha-drag-result.vEj4iyUz_1Ou9zz.webp)

如果你拿到的是协议数据（小块的图片、小块的坐标和背景大图）而不是截图，要先按坐标把小块拼到大图上，拼成和网页截图一样的样式再发送。

## 动画题

题目图片是动画时，把动画（GIF 等格式）的 Base64 放进 `queries`。建议动画时长至少 3 秒、最好 5 到 6 秒，帧率约 12 FPS。

## 上报和返点

点击后验证失败的，可以在 1 小时内用 [`report`](https://docs.yescaptcha.com/zh/api/report/) 上报，约 24 小时后结算返点，规则见 [计费与退点](https://docs.yescaptcha.com/zh/getting-started/billing/)。

## 相关教程

-   [hCaptcha 图像识别模拟点击（Selenium）](https://docs.yescaptcha.com/zh/guides/hcaptcha-click-selenium/)
