Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Callback module и новые методы решения капчи #22

Merged
merged 16 commits into from Nov 14, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
9d7ba52
Добавление в модуль ImageToTextTask `callbackURL` параметра и типиза…
AndreiDrang Nov 1, 2018
88a1e39
Добавление callbackurl параметра в funcaptcha и nocaptcha
AndreiDrang Nov 1, 2018
53b363b
Добавление модуля CallbackClient для работы с callback решениями
AndreiDrang Nov 1, 2018
39269c3
Добавление в конфиг параметров для подключения к стандартному callbac…
AndreiDrang Nov 1, 2018
23a241a
Рефакторинг imagetotext/anticaptchacontrol модулей добавление типизации
AndreiDrang Nov 1, 2018
004fcc7
Добавление в gitignore папки с конфигами для vscode
AndreiDrang Nov 1, 2018
46a0670
Добавление файла с примером для работы с callbackURL
AndreiDrang Nov 1, 2018
679317c
Обновление версии бибилотеки и зависимостей
AndreiDrang Nov 1, 2018
7d7edc6
Добавление во все примеры работы с модулями капчи - callbackURL примеров
AndreiDrang Nov 1, 2018
264d190
Добавлен модуль CustomCaptchaTask
AndreiDrang Nov 1, 2018
297511c
Добавление двух новых методов решения капчи - GeeTestTaskProxyless и …
AndreiDrang Nov 1, 2018
e2113d6
Удаление из конфига и требований при установке библиотеки fake_useragent
AndreiDrang Nov 1, 2018
d0d01f8
Удаление user_agent_data из всех методов решения капчи
AndreiDrang Nov 1, 2018
891f285
Правка callback URL'ов в примерах. Добавление в Callback пример доп.п…
AndreiDrang Nov 2, 2018
6ae4ded
Добавление SquareNetTextTask метода решения капчи
AndreiDrang Nov 2, 2018
40f7248
Правка примера работы с SquareNetTask и добавление для него примера
AndreiDrang Nov 2, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -7,3 +7,5 @@ python3_anticaptcha/__pycache__/
/python3_anticaptcha.egg-info/

build/

\.vscode/
34 changes: 31 additions & 3 deletions anticaptcha_examples/anticaptcah_image_to_text_example.py
Expand Up @@ -2,7 +2,7 @@
import base64
import requests

from python3_anticaptcha import ImageToTextTask
from python3_anticaptcha import ImageToTextTask, CallbackClient
from python3_anticaptcha import errors

ANTICAPTCHA_KEY = ""
Expand Down Expand Up @@ -37,7 +37,6 @@
"""
========================================================================================================================
Base64 files

Пример работы с декодированием в base64 файла-капчи "налету"
An example of working with decoding in base64 captcha-file after download. On-the-fly-encoding
"""
Expand Down Expand Up @@ -84,7 +83,6 @@
"""
========================================================================================================================
Asynchronous examples

Пример асинхронного запуска решения капчи
# AsyncIO example. Work with constant-saved file.
"""
Expand Down Expand Up @@ -113,3 +111,33 @@ async def run():
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
loop.close()

"""
Callback example
"""
QUEUE_KEY = 'wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue'

"""
Перед тем как начать пользоваться сервисом нужно создать для своей задачи отдельную очередь
Очередь можно создать один раз и пользоваться постоянно

Для создания очереди нужно передать два параметра:
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':

# создаём задание с callbackURL параметром
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')
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())
41 changes: 39 additions & 2 deletions anticaptcha_examples/anticaptcha_fun_example.py
@@ -1,6 +1,7 @@
import asyncio
import requests

from python3_anticaptcha import FunCaptchaTask
from python3_anticaptcha import FunCaptchaTask, CallbackClient


ANTICAPTCHA_KEY = ""
Expand Down Expand Up @@ -40,4 +41,40 @@ async def run():
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
loop.close()
loop.close()

"""
Callback example
"""
QUEUE_KEY = 'wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue'

"""
Перед тем как начать пользоваться сервисом нужно создать для своей задачи отдельную очередь
Очередь можно создать один раз и пользоваться постоянно

Для создания очереди нужно передать два параметра:
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':

# создаём задание с callbackURL параметром
result = FunCaptchaTask.FunCaptchaTask(anticaptcha_key=ANTICAPTCHA_KEY,
proxyType='http',
proxyAddress="8.8.8.8",
proxyPort=8080,
proxyLogin="proxyLoginHere",
proxyPassword="proxyPasswordHere",
callbackUrl=f'http://85.255.8.26:8001/anticaptcha/fun_captcha/{QUEUE_KEY}') \
.captcha_handler(websiteURL=WEB_URL,
websitePublicKey=SITE_KEY)
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())
53 changes: 45 additions & 8 deletions anticaptcha_examples/anticaptcha_nocaptcha_example.py
@@ -1,14 +1,15 @@
import asyncio
import requests

