{
  "markdown": "# python-rucaptcha\n\n[![PyPI version](https://badge.fury.io/py/python-rucaptcha.svg)](https://badge.fury.io/py/python-rucaptcha)\n[![Python versions](https://img.shields.io/pypi/pyversions/python-rucaptcha.svg?logo=python&logoColor=FBE072)](https://badge.fury.io/py/python-rucaptcha)\n[![Downloads](https://static.pepy.tech/badge/python-rucaptcha/month)](https://pepy.tech/project/python-rucaptcha)\n[![Documentation](https://img.shields.io/badge/docs-Sphinx-green)](https://andreidrang.github.io/python-rucaptcha/)\n\n**Python 3.9+ library to solve CAPTCHAs automatically using RuCaptcha, 2Captcha, DeathByCaptcha, or CaptchaAI services.**\n\n> **Using CaptchaAI:** compatible high-level classes can pass `service_type=ServiceEnm.CAPTCHAAI`.\n> CaptchaAI uses the classic multipart `in.php`/`res.php` endpoints.\n> ```python\n> from python_rucaptcha.turnstile import Turnstile\n> from python_rucaptcha.core.enums import ServiceEnm\n> result = Turnstile(\n>     rucaptcha_key=\"CAPTCHAAI_KEY\",\n>     service_type=ServiceEnm.CAPTCHAAI,\n>     websiteURL=\"https://example.com\",\n>     websiteKey=\"0x4AAAAAAA...\",\n>     userAgent=\"Mozilla/5.0 ...\",\n> ).captcha_handler()\n> ```\n>\n> Proxy task types require `proxyType`, `proxyAddress`, and `proxyPort`; credentials are optional:\n> ```python\n> from python_rucaptcha.re_captcha import ReCaptcha\n> from python_rucaptcha.core.enums import ReCaptchaEnm, ServiceEnm\n>\n> result = ReCaptcha(\n>     rucaptcha_key=\"CAPTCHAAI_KEY\",\n>     service_type=ServiceEnm.CAPTCHAAI,\n>     websiteURL=\"https://example.com/login\",\n>     websiteKey=\"SITE_KEY\",\n>     method=ReCaptchaEnm.RecaptchaV2Task,\n>     proxyType=\"HTTPS\",\n>     proxyAddress=\"203.0.113.7\",\n>     proxyPort=3128,\n>     proxyLogin=\"user\",\n>     proxyPassword=\"pass\",\n> ).captcha_handler()\n> ```\n>\n> For every documented CaptchaAI method—or a provider method released after this package—use the native,\n> type-free client. `profile` validates a packaged documented contract; omit it to pass provider-native fields\n> through unchanged.\n> ```python\n> from python_rucaptcha.captchaai import CaptchaAI, CaptchaAIFile\n>\n> result = CaptchaAI(\n>     rucaptcha_key=\"CAPTCHAAI_KEY\",\n>     profile=\"cloudflare-challenge\",\n>     params={\n>         \"pageurl\": \"https://example.com/protected\",\n>         \"proxy\": \"user:pass@203.0.113.7:3128\",\n>         \"proxytype\": \"HTTPS\",\n>     },\n> ).captcha_handler()\n>\n> image = CaptchaAI(\n>     rucaptcha_key=\"CAPTCHAAI_KEY\",\n>     profile=\"normal-solve-file\",\n>     files={\"file\": CaptchaAIFile(b\"... PNG bytes ...\", \"captcha.png\", \"image/png\")},\n> ).captcha_handler()\n> ```\n\n## What is this?\n\nThis library automates CAPTCHA solving by connecting to third-party services. When your code encounters a CAPTCHA, python-rucaptcha sends it to the service, waits for a human to solve it, and returns the solution to your application.\n\n**Supports 30+ CAPTCHA types:**\n- reCAPTCHA v2/v3, hCaptcha, Cloudflare Turnstile\n- Image captchas, Audio captchas\n- GeeTest, KeyCaptcha, Amazon WAF, Tencent\n- And many more...\n\n## Quick Start\n\n### 1. Install\n\n```bash\npip install python-rucaptcha\n```\n\n### 2. Get an API Key\n\nSign up at [RuCaptcha](https://rucaptcha.com) or [2Captcha](https://2captcha.com), then copy your API key from the dashboard.\n\n### 3. Solve a CAPTCHA\n\n```python\nfrom python_rucaptcha import HCaptcha\n\n# Your API key\nkey = \"your_api_key_here\"\n\n# Solve hCaptcha\nresult = HCaptcha(aptcha_key=key).captcha_handler(site_url=\"https://example.com\", site_key=\"abc123\")\n\nif result['code'] == 0:\n    print(f\"Solved! Token: {result['token']}\")\nelse:\n    print(f\"Error: {result['message']}\")\n```\n\n### Solving Different CAPTCHA Types\n\n**reCAPTCHA v2:**\n```python\nfrom python_rucaptcha import ReCaptcha\n\nresult = ReCaptcha(api_key).captcha_handler(\n    site_url=\"https://example.com\",\n    site_key=\"your_site_key\"\n)\n```\n\n**Image CAPTCHA:**\n```python\nfrom python_rucaptcha import ImageCaptcha\n\nresult = ImageCaptcha(api_key).captcha_handler(\n    image_link=\"https://example.com/captcha.jpg\"\n)\n```\n\n**ALTCHA:**\n```python\nfrom python_rucaptcha import AltchaCaptcha\nfrom python_rucaptcha.core.enums import AltchaEnm\n\nresult = AltchaCaptcha(\n    rucaptcha_key=api_key,\n    websiteURL=\"https://example.com\",\n    challengeURL=\"https://example.com/altcha/challenge\",\n    method=AltchaEnm.AltchaTaskProxyless,\n).captcha_handler()\n```\n\n**Using async:**\n```python\nimport asyncio\nfrom python_rucaptcha import HCaptcha\n\nasync def solve():\n    result = await HCaptcha(api_key).aio_captcha_handler(\n        site_url=\"https://example.com\",\n        site_key=\"abc123\"\n    )\n    return result\n\ntoken = asyncio.run(solve())\n```\n\n## Supported CAPTCHA Types\n\n| CAPTCHA | Module | Description |\n|---------|--------|-------------|\n| reCAPTCHA v2/v3 | `ReCaptcha` | Google reCAPTCHA |\n| hCaptcha | `HCaptcha` | hCaptcha challenge |\n| Cloudflare Turnstile | `Turnstile` | Cloudflare protection |\n| Image | `ImageCaptcha` | Type the text from image |\n| Audio | `AudioCaptcha` | Listen and type audio |\n| GeeTest | `GeeTest` | Chinese geetest puzzles |\n| KeyCaptcha | `KeyCaptcha` | KeyCAPTCHA service |\n| Amazon WAF | `AmazonWaf` | AWS WAF challenge |\n| ALTCHA | `AltchaCaptcha` | ALTCHA challenge |\n| TSPD | `TSPDCaptcha` | Cookie-based TSPD protection |\n| Basilisk | `BasiliskCaptcha` | Token-based Basilisk challenge |\n| Alibaba | `AlibabaCaptcha` | Token-based Alibaba challenge |\n| Imperva/Incapsula | `IncapsulaCaptcha` | Cookie-based Imperva protection |\n| Binance | `BinanceCaptcha` | Token-based Binance challenge |\n| Grid | `GridCaptcha` | Select grid cells |\n| Coordinates | `CoordinatesCaptcha` | Click on coordinates |\n| And 20+ more | ... | See [full docs](https://andreidrang.github.io/python-rucaptcha/) |\n\n## Switching Services\n\nUse the same code with different services:\n\n```python\nfrom python_rucaptcha import HCaptcha\nfrom python_rucaptcha.core.enums import ServiceEnm\n\n# Use 2Captcha (default)\nresult = HCaptcha(\"2captcha_key\").captcha_handler(...)\n\n# Use RuCaptcha\nresult = HCaptcha(\"rucaptcha_key\", service_type=ServiceEnm.RuCaptcha).captcha_handler(...)\n\n# Use DeathByCaptcha\nresult = HCaptcha(\"dbc_user:dbc_pass\", service_type=ServiceEnm.DeathByCaptcha).captcha_handler(...)\n```\n\n## Testing\n\n```bash\n# Set your API key\nexport RUCAPTCHA_KEY=\"your_key_here\"\n\n# Run tests\nmake tests\n```\n\n## Documentation\n\nFor advanced usage, configuration options, and all CAPTCHA types, see the [full documentation](https://andreidrang.github.io/python-rucaptcha/).\n\n## Support\n\n- **Telegram:** [pythoncaptcha](https://t.me/pythoncaptcha)\n- **Email:** python-captcha@pm.me\n- **Issues:** [GitHub Issues](https://github.com/AndreiDrang/python-rucaptcha/issues)\n\n## Changelog\n\nSee [Releases](https://github.com/AndreiDrang/python-rucaptcha/releases) for full changelog.\n\n- **v6.0** - Refactored to use msgspec (faster), API v2, dropped Python 3.8\n- **v5.3** - Added DeathByCaptcha support\n- **v5.2** - Added audio CAPTCHA solving\n",
  "bytes": 6899,
  "sha": "156914f1a4cd5f8d9a0aa5fbd64a57a86c5bd41a75d4bf4a77c430fd5ec71832",
  "repo_slug": "andreidrang/python-rucaptcha",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_andreidrang_python_rucaptcha_okf_index_m_09869f93/readme"
}