Unicaps

Unicaps 是一个用于验证码(CAPTCHA)解决服务的统一 Python API。
⚠ 请注意
⚠ 使用此包需要验证码解决服务的 API 密钥!
⚠ 支持的服务列表可在下表中找到。
主要特性
- 一个独立于所用服务的统一 Python 接口
- 使用原生服务协议/端点(例如,无需修补 hosts 文件)
- 同时提供同步和异步客户端
- 支持 10 种类型的验证码
- 支持 6 个验证码解决服务
- 采用 Pythonic 风格编写,旨在供人类使用
安装
pip install -U unicaps
简单使用示例
>>> from unicaps import CaptchaSolver, CaptchaSolvingService
>>> solver = CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, api_key="<PLACE_YOUR_API_KEY_HERE>")
>>> solver.get_balance()
2.84161
>>> solved = solver.solve_image_captcha(open("captcha.jpg", "rb"), is_phrase=False, is_case_sensitive=True)
>>> solved.solution.text
'w93Bx'
>>> solved.cost
0.00078
>>> solved.report_good()
True
异步示例
import asyncio
from pathlib import Path
from unicaps import AsyncCaptchaSolver, CaptchaSolvingService
API_KEY = '<PLACE_YOUR_API_KEY_HERE>'
async def main():
async with AsyncCaptchaSolver(CaptchaSolvingService.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()
if __name__ == '__main__':
asyncio.run(main())
支持的验证码 / 服务
图像验证码
文本验证码
这是什么?
文本验证码是一种以文本形式表示且不含图像的验证码类型。通常您需要回答一个问题才能通过验证。
例如:“如果明天是星期六,那么今天是星期几?”。
reCAPTCHA v2
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
FunCaptcha (Arkose Labs)
KeyCAPTCHA
Geetest
Geetest v4
hCaptcha
Capy Puzzle
支持的代理类型
如何...
通用
获取余额
from unicaps import CaptchaSolver, CaptchaSolvingService
with CaptchaSolver(CaptchaSolvingService.ANTI_CAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
balance = solver.get_balance()
获取服务状态(服务是否已启动?)
from unicaps import CaptchaSolver, CaptchaSolvingService
with CaptchaSolver(CaptchaSolvingService.ANTI_CAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
status = solver.get_status()
解决后获取技术细节
from unicaps import CaptchaSolver, CaptchaSolvingService
with CaptchaSolver(CaptchaSolvingService.ANTI_CAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_...(...)
cost = solved.cost
cookies = solved.cookies
solved.report_good()
solved.report_bad()
start_time = solved.start_time
end_time = solved.end_time
验证码
解决图像验证码
import pathlib
from unicaps import CaptchaSolver, CaptchaSolvingService
from unicaps.common import CaptchaCharType, CaptchaAlphabet
image_file = pathlib.Path(r'/tmp/captcha.png')
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_image_captcha(
image=image_file,
char_type=CaptchaCharType.ALPHA,
is_phrase=False,
is_case_sensitive=True,
is_math=False,
min_len=4,
max_len=6,
alphabet=CaptchaAlphabet.LATIN,
comment='Type RED letters only'
)
token = solved.solution.text
解决 reCAPTCHA v2
from unicaps import CaptchaSolver, CaptchaSolvingService
page_url = ...
site_key = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_recaptcha_v2(
site_key=site_key,
page_url=page_url,
data_s='<data-s value>',
api_domain='<"google.com" or "recaptcha.net">'
)
token = solved.solution.token
解决 reCAPTCHA v2 Invisible
from unicaps import CaptchaSolver, CaptchaSolvingService
page_url = ...
site_key = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_recaptcha_v2(
site_key=site_key,
page_url=page_url,
is_invisible=True,
data_s='<data-s value>',
api_domain='<"google.com" or "recaptcha.net">'
)
token = solved.solution.token
解决 reCAPTCHA v2 Enterprise
from unicaps import CaptchaSolver, CaptchaSolvingService
page_url = ...
site_key = ...
data_s = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_recaptcha_v2(
site_key=site_key,
page_url=page_url,
is_enterprise=True,
data_s=data_s,
api_domain='<"google.com" or "recaptcha.net">'
)
token = solved.solution.token
解决 reCAPTCHA v3
from unicaps import CaptchaSolver, CaptchaSolvingService
page_url = ...
site_key = ...
action = ...
min_score = 0.7
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_recaptcha_v3(
site_key=site_key,
page_url=page_url,
action=action,
min_score=min_score,
api_domain='<"google.com" or "recaptcha.net">'
)
token = solved.solution.token
解决 reCAPTCHA v3 Enterprise
from unicaps import CaptchaSolver, CaptchaSolvingService
page_url = ...
site_key = ...
action = ...
min_score = 0.7
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_recaptcha_v3(
site_key=site_key,
page_url=page_url,
is_enterprise=True,
action=action,
min_score=min_score,
api_domain='<"google.com" or "recaptcha.net">'
)
token = solved.solution.token
解决 hCaptcha
from unicaps import CaptchaSolver, CaptchaSolvingService
page_url = ...
site_key = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_hcaptcha(
site_key=site_key,
page_url=page_url,
api_domain=<"hcaptcha.com" or "js.hcaptcha.com">
)
token = solved.solution.token
解决 hCaptcha Invisible
from unicaps import CaptchaSolver, CaptchaSolvingService
page_url = ...
site_key = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_hcaptcha(
site_key=site_key,
page_url=page_url,
is_invisible=True,
api_domain=<"hcaptcha.com" or "js.hcaptcha.com">
)
token = solved.solution.token
解决 FunCaptcha
from unicaps import CaptchaSolver, CaptchaSolvingService
public_key = ...
page_url = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_funcaptcha(
public_key=public_key,
page_url=page_url,
service_url='<value of surl parameter>',
blob='<value of data[blob] parameter>'
)
token = solved.solution.token
解决 KeyCaptcha
from unicaps import CaptchaSolver, CaptchaSolvingService
page_url = ...
user_id = ...
session_id = ...
ws_sign = ...
ws_sign2 = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_keycaptcha(
page_url=page_url,
user_id=user_id,
session_id=session_id,
ws_sign=ws_sign,
ws_sign2=ws_sign2
)
token = solved.solution.token
Solve Geetest
from unicaps import CaptchaSolver, CaptchaSolvingService
page_url = ...
gt_key = ...
challenge = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_geetest(
page_url=page_url,
gt_key=gt_key,
challenge=challenge,
api_server='<value of api_server parameter>'
)
token = solved.solution.token
Solve Geetest v4
from unicaps import CaptchaSolver, CaptchaSolvingService
page_url = ...
captcha_id = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_geetest_v4(
page_url=page_url,
captcha_id=captcha_id
)
lot_number = solved.solution.lot_number
pass_token = solved.solution.pass_token
gen_time = solved.solution.gen_time
captcha_output = solved.solution.captcha_output
解决水豚谜题
from unicaps import CaptchaSolver, CaptchaSolvingService
site_key = ...
page_url = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_capy_puzzle(
site_key=site_key,
page_url=page_url,
api_server='<for example "https://api.capy.me">',
challenge_type='<"puzzle" or "avatar">'
)
captchakey = solved.solution.captchakey
challengekey = solved.solution.challengekey
answer = solved.solution.answer
解决文本 CAPTCHA
from unicaps import CaptchaSolver, CaptchaSolvingService
from unicaps.common import CaptchaAlphabet, WorkerLanguage
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_text_captcha(
text='Si mañana es domingo, ¿qué día es hoy?',
alphabet=CaptchaAlphabet.LATIN,
language=WorkerLanguage.SPANISH
)
answer = solved.solution.text
错误处理
捕获异常
from unicaps import CaptchaSolver, CaptchaSolvingService, exceptions
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
try:
solved = solver.solve_recaptcha_v2(
site_key=site_key,
page_url=page_url
)
except exceptions.AccessDeniedError:
pass
except exceptions.LowBalanceError:
pass
except exceptions.ServiceTooBusy:
pass
except exceptions.SolutionWaitTimeout:
pass
except exceptions.TooManyRequestsError:
pass
except exceptions.BadInputDataError:
pass
except exceptions.UnableToSolveError:
pass
except exceptions.ProxyError:
pass
except exceptions.NetworkError:
pass
else:
token = solved.solution.token
其他
创建一个任务并等待结果
from unicaps import CaptchaSolver, CaptchaSolvingService
from unicaps.captcha import RecaptchaV2
page_url = ...
site_key = ...
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
task = solver.create_task(
RecaptchaV2(site_key, page_url)
)
print(task.task_id)
solved = task.wait()
token = solved.solution.token
添加代理、cookies 和 User-Agent
from unicaps import CaptchaSolver, CaptchaSolvingService
from unicaps.proxy import ProxyServer
page_url = ...
site_key = ...
proxy = 'http://user:password@domain.com:8080'
user_agent = '<USER AGENT STRING>'
cookies = {'name': 'value', ...}
with CaptchaSolver(CaptchaSolvingService.TWOCAPTCHA, "<PLACE YOUR API KEY HERE>") as solver:
solved = solver.solve_recaptcha_v2(
site_key=site_key,
page_url=page_url,
proxy=ProxyServer(proxy),
user_agent=user_agent,
cookies=cookies
)
token = solved.solution.token
实际代码示例
示例
请我喝杯咖啡
https://www.buymeacoffee.com/sergey.scat