from python3_anticaptcha import NoCaptchaTaskProxyless, NoCaptchaTask
from python3_anticaptcha import NoCaptchaTaskProxyless, NoCaptchaTask, CallbackClient

ANTICAPTCHA_KEY = ""
ANTICAPTCHA_KEY = "ae23fffcfaa29b170e3843e3a486ef19"

# Пример показывает работу антикапчи с "невидимой" рекапчёй от гугла, точно так же работает обычная рекапча от гугла.
# Это метод для работы без прокси
result = NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(anticaptcha_key = ANTICAPTCHA_KEY)\
.captcha_handler(websiteURL='https://www.google.com/recaptcha/intro/android.html',
websiteKey='6LeuMjIUAAAAAODtAglF13UiJys0y05EjZugej6b')
.captcha_handler(websiteURL='https://www.google.com/recaptcha/api2/demo',
websiteKey='6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-')
print(result)

# Пример работы антикапчи с гугловской невидимой рекапчёй и обычной рекапчёй с использованием ПРОКСИ
Expand All @@ -18,17 +19,17 @@
proxyPort=8080,
proxyLogin="proxyLoginHere",
proxyPassword="proxyPasswordHere")\
.captcha_handler(websiteURL='https://www.google.com/recaptcha/intro/android.html',
websiteKey='6LeuMjIUAAAAAODtAglF13UiJys0y05EjZugej6b')
.captcha_handler(websiteURL='https://www.google.com/recaptcha/api2/demo',
websiteKey='6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-')

print(result)

# Асинхронный пример
async def run():
try:
result = await NoCaptchaTaskProxyless.aioNoCaptchaTaskProxyless(anticaptcha_key=ANTICAPTCHA_KEY) \
.captcha_handler(websiteURL='https://www.google.com/recaptcha/intro/android.html',
websiteKey='6LeuMjIUAAAAAODtAglF13UiJys0y05EjZugej6b')
.captcha_handler(websiteURL='https://www.google.com/recaptcha/api2/demo',
websiteKey='6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-')
print(result)
except Exception as err:
print(err)
Expand All @@ -38,3 +39,39 @@ async def run():
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
loop.close()

"""
Callback example
"""
QUEUE_KEY = 'wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue'

"""
Перед тем как начать пользоваться сервисом нужно создать для своей задачи отдельную очередь
Очередь можно создать один раз и пользоваться постоянно

Для создания очереди нужно передать два параметра:
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':
# создаём задание с callbackURL параметром
result = NoCaptchaTask.NoCaptchaTask(anticaptcha_key = ANTICAPTCHA_KEY,
proxyType='http',
proxyAddress="8.8.8.8",
proxyPort=8080,
proxyLogin="proxyLoginHere",
proxyPassword="proxyPasswordHere",
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())
68 changes: 68 additions & 0 deletions anticaptcha_examples/anticaptcha_square_net_task.py
@@ -0,0 +1,68 @@
import asyncio

import requests

from python3_anticaptcha import SquareNetTextTask, CallbackClient

"""
Пример работы с данным типом капчи

SquareNetTextTask : выбрать нужный объект на картинке с сеткой изображений
________________________
SquareNetTextTask : select objects on image with an overlay grid
"""
# вводим ключ от сервиса
ANTICAPTCHA_KEY = ""

# Простой пример работы / Base example
result = SquareNetTextTask.SquareNetTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(objectName='captcha numbers',
rowsCount=2,
columnsCount=3,
image_link='https://raw.githubusercontent.com/AndreiDrang/python-rucaptcha/master/examples/088636.png')
print(result)

# Асинхронный метод работы / Asyncio exaple
async def run():

result = await SquareNetTextTask.aioSquareNetTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(objectName='captcha numbers',
rowsCount=2,
columnsCount=3,
image_link='https://raw.githubusercontent.com/AndreiDrang/python-rucaptcha/master/examples/088636.png')
print(result)

if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
loop.close()

"""
Callback example
"""
QUEUE_KEY = 'wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ_anticaptcha_queue'

"""
Перед тем как начать пользоваться сервисом нужно создать для своей задачи отдельную очередь
Очередь можно создать один раз и пользоваться постоянно

Для создания очереди нужно передать два параметра:
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':
# создаём задание с callbackURL параметром
result = SquareNetTextTask.SquareNetTextTask(anticaptcha_key=ANTICAPTCHA_KEY,
callbackUrl=f'http://85.255.8.26:8001/anticaptcha/fun_captcha/{QUEUE_KEY}') \
.captcha_handler(objectName='captcha numbers',
rowsCount=2,
columnsCount=3,
image_link='https://raw.githubusercontent.com/AndreiDrang/python-rucaptcha/master/examples/088636.png')
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())
82 changes: 82 additions & 0 deletions anticaptcha_examples/callback_examples.py
@@ -0,0 +1,82 @@
import asyncio

import aiohttp
import requests
import pika
import time
import json

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()