Merge pull request #11 from wandersoncferreira/master

Adding base64 support to Anti-Captcha in ImageToTextTask
This commit is contained in:
Andrei 2018-05-13 01:53:07 +03:00 committed by GitHub
commit 37e956a65d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 10 deletions

View File

@ -92,27 +92,31 @@ class ImageToTextTask:
return captcha_id return captcha_id
def read_captcha_image_file(self, content): def read_captcha_image_file(self, content, content_type="file"):
""" """
Функция отвечает за чтение уже сохранённого файла Функция отвечает за чтение уже сохранённого файла
:param content: Параметр строка-путь указывающий на изображение капчи для отправки её на сервер :param content: Параметр строка-путь указывающий на изображение капчи для отправки её на сервер
:return: Возвращает ID капчи :return: Возвращает ID капчи
""" """
try: try:
with open(content, 'rb') as captcha_image: if content_type == "file":
# Добавляем в пайлоад картинку и отправляем with open(content, 'rb') as captcha_image:
self.task_payload['task'].update({"body": base64.b64encode(captcha_image.read()).decode('utf-8')}) # Добавляем в пайлоад картинку и отправляем
# Отправляем на антикапча изображение капчи и другие парметры, self.task_payload['task'].update({"body": base64.b64encode(captcha_image.read()).decode('utf-8')})
# в результате получаем JSON ответ содержащий номер решаемой капчи elif content_type == "base64":
captcha_id = requests.post(create_task_url, json=self.task_payload).json() self.task_payload["task"].update({"body": content})
else:
raise Exception
# Отправляем на антикапча изображение капчи и другие парметры,
# в результате получаем JSON ответ содержащий номер решаемой капчи
captcha_id = requests.post(create_task_url, json=self.task_payload).json()
except IOError: except IOError:
raise ReadError() raise ReadError()
return captcha_id return captcha_id
# Работа с капчёй # Работа с капчёй
def captcha_handler(self, captcha_link = None, captcha_file = None, **kwargs): def captcha_handler(self, captcha_link=None, captcha_file=None, captcha_base64=None, **kwargs):
''' '''
Метод получает от вас ссылку на изображение, скачивает его, отправляет изображение на сервер Метод получает от вас ссылку на изображение, скачивает его, отправляет изображение на сервер
RuCaptcha, дожидается решения капчи и вовзращает вам результат RuCaptcha, дожидается решения капчи и вовзращает вам результат
@ -121,7 +125,9 @@ class ImageToTextTask:
:return: Возвращает весь ответ сервера JSON-строкой. :return: Возвращает весь ответ сервера JSON-строкой.
''' '''
if captcha_file: if captcha_file:
captcha_id = self.read_captcha_image_file(captcha_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")
elif captcha_link: elif captcha_link:
content = requests.get(captcha_link, **kwargs).content content = requests.get(captcha_link, **kwargs).content
# согласно значения переданного параметра выбираем функцию для сохранения изображения # согласно значения переданного параметра выбираем функцию для сохранения изображения