# Tencent Slider Captcha Solver API (`mai_amm/tencent-slider-solver-api`) Actor

Bypass Tencent and Slider Captchas seamlessly using AI Computer Vision and Playwright.

- **URL**: https://apify.com/mai\_amm/tencent-slider-solver-api.md
- **Developed by:** [wiseld\_squid](https://apify.com/mai_amm) (community)
- **Categories:** AI, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $25.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Tencent Slider Captcha Solver API 🚀

An advanced Playwright and Computer Vision (OpenCV) based Actor that seamlessly bypasses Tencent Jigsaw Slider Captchas on any website.

The Actor automatically navigates to your target URL, waits for the Tencent Captcha iframe to appear, intercepts the puzzle piece and background images in real-time, calculates the exact pixel offset using OpenCV template matching, and simulates a human-like drag motion to bypass the security check.

### Good for

- Scraping data from websites protected by Tencent Captcha (e.g., Asian e-commerce, logistics trackers).
- Automating logins or form submissions that require sliding a puzzle piece.
- Generating authenticated Session Cookies for use in lightweight HTTP clients (Axios, Requests) without needing a browser.
- Bypassing captchas without paying 3rd-party solving services.

### What it returns

Each successful execution returns:

- **Session Cookies**: The full array of browser cookies generated after the captcha is solved (e.g., `TencentCaptchaTicket`, `Randstr`), which you can inject into your own scripts.
- **Status & Message**: Clear indicators of success or failure.
- **Resulting URL**: The final URL the browser landed on after the bypass.
- **Extracted Data**: Optional raw JSON data intercepted from the target website's backend APIs immediately after the captcha passes.

### Input example

```json
{
  "targetUrl": "https://login.tencent.com/",
  "triggerSelector": "#login-btn",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

### Input fields

| Field | Description | Default |
| --- | --- | --- |
| `targetUrl` | The URL of the webpage where the Captcha appears. | `https://www.jtexpress.co.th/tracking` |
| `triggerSelector` | (Optional) CSS Selector of the button to click to trigger the Captcha. Leave blank if it loads automatically. | Empty |
| `preActionScript` | (Optional) Custom JavaScript to run in the browser BEFORE waiting for the captcha (e.g., to fill a login form or tracking number). Has access to the `page` object. | Empty |
| `proxyConfiguration` | Apify proxy settings to prevent IP bans during the bypass process. | Apify Proxy enabled |

### Output example

```json
{
  "targetUrl": "https://login.tencent.com/",
  "success": true,
  "solvedAt": "2026-06-04T16:41:00.000Z",
  "cookies": [
    {
      "name": "TDC_ticket",
      "value": "tr03152648...88493",
      "domain": ".qq.com",
      "path": "/",
      "expires": 1718000000,
      "httpOnly": false,
      "secure": false
    },
    {
      "name": "verifysession",
      "value": "x2y3z4...",
      "domain": ".qq.com",
      "path": "/",
      "expires": 1718000000,
      "httpOnly": false,
      "secure": false
    }
  ]
}
```

### Advanced Usage (Pre-Action Script)

Some websites (like logistics trackers or complex logins) require you to fill out forms and navigate *before* the Captcha pops up. You can easily automate this by providing raw JavaScript to the `preActionScript` field.

The script runs inside the Node.js context and has full access to the Playwright `page` object.

**Example: Automating J\&T Express Tracking**

```json
{
  "targetUrl": "https://www.jtexpress.co.th/tracking",
  "preActionScript": "await page.waitForTimeout(3000);\nawait page.locator('button.cookies_btn').last().click().catch(() => {});\nawait page.waitForSelector('input.input_search', { timeout: 10000 });\nawait page.locator('input.input_search').click();\nawait page.locator('input.input_search').fill('823456789012');",
  "triggerSelector": "span.search_btn",
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### How it works

1. The Actor launches a headless Chromium browser using Playwright with stealth plugins.
2. It navigates to the `targetUrl`.
3. It intercepts the network requests to grab the background image (`img_index=1`) and the puzzle piece (`img_index=0`) natively without taking screenshots.
4. It feeds both images into an **OpenCV Template Matching** algorithm to calculate the exact X-axis distance.
5. It performs a randomized, human-like mouse drag (with slight overshoots and pauses) to solve the slider.
6. It extracts the resulting Cookies and intercepted Data, pushing them to the Apify Dataset.

### Notes

- **Zero 3rd-Party Fees**: This Actor solves the captcha natively using CPU/Memory, meaning you don't need to pay API keys to 2Captcha or CapSolver.
- **Proxy Required**: If you are solving hundreds of captchas per hour on the same site, make sure `useApifyProxy` is enabled to avoid fingerprint/IP bans.

### Local run

```bash
npm install
INPUT='{"targetUrl":"https://login.tencent.com/","triggerSelector":"#login-btn"}' npm start
```

# Actor input Schema

## `targetUrl` (type: `string`):

The URL of the page containing the Captcha (e.g., https://login.tencent.com/).

## `triggerSelector` (type: `string`):

CSS Selector of the button to click to trigger the Captcha (e.g., '#login-btn'). Leave blank if Captcha appears automatically.

## `preActionScript` (type: `string`):

Custom Javascript code to run in the browser BEFORE waiting for the captcha (e.g., to fill a login form). Has access to 'page'.

## `proxyConfiguration` (type: `object`):

Select proxies to be used by the scraper. Highly recommended for avoiding IP bans.

## Actor input object example

```json
{
  "targetUrl": "https://www.jtexpress.co.th/tracking",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Main dataset containing the bypassed session cookies and raw tracking data JSON.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "targetUrl": "https://www.jtexpress.co.th/tracking"
};

// Run the Actor and wait for it to finish
const run = await client.actor("mai_amm/tencent-slider-solver-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "targetUrl": "https://www.jtexpress.co.th/tracking" }

# Run the Actor and wait for it to finish
run = client.actor("mai_amm/tencent-slider-solver-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "targetUrl": "https://www.jtexpress.co.th/tracking"
}' |
apify call mai_amm/tencent-slider-solver-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=mai_amm/tencent-slider-solver-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tencent Slider Captcha Solver API",
        "description": "Bypass Tencent and Slider Captchas seamlessly using AI Computer Vision and Playwright.",
        "version": "0.1",
        "x-build-id": "7umGB0Y4gVSggVzXo"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/mai_amm~tencent-slider-solver-api/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-mai_amm-tencent-slider-solver-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/mai_amm~tencent-slider-solver-api/runs": {
            "post": {
                "operationId": "runs-sync-mai_amm-tencent-slider-solver-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/mai_amm~tencent-slider-solver-api/run-sync": {
            "post": {
                "operationId": "run-sync-mai_amm-tencent-slider-solver-api",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "targetUrl"
                ],
                "properties": {
                    "targetUrl": {
                        "title": "Target Webpage URL",
                        "type": "string",
                        "description": "The URL of the page containing the Captcha (e.g., https://login.tencent.com/)."
                    },
                    "triggerSelector": {
                        "title": "Trigger Selector (Optional)",
                        "type": "string",
                        "description": "CSS Selector of the button to click to trigger the Captcha (e.g., '#login-btn'). Leave blank if Captcha appears automatically."
                    },
                    "preActionScript": {
                        "title": "Pre-Action Script (Optional)",
                        "type": "string",
                        "description": "Custom Javascript code to run in the browser BEFORE waiting for the captcha (e.g., to fill a login form). Has access to 'page'."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxies to be used by the scraper. Highly recommended for avoiding IP bans.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
