Skip to content

Latest commit

 

History

History
753 lines (585 loc) · 33 KB

README.md

File metadata and controls

753 lines (585 loc) · 33 KB

anycaptcha

Telegram channel PyPI version info PyPI supported Python versions PyPI downloads per month

pip install anycaptcha

anycaptcha is a unified Python API for CAPTCHA solving services.

Special thanks to unicaps lib

Key Features

  • A unified Python interface that is independent of the service used
  • Uses native service protocol/endpoints (eg, no needs in patching hosts file)
  • Modern asynchronous client
  • Supports 10 types of CAPTCHAs
  • Written Pythonic way and is intended for humans
  • Supports proxies in any format thanks to better-proxy

Supports 9 CAPTCHA solving services:

Example

from pathlib import Path
from anycaptcha import Solver, Service

API_KEY = '<PLACE_YOUR_API_KEY_HERE>'


async def main():
    async with Solver(Service.TWOCAPTCHA, API_KEY) as solver:
        solved = await solver.solve_image_captcha(
            Path("captcha.jpg"),
            is_phrase=False,
            is_case_sensitive=True
        )
        print(f'CAPTCHA text: {solved.solution.text}')
        await solved.report_good()

Supported CAPTCHAs / Services

Service Image Text reCAPTCHA v2 reCAPTCHA v3 FunCaptcha KeyCAPTCHA Geetest Geetest v4 hCaptcha Capy
2captcha.com
rucaptcha.com
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

Image CAPTCHA

Service Regular Case Sensitive Phrase Numbers only Letters only Math Length Language Comment for worker
2captcha.com Cyrillic/Latin
rucaptcha.com Cyrillic/Latin
anti-captcha.com Latin
azcaptcha.com Latin
cap.guru Latin
deathbycaptcha.com Latin

Text CAPTCHA

Text Captcha is a type of captcha that is represented as text and doesn't contain images. Usually you have to answer a question to pass the verification. For example: "If tomorrow is Saturday, what day is today?".

Service Language
2captcha.com English, Russian
rucaptcha.com English, Russian
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

reCAPTCHA v2

Service Regular Invisible Enterprise Google service1 Proxy2 Cookies3 User-Agent4
2captcha.com
rucaptcha.com
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

1 Support of solving reCAPTCHA on Google services (e.g. Google Search)
2 Support of solving via proxy server
3 Support of passing custom cookies
4 Support of passing custom User-Agent header

reCAPTCHA v3

Service Regular Enterprise Proxy Cookies User-Agent
2captcha.com
rucaptcha.com
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

FunCaptcha (Arkose Labs)

Service Regular Data (BLOB) Proxy Cookies User-Agent
2captcha.com
rucaptcha.com
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

KeyCAPTCHA

Service Regular Proxy Cookies User-Agent
2captcha.com
rucaptcha.com
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

Geetest

Service Regular API server GetLib Proxy Cookies User-Agent
2captcha.com
rucaptcha.com
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

Geetest v4

Service Regular Proxy Cookies User-Agent
2captcha.com
rucaptcha.com
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

hCaptcha

Service Regular Invisible Custom Data Proxy Cookies User-Agent
2captcha.com
rucaptcha.com
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

Capy Puzzle

Service Regular API server Proxy Cookies User-Agent
2captcha.com
rucaptcha.com
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

Supported Proxy types

Service HTTP HTTPS SOCKS 4 SOCKS 5
2captcha.com
rucaptcha.com
anti-captcha.com
azcaptcha.com
cap.guru
deathbycaptcha.com

How to...

Common

Get balance
from anycaptcha import Solver, Service


