2017-10-30 11:37:39 +00:00
|
|
|
|
import asyncio
|
2018-07-27 10:15:17 +00:00
|
|
|
|
import base64
|
|
|
|
|
import requests
|
2017-10-30 11:37:39 +00:00
|
|
|
|
|
2018-11-01 16:01:36 +00:00
|
|
|
|
from python3_anticaptcha import ImageToTextTask, CallbackClient
|
2018-05-15 11:18:17 +00:00
|
|
|
|
from python3_anticaptcha import errors
|
2017-10-29 20:21:06 +00:00
|
|
|
|
|
|
|
|
|
ANTICAPTCHA_KEY = ""
|
|
|
|
|
"""
|
|
|
|
|
Данная библиотека реализует два различных метода для сохранения изображений(для последующей их передачи сервису):
|
2018-07-27 10:15:17 +00:00
|
|
|
|
1. В качестве временного файла, параметр задаётся по умолчанию:
|
2017-10-29 20:21:06 +00:00
|
|
|
|
save_format = 'temp' .
|
|
|
|
|
2. В качестве обычного файла, для этого нужно передать:
|
2018-10-21 18:39:30 +00:00
|
|
|
|
save_format = 'const' .
|
2018-07-27 10:15:17 +00:00
|
|
|
|
========================================================================================================================
|
|
|
|
|
This library implements two different methods for saving images (for their subsequent transfer to the service):
|
|
|
|
|
1. As a temporary file, the parameter is set by default:
|
|
|
|
|
save_format = 'temp'.
|
|
|
|
|
2. As a normal file, you need to pass this:
|
2018-10-21 18:39:30 +00:00
|
|
|
|
save_format = 'const' .
|
2017-10-29 20:21:06 +00:00
|
|
|
|
"""
|
2017-12-15 11:24:20 +00:00
|
|
|
|
# Пример который показывает работу антикапчи при решении капчи-изображением и сохранением её в качестве обычного файла в
|
|
|
|
|
# папку.
|
|
|
|
|
# Example for working with captcha-image link, and save it like a usual file in system.
|
|
|
|
|
|
2019-03-19 19:26:12 +00:00
|
|
|
|
result = ImageToTextTask.ImageToTextTask(
|
|
|
|
|
anticaptcha_key=ANTICAPTCHA_KEY, save_format="const"
|
2019-11-25 17:08:18 +00:00
|
|
|
|
).captcha_handler(captcha_link="http://85.255.8.26/static/image/common_image_example/800070.png")
|
2017-12-15 11:24:20 +00:00
|
|
|
|
print(result)
|
|
|
|
|
|
2017-10-29 20:21:06 +00:00
|
|
|
|
# Пример который показывает работу антикапчи при решении капчи-изображением и сохранением её в качестве ВРЕМЕННОГО файла
|
2017-12-15 11:24:20 +00:00
|
|
|
|
# Протестировано на Линуксах. Не используйте данный вариант на Windows! Возможно починим, но потом.
|
|
|
|
|
# Example for working with captcha-image like a temporary file. Tested on UNIX-based systems. Don`t use it on Windows!
|
2019-11-25 17:08:18 +00:00
|
|
|
|
result = ImageToTextTask.ImageToTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(
|
2019-03-19 19:26:12 +00:00
|
|
|
|
captcha_link="http://85.255.8.26/static/image/common_image_example/800070.png"
|
|
|
|
|
)
|
2017-10-30 11:37:39 +00:00
|
|
|
|
print(result)
|
|
|
|
|
|
2018-05-15 11:18:17 +00:00
|
|
|
|
"""
|
2018-07-27 10:15:17 +00:00
|
|
|
|
========================================================================================================================
|
|
|
|
|
Base64 files
|
|
|
|
|
Пример работы с декодированием в base64 файла-капчи "налету"
|
|
|
|
|
An example of working with decoding in base64 captcha-file after download. On-the-fly-encoding
|
|
|
|
|
"""
|
2019-03-19 19:26:12 +00:00
|
|
|
|
base_64_link = base64.b64encode(
|
2019-11-25 17:08:18 +00:00
|
|
|
|
requests.get("http://85.255.8.26/static/image/common_image_example/862963.png").content
|
2019-03-19 19:26:12 +00:00
|
|
|
|
).decode("utf-8")
|
2017-10-30 11:37:39 +00:00
|
|
|
|
|
2019-03-19 19:26:12 +00:00
|
|
|
|
user_answer_base64 = ImageToTextTask.ImageToTextTask(
|
|
|
|
|
anticaptcha_key=ANTICAPTCHA_KEY
|
|
|
|
|
).captcha_handler(captcha_base64=base_64_link)
|
2017-12-14 20:41:13 +00:00
|
|
|
|
|
|
|
|
|
"""
|
2017-12-15 11:24:20 +00:00
|
|
|
|
Пример работы со скачанными файлами изображений капчи.
|
|
|
|
|
Example for working with downloaded file.
|
2017-12-14 20:41:13 +00:00
|
|
|
|
"""
|
|
|
|
|
# Синхронный
|
|
|
|
|
# папка в которой находится изображение, один из вариантов написания
|
2017-12-15 11:24:20 +00:00
|
|
|
|
# The path to the file must be transferred in this format to the method
|
2019-03-19 19:26:12 +00:00
|
|
|
|
captcha_file = "088636.png"
|
2017-12-14 20:41:13 +00:00
|
|
|
|
# так же есть возможность передать так:
|
2017-12-15 11:24:20 +00:00
|
|
|
|
# or in this format:
|
2017-12-14 20:41:13 +00:00
|
|
|
|
# captcha_file = 'D:\/Python\/933588.png'
|
2018-05-15 11:18:17 +00:00
|
|
|
|
# captcha_file = r'D:\Python\933588.png'
|
2017-12-14 20:41:13 +00:00
|
|
|
|
|
2019-11-25 17:08:18 +00:00
|
|
|
|
result = ImageToTextTask.ImageToTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(
|
|
|
|
|
captcha_file=captcha_file
|
|
|
|
|
)
|
2017-12-14 20:41:13 +00:00
|
|
|
|
print(result)
|
2018-05-15 11:18:17 +00:00
|
|
|
|
"""
|
|
|
|
|
Пример для работы с локальными файлами
|
|
|
|
|
"""
|
|
|
|
|
# папка в которой находится изображение, один из вариантов написания
|
2017-12-14 20:41:13 +00:00
|
|
|
|
|
2018-05-15 11:18:17 +00:00
|
|
|
|
# так же есть возможность передать так:
|
|
|
|
|
# captcha_file = r'D:\Python\933588.png'
|
|
|
|
|
# captcha_file = 'D:\/Python\/933588.png'
|
|
|
|
|
try:
|
2019-03-19 19:26:12 +00:00
|
|
|
|
user_answer_local = ImageToTextTask.ImageToTextTask(
|
|
|
|
|
anticaptcha_key=ANTICAPTCHA_KEY
|
|
|
|
|
).captcha_handler(captcha_file=captcha_file)
|
|
|
|
|
if user_answer_local["errorId"] == 0:
|
2018-05-15 11:18:17 +00:00
|
|
|
|
# решение капчи
|
2019-03-19 19:26:12 +00:00
|
|
|
|
print(user_answer_local["solution"]["text"])
|
|
|
|
|
elif user_answer_local["errorId"] == 1:
|
2018-05-15 11:18:17 +00:00
|
|
|
|
# Тело ошибки, если есть
|
2019-03-19 19:26:12 +00:00
|
|
|
|
print(user_answer_local["errorBody"])
|
2018-05-15 11:18:17 +00:00
|
|
|
|
|
|
|
|
|
# отлов ошибки при проблемах чтения файла-изображения
|
|
|
|
|
except errors.ReadError as err:
|
|
|
|
|
print(err)
|
2017-12-15 11:24:20 +00:00
|
|
|
|
|
2018-07-27 10:15:17 +00:00
|
|
|
|
"""
|
|
|
|
|
========================================================================================================================
|
|
|
|
|
Asynchronous examples
|
|
|
|
|
Пример асинхронного запуска решения капчи
|
|
|
|
|
# AsyncIO example. Work with constant-saved file.
|
|
|
|
|
"""
|
2019-03-19 19:26:12 +00:00
|
|
|
|
|
|
|
|
|
|
2018-07-27 10:15:17 +00:00
|
|
|
|
async def run():
|
|
|
|
|
try:
|
2019-03-19 19:26:12 +00:00
|
|
|
|
resolve = await ImageToTextTask.aioImageToTextTask(
|
|
|
|
|
anticaptcha_key=ANTICAPTCHA_KEY, save_format="const"
|
|
|
|
|
).captcha_handler(
|
|
|
|
|
captcha_link="http://85.255.8.26/static/image/common_image_example/800070.png"
|
|
|
|
|
)
|
2018-07-27 10:15:17 +00:00
|
|
|
|
|
|
|
|
|
print(resolve)
|
|
|
|
|
|
2019-03-19 19:26:12 +00:00
|
|
|
|
resolve = await ImageToTextTask.aioImageToTextTask(
|
|
|
|
|
anticaptcha_key=ANTICAPTCHA_KEY
|
|
|
|
|
).captcha_handler(captcha_file=captcha_file)
|
2017-12-15 11:24:20 +00:00
|
|
|
|
|
|
|
|
|
print(resolve)
|
2018-10-21 18:11:22 +00:00
|
|
|
|
|
2019-03-19 19:26:12 +00:00
|
|
|
|
resolve = await ImageToTextTask.aioImageToTextTask(
|
|
|
|
|
anticaptcha_key=ANTICAPTCHA_KEY
|
|
|
|
|
).captcha_handler(captcha_base64=base_64_link)
|
2018-10-21 18:11:22 +00:00
|
|
|
|
|
|
|
|
|
print(resolve)
|
|
|
|
|
|
2017-12-15 11:24:20 +00:00
|
|
|
|
except Exception as err:
|
|
|
|
|
print(err)
|
2017-12-14 20:41:13 +00:00
|
|
|
|
|
|
|
|
|
|
2019-03-19 19:26:12 +00:00
|
|
|
|
if __name__ == "__main__":
|
2017-12-15 11:24:20 +00:00
|
|
|
|
loop = asyncio.get_event_loop()
|
|
|
|
|
loop.run_until_complete(run())
|
|
|
|
|
loop.close()
|
2018-11-01 16:01:36 +00:00
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
Callback example
|
|
|
|
|
"""
|
2019-03-19 19:26:12 +00:00
|
|
|
|
QUEUE_KEY = "wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue"
|
2018-11-01 16:01:36 +00:00
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
Перед тем как начать пользоваться сервисом нужно создать для своей задачи отдельную очередь
|
|
|
|
|
Очередь можно создать один раз и пользоваться постоянно
|
|
|
|
|
|
|
|
|
|
Для создания очереди нужно передать два параметра:
|
|
|
|
|
1. key - название очереди, чем оно сложнее тем лучше
|
|
|
|
|
2. vhost - название виртуального хоста(в данном случаи - `anticaptcha_vhost`)
|
|
|
|
|
"""
|
|
|
|
|
|
2019-03-19 19:26:12 +00:00
|
|
|
|
answer = requests.post(
|
2019-11-25 17:08:18 +00:00
|
|
|
|
"http://85.255.8.26:8001/register_key", json={"key": QUEUE_KEY, "vhost": "anticaptcha_vhost"}
|
2019-03-19 19:26:12 +00:00
|
|
|
|
)
|
|
|
|
|
# если очередь успешно создана:
|
|
|
|
|
if answer == "OK":
|
2018-11-01 16:01:36 +00:00
|
|
|
|
|
|
|
|
|
# создаём задание с callbackURL параметром
|
2019-03-19 19:26:12 +00:00
|
|
|
|
result = ImageToTextTask.ImageToTextTask(
|
|
|
|
|
anticaptcha_key=ANTICAPTCHA_KEY,
|
|
|
|
|
callbackUrl=f"http://85.255.8.26:8001/anticaptcha/image_to_text/{QUEUE_KEY}",
|
|
|
|
|
).captcha_handler(
|
|
|
|
|
captcha_link="http://85.255.8.26/static/image/common_image_example/800070.png"
|
|
|
|
|
)
|
2018-11-01 16:01:36 +00:00
|
|
|
|
print(result)
|
|
|
|
|
|
|
|
|
|
# получение результата из кеша
|
2019-03-19 19:26:12 +00:00
|
|
|
|
print(CallbackClient.CallbackClient(task_id=result["taskId"]).captcha_handler())
|
2018-11-01 16:01:36 +00:00
|
|
|
|
# получение результата из RabbitMQ очереди
|
2019-03-19 19:26:12 +00:00
|
|
|
|
print(
|
|
|
|
|
CallbackClient.CallbackClient(
|
|
|
|
|
task_id=result["taskId"], queue_name=QUEUE_KEY, call_type="queue"
|
|
|
|
|
).captcha_handler()
|
|
|
|
|
)
|