Add pyproject.toml for black

This commit is contained in:
Andrei 2019-11-25 20:08:18 +03:00
parent 9e1375ae50
commit b602e31174
30 changed files with 172 additions and 498 deletions

View File

@ -25,17 +25,13 @@ save_format = 'const' .
result = ImageToTextTask.ImageToTextTask(
anticaptcha_key=ANTICAPTCHA_KEY, save_format="const"
).captcha_handler(
captcha_link="http://85.255.8.26/static/image/common_image_example/800070.png"
)
).captcha_handler(captcha_link="http://85.255.8.26/static/image/common_image_example/800070.png")
print(result)
# Пример который показывает работу антикапчи при решении капчи-изображением и сохранением её в качестве ВРЕМЕННОГО файла
# Протестировано на Линуксах. Не используйте данный вариант на Windows! Возможно починим, но потом.
# Example for working with captcha-image like a temporary file. Tested on UNIX-based systems. Don`t use it on Windows!
result = ImageToTextTask.ImageToTextTask(
anticaptcha_key=ANTICAPTCHA_KEY
).captcha_handler(
result = ImageToTextTask.ImageToTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(
captcha_link="http://85.255.8.26/static/image/common_image_example/800070.png"
)
print(result)
@ -47,9 +43,7 @@ Base64 files
An example of working with decoding in base64 captcha-file after download. On-the-fly-encoding
"""
base_64_link = base64.b64encode(
requests.get(
"http://85.255.8.26/static/image/common_image_example/862963.png"
).content
requests.get("http://85.255.8.26/static/image/common_image_example/862963.png").content
).decode("utf-8")
user_answer_base64 = ImageToTextTask.ImageToTextTask(
@ -69,9 +63,9 @@ captcha_file = "088636.png"
# captcha_file = 'D:\/Python\/933588.png'
# captcha_file = r'D:\Python\933588.png'
result = ImageToTextTask.ImageToTextTask(
anticaptcha_key=ANTICAPTCHA_KEY
).captcha_handler(captcha_file=captcha_file)
result = ImageToTextTask.ImageToTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(
captcha_file=captcha_file
)
print(result)
"""
Пример для работы с локальными файлами
@ -150,8 +144,7 @@ QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue"
"""
answer = requests.post(
"http://85.255.8.26:8001/register_key",
json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"},
"http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}
)
# если очередь успешно создана:
if answer == "OK":

View File

@ -19,15 +19,13 @@ result = AntiCaptchaControl.AntiCaptchaControl(
).complaint_on_result(reported_id=-5, captcha_type="recaptcha")
print(result)
# Пример метода, принимающего ключ аккаунта и возвращающего актуальный баланс
result = AntiCaptchaControl.AntiCaptchaControl(
anticaptcha_key=ANTICAPTCHA_KEY
).get_balance()
result = AntiCaptchaControl.AntiCaptchaControl(anticaptcha_key=ANTICAPTCHA_KEY).get_balance()
print(result)
# Пример метода, выдающий информацию о загрузке очереди, в зависимости от ID очереди
# В данном случае queue_id = 1, то есть получаем информацию по загрузке очереди ImageToText (язык английский)
result = AntiCaptchaControl.AntiCaptchaControl(
anticaptcha_key=ANTICAPTCHA_KEY
).get_queue_status(queue_id=1)
result = AntiCaptchaControl.AntiCaptchaControl(anticaptcha_key=ANTICAPTCHA_KEY).get_queue_status(
queue_id=1
)
print(result)
# Асинхронный метод работы

View File

@ -53,9 +53,7 @@ custom_form = """[
]"""
my_custom_task = CustomCaptchaTask.CustomCaptchaTask(
anticaptcha_key=ANTICAPTCHA_KEY,
assignment="Enter license plate number",
forms=custom_form,
anticaptcha_key=ANTICAPTCHA_KEY, assignment="Enter license plate number", forms=custom_form
).captcha_handler(imageUrl=imageUrl)

View File

@ -70,8 +70,7 @@ QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue"
"""
answer = requests.post(
"http://85.255.8.26:8001/register_key",
json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"},
"http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}
)
# если очередь успешно создана:
if answer == "OK":

View File

@ -16,9 +16,7 @@ result = NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(
print(result)
# contextmanager
with NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(
anticaptcha_key=ANTICAPTCHA_KEY
) as nocaptcha:
with NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(anticaptcha_key=ANTICAPTCHA_KEY) as nocaptcha:
response = nocaptcha.captcha_handler(
websiteURL="https://www.google.com/recaptcha/api2/demo",
websiteKey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
@ -75,8 +73,7 @@ QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue"
"""
answer = requests.post(
"http://85.255.8.26:8001/register_key",
json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"},
"http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}
)
# если очередь успешно создана:
if answer == "OK":

View File

@ -15,9 +15,7 @@ SquareNetTextTask : select objects on image with an overlay grid
ANTICAPTCHA_KEY = ""
# Простой пример работы / Base example
result = SquareNetTextTask.SquareNetTextTask(
anticaptcha_key=ANTICAPTCHA_KEY
).captcha_handler(
result = SquareNetTextTask.SquareNetTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(
objectName="captcha numbers",
rowsCount=2,
columnsCount=3,
@ -59,8 +57,7 @@ QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue"
"""
answer = requests.post(
"http://85.255.8.26:8001/register_key",
json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"},
"http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}
)
# если очередь успешно создана:
if answer == "OK":

View File

@ -27,8 +27,7 @@ QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue"
"""
answer = requests.post(
"http://85.255.8.26:8001/register_key",
json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"},
"http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}
)
# если очередь успешно создана:
if answer == "OK":
@ -77,11 +76,7 @@ if answer == "OK":
print(result)
# получение результата из кеша
print(
CallbackClient.CallbackClient(
task_id=result["taskId"]
).captcha_handler()
)
print(CallbackClient.CallbackClient(task_id=result["taskId"]).captcha_handler())
# получение результата из RabbitMQ очереди, со стандартными параметрами
print(
CallbackClient.CallbackClient(

View File

@ -20,9 +20,7 @@ print(response)
async def run():
try:
# io.IOBase
custom_result = CustomResultHandler.aioCustomResultHandler(
anticaptcha_key=ANTICAPTCHA_KEY
)
custom_result = CustomResultHandler.aioCustomResultHandler(anticaptcha_key=ANTICAPTCHA_KEY)
response = await custom_result.task_handler(task_id=TASK_ID)
print(response)
except Exception as err:

View File

@ -19,17 +19,13 @@ browser_options.add_argument("--no-sandbox")
browser_options.add_argument("disable-infobars")
browser_options.add_argument("--disable-extensions")
# run browser
browser = webdriver.Chrome(
executable_path="./chromefile/chromedriver", options=browser_options
)
browser = webdriver.Chrome(executable_path="./chromefile/chromedriver", options=browser_options)
# open page
browser.get(WEB_URL)
# prepare captcha solver
captcha_obj = NoCaptchaTaskProxyless(anticaptcha_key=ANTICAPTCHA_KEY)
# solve recaptcha
browser.execute_script(
"document.getElementById('g-recaptcha-response').style.display = 'block';"
)
browser.execute_script("document.getElementById('g-recaptcha-response').style.display = 'block';")
# wait script finish
time.sleep(1)
recaptcha_element = browser.find_element_by_xpath(recaptcha_xpath)

16
pyproject.toml Normal file
View File

@ -0,0 +1,16 @@
[tool.black]
line-length = 99
target-version = ['py36']
exclude = '''
/(
\.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| _build
| buck-out
| build
| dist
)/
'''

View File

@ -57,10 +57,6 @@ class aioAntiCaptchaAppStats:
async with aiohttp.ClientSession() as session:
async with session.post(
get_app_stats_url,
json={
"clientKey": self.ANTICAPTCHA_KEY,
"softId": softId,
"mode": mode,
},
json={"clientKey": self.ANTICAPTCHA_KEY, "softId": softId, "mode": mode},
) as resp:
return await resp.json()

View File

@ -38,9 +38,7 @@ class AntiCaptchaControl:
Получение баланса аккаунта
:return: Возвращает актуальный баланс
"""
answer = requests.post(
get_balance_url, json={"clientKey": self.ANTICAPTCHA_KEY}
)
answer = requests.post(get_balance_url, json={"clientKey": self.ANTICAPTCHA_KEY})
return answer.json()
@ -51,8 +49,7 @@ class AntiCaptchaControl:
"""
if mode not in mods:
raise ValueError(
f"\nWrong `mode` parameter. Valid params: {mods}."
f"\n\tYour param - `{mode}`"
f"\nWrong `mode` parameter. Valid params: {mods}." f"\n\tYour param - `{mode}`"
)
payload = {"clientKey": self.ANTICAPTCHA_KEY, "softId": softId, "mode": mode}
answer = requests.post(get_app_stats_url, json=payload)
@ -62,9 +59,7 @@ class AntiCaptchaControl:
else:
return {"errorId": 1}
def complaint_on_result(
self, reported_id: int, captcha_type: str = "image"
) -> dict:
def complaint_on_result(self, reported_id: int, captcha_type: str = "image") -> dict:
f"""
Позволяет отправить жалобу на неправильно решённую капчу.
:param reported_id: Отправляете ID капчи на которую нужно пожаловаться
@ -160,8 +155,7 @@ class aioAntiCaptchaControl:
"""
if mode not in mods:
raise ValueError(
f"\nWrong `mode` parameter. Valid params: {mods}."
f"\n\tYour param - `{mode}`"
f"\nWrong `mode` parameter. Valid params: {mods}." f"\n\tYour param - `{mode}`"
)
payload = {"clientKey": self.ANTICAPTCHA_KEY, "softId": softId, "mode": mode}
async with aiohttp.ClientSession() as session:
@ -171,9 +165,7 @@ class aioAntiCaptchaControl:
else:
return {"errorId": 1}
async def complaint_on_result(
self, reported_id: int, captcha_type: str = "image"
) -> dict:
async def complaint_on_result(self, reported_id: int, captcha_type: str = "image") -> dict:
f"""
Позволяет отправить жалобу на неправильно решённую капчу.
:param reported_id: Отправляете ID капчи на которую нужно пожаловаться
@ -190,9 +182,7 @@ class aioAntiCaptchaControl:
# complaint on image captcha
if captcha_type == "image":
async with aiohttp.ClientSession() as session:
async with session.post(
incorrect_imagecaptcha_url, json=payload
) as resp:
async with session.post(incorrect_imagecaptcha_url, json=payload) as resp:
return await resp.json()
# complaint on re-captcha
elif captcha_type == "recaptcha":

View File

@ -125,9 +125,7 @@ class CallbackClient:
return False
def captcha_handler(
self, requests_timeout: int = 1, auth_params: dict = None
) -> dict:
def captcha_handler(self, requests_timeout: int = 1, auth_params: dict = None) -> dict:
"""
Метод отвечает за получение результата решения капчи с callback сервера
:param requests_timeout: Время между запросами к серверу.
@ -162,19 +160,13 @@ class CallbackClient:
else self.rtmq_password
)
self.rtmq_host = (
auth_params["rtmq_host"]
if auth_params.get("rtmq_host")
else self.rtmq_host
auth_params["rtmq_host"] if auth_params.get("rtmq_host") else self.rtmq_host
)
self.rtmq_port = (
auth_params["rtmq_port"]
if auth_params.get("rtmq_port")
else self.rtmq_port
auth_params["rtmq_port"] if auth_params.get("rtmq_port") else self.rtmq_port
)
self.rtmq_vhost = (
auth_params["rtmq_vhost"]
if auth_params.get("rtmq_vhost")
else self.rtmq_vhost
auth_params["rtmq_vhost"] if auth_params.get("rtmq_vhost") else self.rtmq_vhost
)
# получение данных из кеша

View File

@ -4,12 +4,7 @@ import asyncio
import requests
import aiohttp
from python3_anticaptcha import (
create_task_url,
app_key,
get_async_result,
get_sync_result,
)
from python3_anticaptcha import create_task_url, app_key, get_async_result, get_sync_result
class CustomCaptchaTask:
@ -30,9 +25,7 @@ class CustomCaptchaTask:
:param callbackUrl: URL для решения капчи с ответом через callback
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
@ -89,9 +82,7 @@ class CustomCaptchaTask:
else:
# Ждем решения капчи
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioCustomCaptchaTask:
@ -112,9 +103,7 @@ class aioCustomCaptchaTask:
:param callbackUrl: URL для решения капчи с ответом через callback
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи

View File

@ -12,9 +12,7 @@ class CustomResultHandler:
:param sleep_time: Solution timeout
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# payload for receiving service response
self.result_payload = {"clientKey": anticaptcha_key}
@ -37,9 +35,7 @@ class CustomResultHandler:
# wait captcha solution result
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioCustomResultHandler:
@ -50,9 +46,7 @@ class aioCustomResultHandler:
:param sleep_time: Solution timeout
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# payload for receiving service response
self.result_payload = {"clientKey": anticaptcha_key}

View File

@ -4,21 +4,12 @@ import asyncio
import aiohttp
import requests
from python3_anticaptcha import (
create_task_url,
app_key,
get_sync_result,
get_async_result,
)
from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result
class FunCaptchaTask:
def __init__(
self,
anticaptcha_key: str,
sleep_time: int = 5,
callbackUrl: str = None,
**kwargs,
self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs
):
"""
Модуль отвечает за решение FunCaptcha
@ -28,9 +19,7 @@ class FunCaptchaTask:
:param kwargs: Параметры для подключения к прокси. Подробнее в официальной документации или примерe - anticaptcha_examples/anticaptcha_fun_example.py
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
@ -73,9 +62,7 @@ class FunCaptchaTask:
)
# Отправляем на антикапча параметры фанкапич,
# в результате получаем JSON ответ содержащий номер решаемой капчи
captcha_id = requests.post(
create_task_url, json=self.task_payload, **kwargs
).json()
captcha_id = requests.post(create_task_url, json=self.task_payload, **kwargs).json()
# Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера
if captcha_id["errorId"] == 0:
@ -91,18 +78,12 @@ class FunCaptchaTask:
else:
# Ждем решения капчи
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioFunCaptchaTask:
def __init__(
self,
anticaptcha_key: str,
sleep_time: int = 5,
callbackUrl: str = None,
**kwargs,
self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs
):
"""
Модуль отвечает за решение FunCaptcha
@ -112,9 +93,7 @@ class aioFunCaptchaTask:
:param kwargs: Параметры для подключения к прокси. Подробнее в официальной документации или примерe - anticaptcha_examples/anticaptcha_fun_example.py
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи

View File

@ -4,18 +4,11 @@ import asyncio
import aiohttp
import requests
from python3_anticaptcha import (
create_task_url,
app_key,
get_sync_result,
get_async_result,
)
from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result
class FunCaptchaTaskProxyless:
def __init__(
self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None
):
def __init__(self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None):
"""
Модуль отвечает за решение FunCaptcha Proxyless
:param anticaptcha_key: Ключ от АнтиКапчи
@ -23,9 +16,7 @@ class FunCaptchaTaskProxyless:
:param callbackUrl: URL для решения капчи с ответом через callback
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
@ -63,9 +54,7 @@ class FunCaptchaTaskProxyless:
)
# Отправляем на антикапча параметры фанкапич,
# в результате получаем JSON ответ содержащий номер решаемой капчи
captcha_id = requests.post(
create_task_url, json=self.task_payload, **kwargs
).json()
captcha_id = requests.post(create_task_url, json=self.task_payload, **kwargs).json()
# Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера
if captcha_id["errorId"] == 0:
@ -81,15 +70,11 @@ class FunCaptchaTaskProxyless:
else:
# Ждем решения капчи
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioFunCaptchaTaskProxyless:
def __init__(
self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None
):
def __init__(self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None):
"""
Модуль отвечает за решение FunCaptcha Proxyless
:param anticaptcha_key: Ключ от АнтиКапчи
@ -97,9 +82,7 @@ class aioFunCaptchaTaskProxyless:
:param callbackUrl: URL для решения капчи с ответом через callback
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи

View File

@ -4,12 +4,7 @@ import asyncio
import aiohttp
import requests
from python3_anticaptcha import (
create_task_url,
app_key,
get_sync_result,
get_async_result,
)
from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result
class GeeTestTask:
@ -32,9 +27,7 @@ class GeeTestTask:
:param kwargs: Параметры для подключения к прокси. Подробнее в официальной документации или примерe - anticaptcha_examples/anticaptcha_gee_test_task.py
"""
if sleep_time < 10:
raise ValueError(
f"Param `sleep_time` must be greater than 10. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
@ -90,9 +83,7 @@ class GeeTestTask:
else:
# Ждем решения капчи
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioGeeTestTask:
@ -115,9 +106,7 @@ class aioGeeTestTask:
:param kwargs: Параметры для подключения к прокси. Подробнее в официальной документации или примерe - anticaptcha_examples/anticaptcha_gee_test_task.py
"""
if sleep_time < 10:
raise ValueError(
f"Param `sleep_time` must be greater than 10. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи

View File

@ -4,12 +4,7 @@ import asyncio
import requests
import aiohttp
from python3_anticaptcha import (
create_task_url,
app_key,
get_sync_result,
get_async_result,
)
from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result
class GeeTestTaskProxyless:
@ -30,19 +25,13 @@ class GeeTestTaskProxyless:
:param callbackUrl: URL для решения капчи с ответом через callback
"""
if sleep_time < 10:
raise ValueError(
f"Param `sleep_time` must be greater than 10. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
self.task_payload = {
"clientKey": anticaptcha_key,
"task": {
"type": "GeeTestTaskProxyless",
"websiteURL": websiteURL,
"gt": gt,
},
"task": {"type": "GeeTestTaskProxyless", "websiteURL": websiteURL, "gt": gt},
"softId": app_key,
}
# задаём callbackUrl если передан
@ -86,9 +75,7 @@ class GeeTestTaskProxyless:
else:
# Ждем решения капчи
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioGeeTestTaskProxyless:
@ -109,19 +96,13 @@ class aioGeeTestTaskProxyless:
:param callbackUrl: URL для решения капчи с ответом через callback
"""
if sleep_time < 10:
raise ValueError(
f"Param `sleep_time` must be greater than 10. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
self.task_payload = {
"clientKey": anticaptcha_key,
"task": {
"type": "GeeTestTaskProxyless",
"websiteURL": websiteURL,
"gt": gt,
},
"task": {"type": "GeeTestTaskProxyless", "websiteURL": websiteURL, "gt": gt},
"softId": app_key,
}
# задаём callbackUrl если передан

View File

@ -46,9 +46,7 @@ class ImageToTextTask:
:param **kwargs: За подробной информацией обратитесь к документации на сайте anticaptcha.
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# проверяем переданный параметр способа сохранения капчи
if save_format in SAVE_FORMATS:
@ -93,9 +91,7 @@ class ImageToTextTask:
:return: Возвращает ID капчи
"""
# Создаём пайлоад, вводим ключ от сайта, выбираем метод ПОСТ и ждём ответа в JSON-формате
self.task_payload["task"].update(
{"body": base64.b64encode(content).decode("utf-8")}
)
self.task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")})
# Отправляем на рукапча изображение капчи и другие парметры,
# в результате получаем JSON ответ с номером решаемой капчи и получая ответ - извлекаем номер
captcha_id = requests.post(create_task_url, json=self.task_payload).json()
@ -114,14 +110,10 @@ class ImageToTextTask:
# Высчитываем хэш изображения, для того что бы сохранить его под уникальным именем
image_hash = hashlib.sha224(content).hexdigest()
with open(
os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb"
) as out_image:
with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb") as out_image:
out_image.write(content)
with open(
os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb"
) as captcha_image:
with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb") as captcha_image:
# Добавляем в пайлоад картинку и отправляем
self.task_payload["task"].update(
{"body": base64.b64encode(captcha_image.read()).decode("utf-8")}
@ -181,13 +173,9 @@ class ImageToTextTask:
:return: Возвращает весь ответ сервера JSON-строкой.
"""
if captcha_file:
captcha_id = self.__read_captcha_image_file(
captcha_file, content_type="file"
)
captcha_id = self.__read_captcha_image_file(captcha_file, content_type="file")
elif captcha_base64:
captcha_id = self.__read_captcha_image_file(
captcha_base64, content_type="base64"
)
captcha_id = self.__read_captcha_image_file(captcha_base64, content_type="base64")
elif captcha_link:
content = requests.get(captcha_link, **kwargs).content
# согласно значения переданного параметра выбираем функцию для сохранения изображения
@ -215,9 +203,7 @@ class ImageToTextTask:
else:
# Ожидаем решения капчи
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioImageToTextTask:
@ -247,9 +233,7 @@ class aioImageToTextTask:
:param **kwargs: За подробной информацией обратитесь к документации на сайте anticaptcha.
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# проверяем переданный параметр способа сохранения капчи
if save_format in SAVE_FORMATS:
@ -326,14 +310,10 @@ class aioImageToTextTask:
# Высчитываем хэш изображения, для того что бы сохранить его под уникальным именем
image_hash = hashlib.sha224(content).hexdigest()
with open(
os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb"
) as out_image:
with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb") as out_image:
out_image.write(content)
with open(
os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb"
) as captcha_image:
with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb") as captcha_image:
# Добавляем в пайлоад картинку и отправляем
self.task_payload["task"].update(
{"body": base64.b64encode(captcha_image.read()).decode("utf-8")}
@ -342,18 +322,14 @@ class aioImageToTextTask:
# в результате получаем JSON ответ содержащий номер решаемой капчи
async with aiohttp.ClientSession() as session:
async with session.post(
create_task_url, json=self.task_payload
) as resp:
async with session.post(create_task_url, json=self.task_payload) as resp:
captcha_id = await resp.json()
# удаляем файл капчи
os.remove(os.path.join(img_path, "im-{0}.png".format(image_hash)))
return captcha_id
async def __read_captcha_image_file(
self, content: bytes, content_type: str = "file"
):
async def __read_captcha_image_file(self, content: bytes, content_type: str = "file"):
"""
Функция отвечает за чтение уже сохранённого файла или файла в уодировке base64
:param content: Параметр строка-путь указывающий на изображение капчи для отправки её на сервер
@ -384,10 +360,7 @@ class aioImageToTextTask:
# Работа с капчёй
async def captcha_handler(
self,
captcha_link: str = None,
captcha_file: str = None,
captcha_base64: str = None,
self, captcha_link: str = None, captcha_file: str = None, captcha_base64: str = None
) -> dict:
"""
Метод получает от вас ссылку на изображение, скачивает его, отправляет изображение на сервер
@ -397,9 +370,7 @@ class aioImageToTextTask:
"""
# если был передан линк на локальный скачаный файл
if captcha_file:
captcha_id = await self.__read_captcha_image_file(
captcha_file, content_type="file"
)
captcha_id = await self.__read_captcha_image_file(captcha_file, content_type="file")
elif captcha_base64:
captcha_id = await self.__read_captcha_image_file(
captcha_base64, content_type="base64"

View File

@ -4,21 +4,12 @@ import asyncio
import requests
import aiohttp
from python3_anticaptcha import (
create_task_url,
app_key,
get_sync_result,
get_async_result,
)
from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result
class NoCaptchaTask:
def __init__(
self,
anticaptcha_key: str,
sleep_time: int = 10,
callbackUrl: str = None,
**kwargs,
self, anticaptcha_key: str, sleep_time: int = 10, callbackUrl: str = None, **kwargs
):
"""
Модуль отвечает за решение NoCaptcha.
@ -29,9 +20,7 @@ class NoCaptchaTask:
"""
if sleep_time < 10:
raise ValueError(
f"Param `sleep_time` must be greater than 10. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
@ -68,9 +57,7 @@ class NoCaptchaTask:
:param: websiteKey: Ключ капчи(как его получить - описано в документаии на сайте антикапчи)
return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи)
"""
self.task_payload["task"].update(
{"websiteURL": websiteURL, "websiteKey": websiteKey}
)
self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey})
# отправляем реквест, в ответ получаем JSON содержащий номер решаемой капчи
captcha_id = requests.post(create_task_url, json=self.task_payload).json()
@ -87,18 +74,12 @@ class NoCaptchaTask:
else:
# Ждем решения капчи
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioNoCaptchaTask:
def __init__(
self,
anticaptcha_key: str,
sleep_time: str = 10,
callbackUrl: str = None,
**kwargs,
self, anticaptcha_key: str, sleep_time: str = 10, callbackUrl: str = None, **kwargs
):
"""
Модуль отвечает за решение NoCaptcha.
@ -109,9 +90,7 @@ class aioNoCaptchaTask:
"""
if sleep_time < 10:
raise ValueError(
f"Param `sleep_time` must be greater than 10. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 10. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
@ -148,9 +127,7 @@ class aioNoCaptchaTask:
:param: websiteKey: Ключ капчи(как его получить - описано в документаии на сайте антикапчи)
return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи)
"""
self.task_payload["task"].update(
{"websiteURL": websiteURL, "websiteKey": websiteKey}
)
self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey})
# отправляем реквест, в ответ получаем JSON содержащий номер решаемой капчи
async with aiohttp.ClientSession() as session:
async with session.post(create_task_url, json=self.task_payload) as resp:

View File

@ -4,21 +4,12 @@ import asyncio
import requests
import aiohttp
from python3_anticaptcha import (
create_task_url,
app_key,
get_sync_result,
get_async_result,
)
from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result
class NoCaptchaTaskProxyless:
def __init__(
self,
anticaptcha_key: str,
sleep_time: int = 5,
callbackUrl: str = None,
**kwargs,
self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs
):
"""
Модуль отвечает за решение ReCaptcha без прокси
@ -28,9 +19,7 @@ class NoCaptchaTaskProxyless:
:param kwargs: Другие необязательные параметры из документации
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
@ -69,14 +58,10 @@ class NoCaptchaTaskProxyless:
"""
# вставляем в пайлоад адрес страницы и ключ-индентификатор рекапчи
self.task_payload["task"].update(
{"websiteURL": websiteURL, "websiteKey": websiteKey}
)
self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey})
# Отправляем на антикапчу пайлоад
# в результате получаем JSON ответ содержащий номер решаемой капчи
captcha_id = requests.post(
create_task_url, json=self.task_payload, **kwargs
).json()
captcha_id = requests.post(create_task_url, json=self.task_payload, **kwargs).json()
# Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера
if captcha_id["errorId"] == 0:
@ -92,18 +77,12 @@ class NoCaptchaTaskProxyless:
else:
# Ожидаем решения капчи
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioNoCaptchaTaskProxyless:
def __init__(
self,
anticaptcha_key: str,
sleep_time: int = 5,
callbackUrl: str = None,
**kwargs,
self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs
):
"""
Модуль отвечает за решение ReCaptcha без прокси
@ -113,9 +92,7 @@ class aioNoCaptchaTaskProxyless:
:param kwargs: Другие необязательные параметры из документации
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
@ -155,9 +132,7 @@ class aioNoCaptchaTaskProxyless:
"""
# вставляем в пайлоад адрес страницы и ключ-индентификатор рекапчи
self.task_payload["task"].update(
{"websiteURL": websiteURL, "websiteKey": websiteKey}
)
self.task_payload["task"].update({"websiteURL": websiteURL, "websiteKey": websiteKey})
# Отправляем на антикапчу пайлоад
# в результате получаем JSON ответ содержащий номер решаемой капчи
async with aiohttp.ClientSession() as session:

View File

@ -4,23 +4,14 @@ import asyncio
import requests
import aiohttp
from python3_anticaptcha import (
create_task_url,
app_key,
get_sync_result,
get_async_result,
)
from python3_anticaptcha import create_task_url, app_key, get_sync_result, get_async_result
MIN_SCORES = (0.3, 0.7, 0.9)
class ReCaptchaV3TaskProxyless:
def __init__(
self,
anticaptcha_key: str,
sleep_time: int = 5,
callbackUrl: str = None,
**kwargs,
self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs
):
"""
Модуль отвечает за решение ReCaptcha v3 без прокси
@ -30,9 +21,7 @@ class ReCaptchaV3TaskProxyless:
:param kwargs: Другие необязательные параметры из документации
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be less than 5. U send - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be less than 5. U send - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи
@ -63,12 +52,7 @@ class ReCaptchaV3TaskProxyless:
# Работа с капчёй
def captcha_handler(
self,
websiteURL: str,
websiteKey: str,
minScore: float,
pageAction: str,
**kwargs,
self, websiteURL: str, websiteKey: str, minScore: float, pageAction: str, **kwargs
) -> dict:
"""
Метод решения ReCaptcha V3
@ -95,9 +79,7 @@ class ReCaptchaV3TaskProxyless:
)
# Отправляем на антикапчу пайлоад
# в результате получаем JSON ответ содержащий номер решаемой капчи
captcha_id = requests.post(
create_task_url, json=self.task_payload, **kwargs
).json()
captcha_id = requests.post(create_task_url, json=self.task_payload, **kwargs).json()
# Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера
if captcha_id["errorId"] == 0:
@ -113,18 +95,12 @@ class ReCaptchaV3TaskProxyless:
else:
# Ожидаем решения капчи
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioReCaptchaV3TaskProxyless:
def __init__(
self,
anticaptcha_key: str,
sleep_time: int = 5,
callbackUrl: str = None,
**kwargs,
self, anticaptcha_key: str, sleep_time: int = 5, callbackUrl: str = None, **kwargs
):
"""
Модуль отвечает за решение ReCaptcha V3 без прокси
@ -134,9 +110,7 @@ class aioReCaptchaV3TaskProxyless:
:param kwargs: Другие необязательные параметры из документации
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be less than 5. U send - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be less than 5. U send - {sleep_time}")
self.sleep_time = sleep_time
# Пайлоад для создания задачи

View File

@ -40,9 +40,7 @@ class SquareNetTextTask:
:param callbackUrl: URL для решения капчи с ответом через callback
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# проверяем переданный параметр способа сохранения капчи
if save_format in ["const", "temp"]:
@ -83,9 +81,7 @@ class SquareNetTextTask:
:return: Возвращает ID капчи
"""
# Создаём пайлоад, вводим ключ от сайта, выбираем метод ПОСТ и ждём ответа в JSON-формате
self.task_payload["task"].update(
{"body": base64.b64encode(content).decode("utf-8")}
)
self.task_payload["task"].update({"body": base64.b64encode(content).decode("utf-8")})
# Отправляем на рукапча изображение капчи и другие парметры,
# в результате получаем JSON ответ с номером решаемой капчи и получая ответ - извлекаем номер
captcha_id = requests.post(create_task_url, json=self.task_payload).json()
@ -104,14 +100,10 @@ class SquareNetTextTask:
# Высчитываем хэш изображения, для того что бы сохранить его под уникальным именем
image_hash = hashlib.sha224(content).hexdigest()
with open(
os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb"
) as out_image:
with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb") as out_image:
out_image.write(content)
with open(
os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb"
) as captcha_image:
with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb") as captcha_image:
# Добавляем в пайлоад картинку и отправляем
self.task_payload["task"].update(
{"body": base64.b64encode(captcha_image.read()).decode("utf-8")}
@ -196,9 +188,7 @@ class SquareNetTextTask:
# проводим действия над файлом уже закодированном в base64(передаём на сервер)
elif image_base64:
captcha_id = self.__read_captcha_image_file(
image_base64, content_type="base64"
)
captcha_id = self.__read_captcha_image_file(image_base64, content_type="base64")
# проводим действия над ссылкой на файл(скачиваем, сохраняем и передаём на сервер)
elif image_link:
@ -228,9 +218,7 @@ class SquareNetTextTask:
else:
# Ожидаем решения капчи
time.sleep(self.sleep_time)
return get_sync_result(
result_payload=self.result_payload, sleep_time=self.sleep_time
)
return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
class aioSquareNetTextTask:
@ -256,9 +244,7 @@ class aioSquareNetTextTask:
:param callbackUrl: URL для решения капчи с ответом через callback
"""
if sleep_time < 5:
raise ValueError(
f"Param `sleep_time` must be greater than 5. U set - {sleep_time}"
)
raise ValueError(f"Param `sleep_time` must be greater than 5. U set - {sleep_time}")
self.sleep_time = sleep_time
# проверяем переданный параметр способа сохранения капчи
if save_format in ["const", "temp"]:
@ -328,14 +314,10 @@ class aioSquareNetTextTask:
# Высчитываем хэш изображения, для того что бы сохранить его под уникальным именем
image_hash = hashlib.sha224(content).hexdigest()
with open(
os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb"
) as out_image:
with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "wb") as out_image:
out_image.write(content)
with open(
os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb"
) as captcha_image:
with open(os.path.join(img_path, "im-{0}.png".format(image_hash)), "rb") as captcha_image:
# Добавляем в пайлоад картинку и отправляем
self.task_payload["task"].update(
{"body": base64.b64encode(captcha_image.read()).decode("utf-8")}
@ -344,18 +326,14 @@ class aioSquareNetTextTask:
# в результате получаем JSON ответ содержащий номер решаемой капчи
async with aiohttp.ClientSession() as session:
async with session.post(
create_task_url, json=self.task_payload
) as resp:
async with session.post(create_task_url, json=self.task_payload) as resp:
captcha_id = await resp.json()
# удаляем файл капчи
os.remove(os.path.join(img_path, "im-{0}.png".format(image_hash)))
return captcha_id
async def __read_captcha_image_file(
self, content: bytes, content_type: str = "file"
):
async def __read_captcha_image_file(self, content: bytes, content_type: str = "file"):
"""
Функция отвечает за чтение уже сохранённого файла или файла в уодировке base64
:param content: Параметр строка-путь указывающий на изображение капчи для отправки её на сервер
@ -418,13 +396,9 @@ class aioSquareNetTextTask:
self.task_payload["task"].update({"columnsCount": columnsCount})
# если был передан линк на локальный скачаный файл
if image_file:
captcha_id = await self.__read_captcha_image_file(
image_file, content_type="file"
)
captcha_id = await self.__read_captcha_image_file(image_file, content_type="file")
elif image_base64:
captcha_id = await self.__read_captcha_image_file(
image_base64, content_type="base64"
)
captcha_id = await self.__read_captcha_image_file(image_base64, content_type="base64")
elif image_link:
# согласно значения переданного параметра выбираем функцию для сохранения изображения
if self.save_format == "const":

16
test.py
View File

@ -120,13 +120,7 @@ class TestAntiCaptcha(object):
def test_recaptcha_v3_params(self):
default_init_params = ["self", "anticaptcha_key", "sleep_time", "callbackUrl"]
default_handler_params = [
"self",
"websiteURL",
"websiteKey",
"minScore",
"pageAction",
]
default_handler_params = ["self", "websiteURL", "websiteKey", "minScore", "pageAction"]
# get customcaptcha init and captcha_handler params
aioinit_params = inspect.getfullargspec(
ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless.__init__
@ -165,9 +159,7 @@ class TestAntiCaptcha(object):
# check response type
assert type(response) is dict
# check all dict keys
assert ["errorId", "errorCode", "errorDescription", "taskId"] == list(
response.keys()
)
assert ["errorId", "errorCode", "errorDescription", "taskId"] == list(response.keys())
# check error code
# TODO change to `0`
assert response["errorId"] == 31
@ -239,9 +231,7 @@ class TestAntiCaptcha(object):
anticaptcha_key=self.anticaptcha_key_fail
) as recaptcha:
# check response type
assert (
type(recaptcha) is ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless
)
assert type(recaptcha) is ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless
response = yield recaptcha.captcha_handler(
websiteURL="https://www.google.com/recaptcha/api2/demo",

View File

@ -23,9 +23,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
default_complaint_params = ["self", "reported_id", "captcha_type"]
default_queue_status_params = ["queue_id"]
# get aiocaptchacontrol init and other params
aio_init_params = inspect.getfullargspec(
AntiCaptchaControl.aioAntiCaptchaControl.__init__
)
aio_init_params = inspect.getfullargspec(AntiCaptchaControl.aioAntiCaptchaControl.__init__)
aio_balance_params = inspect.getfullargspec(
AntiCaptchaControl.aioAntiCaptchaControl.get_balance
)
@ -40,12 +38,8 @@ class TestAntiCaptcha(MainAntiCaptcha):
)
# get captchacontrol init and other params
init_params = inspect.getfullargspec(
AntiCaptchaControl.AntiCaptchaControl.__init__
)
balance_params = inspect.getfullargspec(
AntiCaptchaControl.AntiCaptchaControl.get_balance
)
init_params = inspect.getfullargspec(AntiCaptchaControl.AntiCaptchaControl.__init__)
balance_params = inspect.getfullargspec(AntiCaptchaControl.AntiCaptchaControl.get_balance)
app_stats_params = inspect.getfullargspec(
AntiCaptchaControl.AntiCaptchaControl.get_app_stats
)
@ -151,9 +145,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
anticaptcha_key=self.anticaptcha_key_true
)
with pytest.raises(ValueError):
assert captcha_control.get_app_stats(
softId=config.app_key, mode=self.WRONG_MODE
)
assert captcha_control.get_app_stats(softId=config.app_key, mode=self.WRONG_MODE)
def test_fail_key_complaint(self):
captcha_control = AntiCaptchaControl.AntiCaptchaControl(
@ -161,8 +153,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
)
response = captcha_control.complaint_on_result(
reported_id=self.REPORT_ID,
captcha_type=AntiCaptchaControl.complaint_types[0],
reported_id=self.REPORT_ID, captcha_type=AntiCaptchaControl.complaint_types[0]
)
assert isinstance(response, dict)
@ -175,8 +166,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
)
response = captcha_control.complaint_on_result(
reported_id=self.REPORT_ID,
captcha_type=AntiCaptchaControl.complaint_types[0],
reported_id=self.REPORT_ID, captcha_type=AntiCaptchaControl.complaint_types[0]
)
assert isinstance(response, dict)
@ -278,8 +268,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
)
response = await captcha_control.complaint_on_result(
reported_id=self.REPORT_ID,
captcha_type=AntiCaptchaControl.complaint_types[0],
reported_id=self.REPORT_ID, captcha_type=AntiCaptchaControl.complaint_types[0]
)
assert isinstance(response, dict)
@ -293,8 +282,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
)
response = await captcha_control.complaint_on_result(
reported_id=self.REPORT_ID,
captcha_type=AntiCaptchaControl.complaint_types[0],
reported_id=self.REPORT_ID, captcha_type=AntiCaptchaControl.complaint_types[0]
)
assert isinstance(response, dict)
@ -341,9 +329,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
) as captcha_control:
for mode in AntiCaptchaControl.mods:
response = captcha_control.get_app_stats(
softId=config.app_key, mode=mode
)
response = captcha_control.get_app_stats(softId=config.app_key, mode=mode)
assert isinstance(response, dict)

View File

@ -26,17 +26,13 @@ class TestAntiCaptcha(MainAntiCaptcha):
]
default_handler_params = ["self", "imageUrl"]
# get customcaptcha init and captcha_handler params
aioinit_params = inspect.getfullargspec(
CustomCaptchaTask.aioCustomCaptchaTask.__init__
)
aioinit_params = inspect.getfullargspec(CustomCaptchaTask.aioCustomCaptchaTask.__init__)
aiohandler_params = inspect.getfullargspec(
CustomCaptchaTask.aioCustomCaptchaTask.captcha_handler
)
# get customcaptcha init and captcha_handler params
init_params = inspect.getfullargspec(
CustomCaptchaTask.CustomCaptchaTask.__init__
)
init_params = inspect.getfullargspec(CustomCaptchaTask.CustomCaptchaTask.__init__)
handler_params = inspect.getfullargspec(
CustomCaptchaTask.CustomCaptchaTask.captcha_handler
)
@ -67,9 +63,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
# check all dict keys
assert ["clientKey", "task", "softId"] == list(request_payload.keys())
assert request_payload["softId"] == config.app_key
assert ["type", "assignment", "imageUrl"] == list(
request_payload["task"].keys()
)
assert ["type", "assignment", "imageUrl"] == list(request_payload["task"].keys())
assert request_payload["task"]["type"] == "CustomCaptchaTask"
def test_get_result_payload(self):
@ -80,9 +74,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
assert isinstance(customcaptcha, CustomCaptchaTask.CustomCaptchaTask)
with requests_mock.Mocker() as req_mock:
req_mock.register_uri(
"POST", config.create_task_url, json=self.VALID_RESPONSE_JSON
)
req_mock.register_uri("POST", config.create_task_url, json=self.VALID_RESPONSE_JSON)
req_mock.register_uri(
"POST", config.get_result_url, json=self.VALID_RESPONSE_RESULT_JSON
)

View File

@ -24,9 +24,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
)
# get customcaptcha init and task_handler params
init_params = inspect.getfullargspec(
CustomResultHandler.CustomResultHandler.__init__
)
init_params = inspect.getfullargspec(CustomResultHandler.CustomResultHandler.__init__)
handler_params = inspect.getfullargspec(
CustomResultHandler.CustomResultHandler.task_handler
)
@ -53,9 +51,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
# check response type
assert isinstance(response, dict)
# check all dict keys
assert ["errorId", "errorCode", "errorDescription", "taskId"] == list(
response.keys()
)
assert ["errorId", "errorCode", "errorDescription", "taskId"] == list(response.keys())
@pytest.mark.asyncio
async def test_response_aioresult_handler(self):
@ -70,9 +66,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
# check response type
assert isinstance(response, dict)
# check all dict keys
assert ["errorId", "errorCode", "errorDescription", "taskId"] == list(
response.keys()
)
assert ["errorId", "errorCode", "errorDescription", "taskId"] == list(response.keys())
"""
Fail tests

View File

@ -24,25 +24,16 @@ class TestAntiCaptcha(MainAntiCaptcha):
"language",
"callbackUrl",
]
default_handler_params = [
"self",
"captcha_link",
"captcha_file",
"captcha_base64",
]
default_handler_params = ["self", "captcha_link", "captcha_file", "captcha_base64"]
# get customcaptcha init and captcha_handler params
aioinit_params = inspect.getfullargspec(
ImageToTextTask.aioImageToTextTask.__init__
)
aioinit_params = inspect.getfullargspec(ImageToTextTask.aioImageToTextTask.__init__)
aiohandler_params = inspect.getfullargspec(
ImageToTextTask.aioImageToTextTask.captcha_handler
)
# get customcaptcha init and captcha_handler params
init_params = inspect.getfullargspec(ImageToTextTask.ImageToTextTask.__init__)
handler_params = inspect.getfullargspec(
ImageToTextTask.ImageToTextTask.captcha_handler
)
handler_params = inspect.getfullargspec(ImageToTextTask.ImageToTextTask.captcha_handler)
# check aio module params
assert default_init_params == aioinit_params[0]
assert default_handler_params == aiohandler_params[0]
@ -51,17 +42,13 @@ class TestAntiCaptcha(MainAntiCaptcha):
assert default_handler_params == handler_params[0]
def test_create_task_payload(self):
customcaptcha = ImageToTextTask.ImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail
)
customcaptcha = ImageToTextTask.ImageToTextTask(anticaptcha_key=self.anticaptcha_key_fail)
# check response type
assert isinstance(customcaptcha, ImageToTextTask.ImageToTextTask)
with requests_mock.Mocker() as req_mock:
req_mock.register_uri("GET", self.image_url, json=self.VALID_RESPONSE_JSON)
req_mock.register_uri(
"POST", config.create_task_url, json=self.ERROR_RESPONSE_JSON
)
req_mock.register_uri("POST", config.create_task_url, json=self.ERROR_RESPONSE_JSON)
customcaptcha.captcha_handler(captcha_link=self.image_url)
history = req_mock.request_history
@ -71,25 +58,19 @@ class TestAntiCaptcha(MainAntiCaptcha):
request_payload = history[1].json()
# check all dict keys
assert ["clientKey", "task", "languagePool", "softId"] == list(
request_payload.keys()
)
assert ["clientKey", "task", "languagePool", "softId"] == list(request_payload.keys())
assert request_payload["softId"] == config.app_key
assert ["type", "body"] == list(request_payload["task"].keys())
assert request_payload["task"]["type"] == "ImageToTextTask"
def test_get_result_payload(self):
customcaptcha = ImageToTextTask.ImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail
)
customcaptcha = ImageToTextTask.ImageToTextTask(anticaptcha_key=self.anticaptcha_key_fail)
# check response type
assert isinstance(customcaptcha, ImageToTextTask.ImageToTextTask)
with requests_mock.Mocker() as req_mock:
req_mock.register_uri("GET", self.image_url, json=self.VALID_RESPONSE_JSON)
req_mock.register_uri(
"POST", config.create_task_url, json=self.VALID_RESPONSE_JSON
)
req_mock.register_uri("POST", config.create_task_url, json=self.VALID_RESPONSE_JSON)
req_mock.register_uri(
"POST", config.get_result_url, json=self.VALID_RESPONSE_RESULT_JSON
)
@ -110,9 +91,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
"""
def test_response_imagecaptcha(self):
imagecaptcha = ImageToTextTask.ImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail
)
imagecaptcha = ImageToTextTask.ImageToTextTask(anticaptcha_key=self.anticaptcha_key_fail)
# check response type
assert isinstance(imagecaptcha, ImageToTextTask.ImageToTextTask)
@ -144,14 +123,12 @@ class TestAntiCaptcha(MainAntiCaptcha):
def test_fail_imagecaptcha_value(self):
with pytest.raises(ValueError):
assert ImageToTextTask.ImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail,
save_format=self.WRONG_SAVE_FORMAT,
anticaptcha_key=self.anticaptcha_key_fail, save_format=self.WRONG_SAVE_FORMAT
)
def test_fail_imagecaptcha_const(self):
imagecaptcha = ImageToTextTask.ImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail,
save_format=ImageToTextTask.SAVE_FORMATS[0],
anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[0]
)
response = imagecaptcha.captcha_handler(captcha_link=self.image_url)
@ -160,8 +137,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
def test_fail_imagecaptcha_const_context(self):
with ImageToTextTask.ImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail,
save_format=ImageToTextTask.SAVE_FORMATS[0],
anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[0]
) as imagecaptcha:
response = imagecaptcha.captcha_handler(captcha_link=self.image_url)
@ -170,8 +146,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
def test_fail_imagecaptcha_temp(self):
imagecaptcha = ImageToTextTask.ImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail,
save_format=ImageToTextTask.SAVE_FORMATS[1],
anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[1]
)
response = imagecaptcha.captcha_handler(captcha_link=self.image_url)
@ -180,8 +155,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
def test_fail_imagecaptcha_temp_context(self):
with ImageToTextTask.ImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail,
save_format=ImageToTextTask.SAVE_FORMATS[1],
anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[1]
) as imagecaptcha:
response = imagecaptcha.captcha_handler(captcha_link=self.image_url)
@ -192,15 +166,13 @@ class TestAntiCaptcha(MainAntiCaptcha):
async def test_fail_aioimagecaptcha_value(self):
with pytest.raises(ValueError):
assert await ImageToTextTask.ImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail,
save_format=self.WRONG_SAVE_FORMAT,
anticaptcha_key=self.anticaptcha_key_fail, save_format=self.WRONG_SAVE_FORMAT
)
@pytest.mark.asyncio
async def test_fail_aioimagecaptcha_temp(self):
imagecaptcha = ImageToTextTask.aioImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail,
save_format=ImageToTextTask.SAVE_FORMATS[1],
anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[1]
)
response = await imagecaptcha.captcha_handler(captcha_link=self.image_url)
assert 1 == response["errorId"]
@ -208,8 +180,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
@pytest.mark.asyncio
async def test_fail_aioimagecaptcha_temp_context(self):
with ImageToTextTask.aioImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail,
save_format=ImageToTextTask.SAVE_FORMATS[1],
anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[1]
) as imagecaptcha:
response = await imagecaptcha.captcha_handler(captcha_link=self.image_url)
assert 1 == response["errorId"]
@ -217,8 +188,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
@pytest.mark.asyncio
async def test_fail_aioimagecaptcha_const(self):
imagecaptcha = ImageToTextTask.aioImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail,
save_format=ImageToTextTask.SAVE_FORMATS[0],
anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[0]
)
response = await imagecaptcha.captcha_handler(captcha_link=self.image_url)
assert 1 == response["errorId"]
@ -226,8 +196,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
@pytest.mark.asyncio
async def test_fail_aioimagecaptcha_const_context(self):
with ImageToTextTask.aioImageToTextTask(
anticaptcha_key=self.anticaptcha_key_fail,
save_format=ImageToTextTask.SAVE_FORMATS[0],
anticaptcha_key=self.anticaptcha_key_fail, save_format=ImageToTextTask.SAVE_FORMATS[0]
) as imagecaptcha:
response = await imagecaptcha.captcha_handler(captcha_link=self.image_url)
assert 1 == response["errorId"]

View File

@ -15,13 +15,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
def test_recaptcha3_params(self):
default_init_params = ["self", "anticaptcha_key", "sleep_time", "callbackUrl"]
default_handler_params = [
"self",
"websiteURL",
"websiteKey",
"minScore",
"pageAction",
]
default_handler_params = ["self", "websiteURL", "websiteKey", "minScore", "pageAction"]
# get customcaptcha init and captcha_handler params
aioinit_params = inspect.getfullargspec(
ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless.__init__
@ -72,9 +66,7 @@ class TestAntiCaptcha(MainAntiCaptcha):
anticaptcha_key=self.anticaptcha_key_fail
)
# check response type
assert isinstance(
recaptcha, ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless
)
assert isinstance(recaptcha, ReCaptchaV3TaskProxyless.aioReCaptchaV3TaskProxyless)
response = await recaptcha.captcha_handler(
websiteURL="https://www.google.com/recaptcha/api2/demo",