python3-anticaptcha/anticaptcha_examples/callback_examples.py

78 lines
5.8 KiB
Python
Raw Normal View History

import asyncio
import requests
from python3_anticaptcha import NoCaptchaTaskProxyless, CallbackClient
ANTICAPTCHA_KEY = "ae23fffcfaa29b170e3843e3a486ef19"
QUEUE_KEY = 'wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue'
"""
Пример показывает работу с модулем CallbackClient на основе работы с NoCaptchaTaskProxyless
(точно так же это работает со всеми остальными доступными методами решения капчи)
предназначенным для получения ответа не капчу высланного на callback сервер.
-------------------------------------------------------------
Все решения которые получает сервер записываются в:
1. RabbitMQ очередь, в которой сообщение после прочтения пользователем удаляется
2. Кеш(memcached) в котором сообщение хранится 1 час
"""
"""
Перед тем как начать пользоваться сервисом нужно создать для своей задачи отдельную очередь
Очередь можно создать один раз и пользоваться постоянно
Для создания очереди нужно передать два параметра:
1. key - название очереди, чем оно сложнее тем лучше
2. vhost - название виртуального хоста(в данном случаи - `anticaptcha_vhost`)
"""
answer = requests.post('http://85.255.8.26:8001/register_key', json={'key':QUEUE_KEY,
'vhost':'anticaptcha_vhost'})
# если очередь успешно создана:
if answer == 'OK':
# Пример показывает работу антикапчи с "невидимой" рекапчёй от гугла, точно так же работает обычная рекапча от гугла.
# Это метод для работы без прокси
result = NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(anticaptcha_key = ANTICAPTCHA_KEY,
callbackUrl=f'http://85.255.8.26:8001/anticaptcha/nocaptcha/{QUEUE_KEY}'
).captcha_handler(websiteURL='https://www.google.com/recaptcha/api2/demo',
websiteKey='6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-')
print(result)
# получение результата из кеша
print(CallbackClient.CallbackClient(task_id=result['taskId']).captcha_handler())
# получение результата из RabbitMQ очереди с переопределением стандартных параметров
print(CallbackClient.CallbackClient(task_id=result['taskId'], queue_name=QUEUE_KEY, call_type='queue').captcha_handler(requests_timeout=0.5,
auth_params = {
'host': '85.255.8.26',
'port': '8001',
'rtmq_username': 'hardworker_1',
'rtmq_password': 'password',
'rtmq_host': '85.255.8.26',
'rtmq_port': '5672',
'rtmq_vhost': 'anticaptcha_vhost'
}
))
# Асинхронный пример
async def run():
try:
result = await NoCaptchaTaskProxyless.aioNoCaptchaTaskProxyless(anticaptcha_key=ANTICAPTCHA_KEY,
callbackUrl=f'http://85.255.8.26:8001/anticaptcha/nocaptcha/{QUEUE_KEY}'
).captcha_handler(websiteURL='https://www.google.com/recaptcha/api2/demo',
websiteKey='6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-')
print(result)
# получение результата из кеша
print(CallbackClient.CallbackClient(task_id=result['taskId']).captcha_handler())
# получение результата из RabbitMQ очереди, со стандартными параметрами
print(CallbackClient.CallbackClient(task_id=result['taskId'], queue_name=QUEUE_KEY, call_type='queue').captcha_handler())
except Exception as err:
print(err)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
loop.close()