Client library for solve captchas with Anticaptcha.com support.
Project description
python-anticaptcha
Client library for solving captchas with Anticaptcha.com support. The library requires Python >= 3.9.
The library is cyclically and automatically tested for proper operation. We are constantly making the best efforts for its effective operation.
In case of any problems with integration - read the documentation, create an issue, use Gitter or contact privately.
Getting Started
Install as standard Python package using:
pip install python-anticaptcha
For async support (FastAPI, aiohttp, Starlette, etc.):
pip install python-anticaptcha[async]
Usage
To use this library you need Anticaptcha.com API key.
You can pass the key explicitly or set the ANTICAPTCHA_API_KEY environment variable:
# Explicit key
client = AnticaptchaClient("my-api-key")
# Or set ANTICAPTCHA_API_KEY environment variable
client = AnticaptchaClient()
The client can be used as a context manager to ensure the underlying session is closed:
with AnticaptchaClient(api_key) as client:
job = client.create_task(task)
job.join()
Async Usage
For async frameworks, use AsyncAnticaptchaClient — the API mirrors the sync
client but all methods are awaitable:
from python_anticaptcha import AsyncAnticaptchaClient, NoCaptchaTaskProxylessTask
api_key = '174faff8fbc769e94a5862391ecfd010'
site_key = '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-'
url = 'https://www.google.com/recaptcha/api2/demo'
async with AsyncAnticaptchaClient(api_key) as client:
task = NoCaptchaTaskProxylessTask(url, site_key)
job = await client.create_task(task)
await job.join()
print(job.get_solution_response())
The full integration example is available in file examples/async_recaptcha_request.py.
Sync Usage
Solve recaptcha
Example snippet for Recaptcha:
from python_anticaptcha import AnticaptchaClient, NoCaptchaTaskProxylessTask
api_key = '174faff8fbc769e94a5862391ecfd010'
site_key = '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-' # grab from site
url = 'https://www.google.com/recaptcha/api2/demo'
client = AnticaptchaClient(api_key)
task = NoCaptchaTaskProxylessTask(url, site_key)
job = client.create_task(task)
job.join()
print(job.get_solution_response())
The full integration example is available in file examples/sync_recaptcha_request.py.
If you process the same page many times, to increase reliability you can specify
whether the captcha is visible or not. This parameter is not required, as the
system detects invisible sitekeys automatically. To provide that, pass
is_invisible parameter to NoCaptchaTaskProxylessTask or NoCaptchaTask eg.:
from python_anticaptcha import AnticaptchaClient, NoCaptchaTaskProxylessTask
api_key = '174faff8fbc769e94a5862391ecfd010'
site_key = '6Lc-0DYUAAAAAOPM3RGobCfKjIE5STmzvZfHbbNx' # grab from site
url = 'https://losangeles.craigslist.org/lac/kid/d/housekeeper-sitting-pet-care/6720136191.html'
client = AnticaptchaClient(api_key)
task = NoCaptchaTaskProxylessTask(url, site_key, is_invisible=True)
job = client.create_task(task)
job.join()
print(job.get_solution_response())
Solve text captcha
Example snippet for text captcha:
from python_anticaptcha import AnticaptchaClient, ImageToTextTask
api_key = '174faff8fbc769e94a5862391ecfd010'
client = AnticaptchaClient(api_key)
# From a file path:
task = ImageToTextTask('examples/captcha_ms.jpeg')
# Or from raw bytes:
# task = ImageToTextTask(open('examples/captcha_ms.jpeg', 'rb').read())
# Or from a file object:
# task = ImageToTextTask(open('examples/captcha_ms.jpeg', 'rb'))
job = client.create_task(task)
job.join()
print(job.get_captcha_text())
Solve funcaptcha
Example snippet for funcaptcha:
from python_anticaptcha import AnticaptchaClient, FunCaptchaTask, Proxy
UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 ' \
'(KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
api_key = '174faff8fbc769e94a5862391ecfd010'
site_key = 'DE0B0BB7-1EE4-4D70-1853-31B835D4506B' # grab from site
url = 'https://www.google.com/recaptcha/api2/demo'
proxy = Proxy.parse_url("socks5://login:password@123.123.123.123:1080")
client = AnticaptchaClient(api_key)
task = FunCaptchaTask(url, site_key, user_agent=UA, **proxy.to_kwargs())
job = client.create_task(task)
job.join()
print(job.get_token_response())
Monitor solve progress
You can pass an on_check callback to job.join() to monitor progress:
def progress(elapsed, status):
print(f"Elapsed: {elapsed}s, status: {status}")
job = client.create_task(task)
job.join(on_check=progress)
Report incorrect image
Example snippet for reporting an incorrect image task:
from python_anticaptcha import AnticaptchaClient, ImageToTextTask
api_key = '174faff8fbc769e94a5862391ecfd010'
captcha_fp = open('examples/captcha_ms.jpeg', 'rb')
client = AnticaptchaClient(api_key)
task = ImageToTextTask(captcha_fp)
job = client.create_task(task)
job.join()
print(job.get_captcha_text())
job.report_incorrect_image()
Setup proxy
The library is not responsible for managing the proxy server. However, we point to the possibility of simply launching such a server by:
pip install mitmproxy
mitmweb -p 9190 -b 0.0.0.0 --ignore '.' --socks
Then in your application use something like:
proxy = Proxy.parse_url("socks5://123.123.123.123:9190")
We recommend entering IP-based access control for incoming addresses to proxy. IP address required by Anticaptcha.com is:
69.65.41.21
209.212.146.168
Error handling
In the event of an application error, the AnticaptchaException exception is thrown. To handle the exception, do the following:
from python_anticaptcha import AnticaptchaException, ImageToTextTask
try:
# any actions
except AnticaptchaException as e:
if e.error_code == 'ERROR_ZERO_BALANCE':
notify_about_no_funds(e.error_id, e.error_code, e.error_description)
else:
raise
Note: The legacy misspelled
AnticatpchaExceptionalias is still available for backward compatibility.
Versioning
We use SemVer for versioning. For the versions available, see the tags on this repository.
Authors
- Adam Dobrawy - Initial work - ad-m
See also the list of contributors who participated in this project.
License
This project is licensed under the MIT License - see the LICENSE.md file for details
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_anticaptcha-2.0.0.tar.gz.
File metadata
- Download URL: python_anticaptcha-2.0.0.tar.gz
- Upload date:
- Size: 54.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a5c4c1068cf5a24af2e91deda5615066b8399df544f103e60045de554b95fed
|
|
| MD5 |
762135254ba2531434862054469983da
|
|
| BLAKE2b-256 |
d5813584e7cefde3a83130f885760049735dcb598a2fdc17ddc8f8e82751eb95
|
Provenance
The following attestation bundles were made for python_anticaptcha-2.0.0.tar.gz:
Publisher:
publish.yml on ad-m/python-anticaptcha
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
python_anticaptcha-2.0.0.tar.gz -
Subject digest:
4a5c4c1068cf5a24af2e91deda5615066b8399df544f103e60045de554b95fed - Sigstore transparency entry: 1484339036
- Sigstore integration time:
-
Permalink:
ad-m/python-anticaptcha@b1bbee2c7add919e385ba4b03a9e1e64d26e8b79 -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/ad-m
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b1bbee2c7add919e385ba4b03a9e1e64d26e8b79 -
Trigger Event:
push
-
Statement type:
File details
Details for the file python_anticaptcha-2.0.0-py3-none-any.whl.
File metadata
- Download URL: python_anticaptcha-2.0.0-py3-none-any.whl
- Upload date:
- Size: 20.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b27481a54b73526f78752c57c3029585895ac3f7bcedbc5269bcd82c635dd66
|
|
| MD5 |
d1303f0f36977e0b6d0c7491040e22d8
|
|
| BLAKE2b-256 |
001fb0ec0f22985e5d1cf8e822ccf4eb708a4346608d54bf0e70950bdae9f491
|
Provenance
The following attestation bundles were made for python_anticaptcha-2.0.0-py3-none-any.whl:
Publisher:
publish.yml on ad-m/python-anticaptcha
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
python_anticaptcha-2.0.0-py3-none-any.whl -
Subject digest:
0b27481a54b73526f78752c57c3029585895ac3f7bcedbc5269bcd82c635dd66 - Sigstore transparency entry: 1484339405
- Sigstore integration time:
-
Permalink:
ad-m/python-anticaptcha@b1bbee2c7add919e385ba4b03a9e1e64d26e8b79 -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/ad-m
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b1bbee2c7add919e385ba4b03a9e1e64d26e8b79 -
Trigger Event:
push
-
Statement type: