Skip to main content

Client library for solve captchas with Anticaptcha.com support.

Project description

python-anticaptcha

Build Status PyPI Chat Python compatibility

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 AnticatpchaException alias 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_anticaptcha-2.0.0.tar.gz (54.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_anticaptcha-2.0.0-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

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

Hashes for python_anticaptcha-2.0.0.tar.gz
Algorithm Hash digest
SHA256 4a5c4c1068cf5a24af2e91deda5615066b8399df544f103e60045de554b95fed
MD5 762135254ba2531434862054469983da
BLAKE2b-256 d5813584e7cefde3a83130f885760049735dcb598a2fdc17ddc8f8e82751eb95

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_anticaptcha-2.0.0.tar.gz:

Publisher: publish.yml on ad-m/python-anticaptcha

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_anticaptcha-2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for python_anticaptcha-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0b27481a54b73526f78752c57c3029585895ac3f7bcedbc5269bcd82c635dd66
MD5 d1303f0f36977e0b6d0c7491040e22d8
BLAKE2b-256 001fb0ec0f22985e5d1cf8e822ccf4eb708a4346608d54bf0e70950bdae9f491

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page