async def main():
    async with Solver(Service.ANTI_CAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        balance = await solver.get_balance()
        ...
Get service status (is the service is up?)
from anycaptcha import Solver, Service


async def main():
    with Solver(Service.ANTI_CAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # get status of the service (True - everything is Okay, False - probably the service is down)
        status = await solver.get_status()
        ...
Get technical details after solving
from anycaptcha import Solver, Service


async def main():
    # init captcha solver and solve the captcha
    with Solver(Service.ANTI_CAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        solved = await solver.solve_...(...)

        # get cost of the solving
        cost = solved.cost

        # get cookies (if any)
        cookies = solved.cookies

        # report good captcha
        await solved.report_good()

        # report bad captcha
        await solved.report_bad()

        # get solving start time
        start_time = solved.start_time

        # get solving end time
        end_time = solved.end_time

CAPTCHAs

Solve Image CAPTCHA
from pathlib import Path

from anycaptcha import Solver, Service
from anycaptcha import CaptchaAlphabet
from anycaptcha import CaptchaCharType


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_image_captcha(
            image=Path('captcha.jpg'),  # it can be a Path, file-object or bytes.
            char_type=CaptchaCharType.ALPHA,  # optional
            is_phrase=False,  # optional
            is_case_sensitive=True,  # optional
            is_math=False,  # optional
            min_len=4,  # optional
            max_len=6,  # optional
            alphabet=CaptchaAlphabet.LATIN,  # optional
            comment='Type RED letters only'  # optional
        )
        # get CAPTCHA text
        token = solved.solution.text
Solve reCAPTCHA v2
from anycaptcha import Solver, Service

# get page URL and site_key from your page
page_url = ...
site_key = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_recaptcha_v2(
            site_key=site_key,
            page_url=page_url,
            data_s='<data-s value>',  # optional
            api_domain='<"google.com" or "recaptcha.net">'  # optional
        )
        # get response token
        token = solved.solution.token
Solve reCAPTCHA v2 Invisible
from anycaptcha import Solver, Service

# get page url and site_key from your page
page_url = ...
site_key = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_recaptcha_v2(
            site_key=site_key,
            page_url=page_url,
            is_invisible=True,
            data_s='<data-s value>',  # optional
            api_domain='<"google.com" or "recaptcha.net">'  # optional
        )
        # get response token
        token = solved.solution.token
Solve reCAPTCHA v2 Enterprise
from anycaptcha import Solver, Service

# get page URL, site_key and data_s from your page
page_url = ...
site_key = ...
data_s = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_recaptcha_v2(
            site_key=site_key,
            page_url=page_url,
            is_enterprise=True,
            data_s=data_s,  # optional
            api_domain='<"google.com" or "recaptcha.net">'  # optional
        )
        # get response token
        token = solved.solution.token
Solve reCAPTCHA v3
from anycaptcha import Solver, Service

# get CAPTCHA params from the target page/site
page_url = ...
site_key = ...
action = ...
min_score = 0.7


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_recaptcha_v3(
            site_key=site_key,
            page_url=page_url,
            action=action,  # optional
            min_score=min_score,  # optional
            api_domain='<"google.com" or "recaptcha.net">'  # optional
        )
        # get response token
        token = solved.solution.token
Solve reCAPTCHA v3 Enterprise
from anycaptcha import Solver, Service

# get CAPTCHA params from the target page/site
page_url = ...
site_key = ...
action = ...
min_score = 0.7


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_recaptcha_v3(
            site_key=site_key,
            page_url=page_url,
            is_enterprise=True,
            action=action,  # optional
            min_score=min_score,  # optional
            api_domain='<"google.com" or "recaptcha.net">'  # optional
        )
        # get response token
        token = solved.solution.token
Solve hCaptcha
from anycaptcha import Solver, Service

# get CAPTCHA params from the target page/site
page_url = ...
site_key = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_hcaptcha(
            site_key=site_key,
            page_url=page_url,
            api_domain='< "hcaptcha.com" or "js.hcaptcha.com" >'  # optional
        )
        # get response token
        token = solved.solution.token
Solve hCaptcha Invisible
from anycaptcha import Solver, Service

# get CAPTCHA params from the target page/site
page_url = ...
site_key = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_hcaptcha(
            site_key=site_key,
            page_url=page_url,
            is_invisible=True,
            api_domain='< "hcaptcha.com" or "js.hcaptcha.com" >'  # optional
        )
        # get response token
        token = solved.solution.token
Solve FunCaptcha
from anycaptcha import Solver, Service

# get CAPTCHA params from the target page/site
public_key = ...
page_url = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_funcaptcha(
            public_key=public_key,
            page_url=page_url,
            service_url='<value of surl parameter>',  # optional
            blob='<value of data[blob] parameter>'  # optional
        )
        # get response token
        token = solved.solution.token
Solve KeyCaptcha
from anycaptcha import Solver, Service

# get CAPTCHA params from the target page/site
page_url = ...
user_id = ...
session_id = ...
ws_sign = ...
ws_sign2 = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_keycaptcha(
            page_url=page_url,
            user_id=user_id,
            session_id=session_id,
            ws_sign=ws_sign,
            ws_sign2=ws_sign2
        )
        # get response token
        token = solved.solution.token
Solve Geetest
from anycaptcha import Solver, Service

# get CAPTCHA params from the target page/site
page_url = ...
gt_key = ...
challenge = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_geetest(
            page_url=page_url,
            gt_key=gt_key,
            challenge=challenge,
            api_server='<value of api_server parameter>'  # optional
        )
        # get response token
        token = solved.solution.token
Solve Geetest v4
from anycaptcha import Solver, Service

# get CAPTCHA params from the target page/site
page_url = ...
captcha_id = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_geetest_v4(
            page_url=page_url,
            captcha_id=captcha_id
        )

        # get solution data
        lot_number = solved.solution.lot_number
        pass_token = solved.solution.pass_token
        gen_time = solved.solution.gen_time
        captcha_output = solved.solution.captcha_output
Solve Capy Puzzle
from anycaptcha import Solver, Service

# get CAPTCHA params from the target page/site
site_key = ...
page_url = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_capy_puzzle(
            site_key=site_key,
            page_url=page_url,
            api_server='<for example "https://api.capy.me">',  # optional
            challenge_type='<"puzzle" or "avatar">'  # optional
        )

        # get solution data
        captchakey = solved.solution.captchakey
        challengekey = solved.solution.challengekey
        answer = solved.solution.answer
Solve a text CAPTCHA
from anycaptcha import Solver, Service
from anycaptcha import CaptchaAlphabet
from anycaptcha import WorkerLanguage


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_text_captcha(
            text='Si mañana es domingo, ¿qué día es hoy?',
            alphabet=CaptchaAlphabet.LATIN,  # optional
            language=WorkerLanguage.SPANISH  # optional
        )

        # get answer
        answer = solved.solution.text  # Sábado

Error handling

Catch exceptions
import anycaptcha
from anycaptcha import Solver, Service


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        try:
            solved = solver.solve_recaptcha_v2(
                site_key=site_key,
                page_url=page_url,
            )
        except anycaptcha.AccessDeniedError:  # wrong API key or the current IP is banned
            pass
        except anycaptcha.LowBalanceError:  # low balance
            pass
        except anycaptcha.ServiceTooBusy:  # no available slots to solve CAPTCHA
            pass
        except anycaptcha.SolutionWaitTimeout:  # haven't received a solution within N minutes
            pass
        except anycaptcha.TooManyRequestsError:  # request limit exceeded
            pass
        except anycaptcha.BadInputDataError:  # bad CAPTCHA data (bad image, wrong URL, etc.)
            pass
        except anycaptcha.UnableToSolveError:  # CAPTCHA unsolvable
            pass
        except anycaptcha.ProxyError:  # bad proxy
            pass
        else:
            # get response token
            token = solved.solution.token

Misc

Create a task and wait for the result
from anycaptcha import Solver, Service
from anycaptcha.captcha import RecaptchaV2

# get page URL and site_key from your page
page_url = ...
site_key = ...


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # create a task
        task = solver.create_task(
            RecaptchaV2(site_key, page_url)
        )

        # print task ID
        print(task.task_id)

        # wait for task to be completed
        solved = task.wait()

        # get response token
        token = solved.solution.token
Add proxy, cookies and User-Agent
from anycaptcha import Solver, Service

# get page URL and site_key from your page
page_url = ...
site_key = ...
proxy = 'http://user:password@domain.com:8080'  # any format
user_agent = '<USER AGENT STRING>'
cookies = {'name': 'value', ...}


async def main():
    with Solver(Service.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
        # solve CAPTCHA
        solved = solver.solve_recaptcha_v2(
            site_key=site_key,
            page_url=page_url,
            proxy=proxy,
            user_agent=user_agent,
            cookies=cookies
        )
        # get response token
        token = solved.solution.token