pip install anycaptcha
anycaptcha is a unified Python API for CAPTCHA solving services.
Special thanks to unicaps lib
- 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:
- 2captcha.com
- rucaptcha.com
- anti-captcha.com
- azcaptcha.com
- cap.guru
- deathbycaptcha.com
- capsolver.com
- capmonster.cloud
- multibot.in
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()
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 | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |
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 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 | ❌ |
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
Service | Regular | Enterprise | Proxy | Cookies | User-Agent |
---|---|---|---|---|---|
2captcha.com | ✅ | ✅ | ❌ | ❌ | ❌ |
rucaptcha.com | ✅ | ✅ | ❌ | ❌ | ❌ |
anti-captcha.com | ✅ | ✅ | ❌ | ❌ | ❌ |
azcaptcha.com | ✅ | ❌ | ✅ | ❌ | ❌ |
cap.guru | ✅ | ❌ | ✅ | ✅ | ✅ |
deathbycaptcha.com | ✅ | ❌ | ✅ | ❌ | ❌ |
Service | Regular | Data (BLOB) | Proxy | Cookies | User-Agent |
---|---|---|---|---|---|
2captcha.com | ✅ | ✅ | ✅ | ❌ | ✅ |
rucaptcha.com | ✅ | ✅ | ✅ | ❌ | ✅ |
anti-captcha.com | ✅ | ✅ | ✅ | ❌ | ✅ |
azcaptcha.com | ✅ | ✅ | ✅ | ❌ | ✅ |
cap.guru | ❌ | ❌ | ❌ | ❌ | ❌ |
deathbycaptcha.com | ✅ | ❌ | ✅ | ❌ | ❌ |
Service | Regular | Proxy | Cookies | User-Agent |
---|---|---|---|---|
2captcha.com | ✅ | ❌ | ❌ | ❌ |
rucaptcha.com | ✅ | ❌ | ❌ | ❌ |
anti-captcha.com | ❌ | ❌ | ❌ | ❌ |
azcaptcha.com | ❌ | ❌ | ❌ | ❌ |
cap.guru | ❌ | ❌ | ❌ | ❌ |
deathbycaptcha.com | ❌ | ❌ | ❌ | ❌ |
Service | Regular | API server | GetLib | Proxy | Cookies | User-Agent |
---|---|---|---|---|---|---|
2captcha.com | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ |
rucaptcha.com | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ |
anti-captcha.com | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
azcaptcha.com | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
cap.guru | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
deathbycaptcha.com | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
Service | Regular | Proxy | Cookies | User-Agent |
---|---|---|---|---|
2captcha.com | ✅ | ✅ | ❌ | ✅ |
rucaptcha.com | ✅ | ✅ | ❌ | ✅ |
anti-captcha.com | ✅ | ✅ | ❌ | ✅ |
azcaptcha.com | ❌ | ❌ | ❌ | ❌ |
cap.guru | ❌ | ❌ | ❌ | ❌ |
deathbycaptcha.com | ❌ | ❌ | ❌ | ❌ |
Service | Regular | Invisible | Custom Data | Proxy | Cookies | User-Agent |
---|---|---|---|---|---|---|
2captcha.com | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
rucaptcha.com | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
anti-captcha.com | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ |
azcaptcha.com | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
cap.guru | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
deathbycaptcha.com | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
Service | Regular | API server | Proxy | Cookies | User-Agent |
---|---|---|---|---|---|
2captcha.com | ✅ | ✅ | ✅ | ❌ | ❌ |
rucaptcha.com | ✅ | ✅ | ✅ | ❌ | ❌ |
anti-captcha.com | ❌ | ❌ | ❌ | ❌ | ❌ |
azcaptcha.com | ❌ | ❌ | ❌ | ❌ | ❌ |
cap.guru | ❌ | ❌ | ❌ | ❌ | ❌ |
deathbycaptcha.com | ❌ | ❌ | ❌ | ❌ | ❌ |
Service | HTTP | HTTPS | SOCKS 4 | SOCKS 5 |
---|---|---|---|---|
2captcha.com | ✅ | ✅ | ✅ | ✅ |
rucaptcha.com | ✅ | ✅ | ✅ | ✅ |
anti-captcha.com | ✅ | ✅ | ✅ | ✅ |
azcaptcha.com | ✅ | ✅ | ✅ | ✅ |
cap.guru | ✅ | ✅ | ✅ | ✅ |
deathbycaptcha.com | ✅ | ❌ | ❌ | ❌ |
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
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
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
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