From 2ce84f3784a2fc52ee25fc97b0fc3fdcfac896b3 Mon Sep 17 00:00:00 2001 From: Andrei Date: Mon, 30 Oct 2017 00:13:32 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=80=D0=B8=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index b360719..5d65e83 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ python setup.py install *** ### На данный момент реализованы следующие методы: -1.[Решение капчи-изображения.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/python3_anticaptcha/ImageToTextTask.py) +1.[Решение капчи-изображения.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcah_image_to_text_example.py) Краткий пример: ```python @@ -41,25 +41,10 @@ user_answer = ImageToTextTask.ImageToTextTask(anticaptcha_key = ANTICAPTCHA_KEY) print(user_answer) ``` -2.[Решение новой ReCaptcha v2 с прокси.](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/ReCaptchaV2.py) +2.[Решение новой ReCaptcha v2 с прокси.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_nocaptcha_example.py) -Краткий пример: -```python -from python3_anticaptcha import NoCaptchaTask -# Введите ключ от сервиса AntiCaptcha, из своего аккаунта -ANTICAPTCHA_KEY = "" -# G-ReCaptcha ключ сайта -SITE_KEY = "" -# Ссылка на страницу с капчёй -PAGE_URL = "" -# Возвращается строка-расшифровка капчи -user_answer = NoCaptchaTask.NoCaptchaTask(rucaptcha_key=ANTICAPTCHA_KEY).captcha_handler(site_key=SITE_KEY, - page_url=PAGE_URL) -print(user_answer) -``` - -3.[Решение новой ReCaptcha v2 без прокси.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/python3_anticaptcha/NoCaptchaTaskProxyless.py) +3.[Решение новой ReCaptcha v2 без прокси.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_nocaptcha_example.py) Краткий пример: ```python @@ -71,13 +56,14 @@ SITE_KEY = '6LeuMjIUAAAAAODtAglF13UiJys0y05EjZugej6b' # Ссылка на страницу с капчёй PAGE_URL = 'https://www.google.com/recaptcha/intro/android.html' # Возвращается строка-расшифровка капчи -user_answer = NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(rucaptcha_key=ANTICAPTCHA_KEY).captcha_handler(websiteURL=PAGE_URL, - websiteKey=SITE_KEY) +user_answer = NoCaptchaTaskProxyless.NoCaptchaTaskProxyless(anticaptcha_key = ANTICAPTCHA_KEY)\ + .captcha_handler(websiteURL=PAGE_URL, + websiteKey=SITE_KEY) print(user_answer) ``` -4.[Решение FunCaptchaTask.](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/RotateCaptcha.py) +4.[Решение FunCaptchaTask.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_fun_example.py) Краткий пример: ```python @@ -90,16 +76,16 @@ SITE_KEY = '' PAGE_URL = '' # Возвращается строка с ключём для отправки на проверку user_answer = FunCaptchaTask.FunCaptchaTask(anticaptcha_key=ANTICAPTCHA_KEY, - proxyType="HTTP", + proxyType="http", proxyAddress="8.8.8.8", - proxyPort=8080) + proxyPort=8080)\ .captcha_handler(websiteURL=PAGE_URL, websitePublicKey=SITE_KEY) print(user_answer) ``` -5.[Модуль для получения инофрмации о балансе аккаунта и отправке жалоб.](https://github.com/AndreiDrang/python-rucaptcha/blob/master/python_rucaptcha/RuCaptchaControl.py) +5.[Модуль для получения инофрмации о балансе аккаунта и отправке жалоб.](https://github.com/AndreiDrang/python3-anticaptcha/blob/master/anticaptcha_examples/anticaptcha_control_example.py) Краткий пример: ```python From bee899bb044ff5a4342df407bc82e0084381b296 Mon Sep 17 00:00:00 2001 From: redV0ID Date: Tue, 31 Oct 2017 05:15:44 +0700 Subject: [PATCH 2/3] async method added --- python3_anticaptcha/NoCaptchaTask.py | 82 +++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/python3_anticaptcha/NoCaptchaTask.py b/python3_anticaptcha/NoCaptchaTask.py index 2c63f65..78a11f3 100644 --- a/python3_anticaptcha/NoCaptchaTask.py +++ b/python3_anticaptcha/NoCaptchaTask.py @@ -1,6 +1,7 @@ import requests import time - +import asyncio +import aiohttp from .config import create_task_url, get_result_url, app_key, user_agent_data @@ -69,4 +70,81 @@ class NoCaptchaTask: else: return captcha_response.json() else: - return captcha_response.json() \ No newline at end of file + return captcha_response.json() + + + +class aioNoCaptchaTask: + + def __init__(self, anticaptcha_key, proxyAddress, proxyPort, sleep_time=5, proxyType = 'http', **kwargs): + """ + Модуль отвечает за решение NoCaptcha. + userAgent рандомно берётся из актульного списка браузеров-параметров + :param anticaptcha_key: ключ от АнтиКапчи + :param proxyAdress: Адрес прокси-сервера + :param proxyPort: Порт сервера + :param proxyType: Тип прокси http/socks5/socks4 + :param sleeptime: Время ожидания решения + :param kwargs: Необязательные параметры, можно переопределить userAgent + """ + self.sleep_time = sleep_time + + # Пайлоад для создания задачи + self.task_payload = {"clientKey": anticaptcha_key, + "task": + { + "type": "FunCaptchaTask", + "userAgent": user_agent_data, + "proxyType": proxyType, + "proxyAddress": proxyAddress, + "proxyPort": proxyPort, + }, + } + + # пайлоад для получения ответа сервиса + self.result_payload = {"clientKey": anticaptcha_key} + # заполнить пайлоад остальными аргументами + if kwargs: + for key in kwargs: + self.task_payload['task'].update({key: kwargs[key]}) + + # Работа с капчей + async def captcha_handler(self, websiteURL, websiteKey): + """ + Метод получает ссылку на страницу, где расположена капча, и ключ капчи + :param: websiteURL: Ссылка на страницу с капчёй + :param: websiteKey: Ключ капчи(как его получить - описано в документаии на сайте антикапчи) + return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи) + """ + self.task_payload["task"].update({"websiteURL": websiteURL, + "websiteKey": websiteKey}) + # отправляем реквест, в ответ получаем JSON содержащий номер решаемой капчи + captcha_id = requests.post(create_task_url, json=self.task_payload).json() + async with aiohttp.ClientSession() as session: + async with session.post(create_task_url, json=self.task_payload) as resp: + captcha_id = await resp.json() + + # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера + if captcha_id["errorId"] == 0: + captcha_id = captcha_id["taskId"] + self.result_payload.update({"taskId": captcha_id}) + else: + return captcha_id + + # Ждем решения капчи + await asyncio.sleep(self.sleep_time) + # Отправляем запрос на статус решения капчи. + async with aiohttp.ClientSession as session: + while True: + async with session.post(get_result_url, json=self.result_payload) as resp: + json_result = await resp.json() + # Если нет ошибки - проверяем статус капчи + if json_result["errorId"] == 0: + # Если еще не оешена, ожидаем + if json_result["status"] == "processing": + await asyncio.sleep(self.sleep_time) + # Иначе возвращаем ответ + else: + return json_result + else: + json_result \ No newline at end of file From 0b680122a2640bf8d3d9d1be8befbebf310f42ed Mon Sep 17 00:00:00 2001 From: Andrei Date: Tue, 31 Oct 2017 01:24:27 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python3_anticaptcha/NoCaptchaTask.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/python3_anticaptcha/NoCaptchaTask.py b/python3_anticaptcha/NoCaptchaTask.py index 78a11f3..78d0cde 100644 --- a/python3_anticaptcha/NoCaptchaTask.py +++ b/python3_anticaptcha/NoCaptchaTask.py @@ -2,6 +2,7 @@ import requests import time import asyncio import aiohttp + from .config import create_task_url, get_result_url, app_key, user_agent_data @@ -140,11 +141,11 @@ class aioNoCaptchaTask: json_result = await resp.json() # Если нет ошибки - проверяем статус капчи if json_result["errorId"] == 0: - # Если еще не оешена, ожидаем + # Если еще не решена, ожидаем if json_result["status"] == "processing": await asyncio.sleep(self.sleep_time) # Иначе возвращаем ответ else: return json_result else: - json_result \ No newline at end of file + return json_result