def captcha_handler(self, objectName: str, rowsCount: int, columnsCount:int, image_link: str = None, image_file: str = None, image_base64: str = None): ''' Этот тип задачи берет вашу картинку, добавляет на нее сетку нужного размера и отдает работнику с требованием выбрать объекты нужного типа. :param objectName: Имя объекта. :param rowsCount: Кол-во строк. Min 2, max 5 :param columnsCount: Кол-во колонок. Min 2, max 5 :param image_link: Ссылка на изображение :param image_file: Необязательный параметр, служит для открытия уже скачанных файлов изображений. :param image_base64: Загрузка изображения в кодировке base64 :return: Возвращает весь ответ сервера JSON-строкой. ''' # проверка параметров сетки if not 2<=rowsCount<=5 or not 2<=columnsCount<=5: raise ValueError('Параметр `rowsCount` и `columnsCount` должен быть больше 2 и меньше 5.' f'Вы передали - `rowsCount`:{rowsCount}, `columnsCount`:{columnsCount}') # обновляем task_payload новыми данными для сетки разметки и названия предмета self.task_payload['task'].update({"objectName": objectName}) self.task_payload['task'].update({"rowsCount": rowsCount}) self.task_payload['task'].update({"columnsCount": columnsCount}) # проводим действия над файлом(декодируем и передаём на сервер) if image_file: captcha_id = self.__read_captcha_image_file(image_file, content_type="file") # проводим действия над файлом уже закодированном в base64(передаём на сервер) elif image_base64: captcha_id = self.__read_captcha_image_file(image_base64, content_type="base64") # проводим действия над ссылкой на файл(скачиваем, сохраняем и передаём на сервер) elif image_link: content = requests.get(image_link).content # согласно значения переданного параметра выбираем функцию для сохранения изображения if self.save_format == 'const': captcha_id = self.__image_const_saver(content) elif self.save_format == 'temp': captcha_id = self.__image_temp_saver(content) else: raise ParamError(additional_info="""You must set one of param - `image_file/image_base64/image_link`.\n Вы должны задать один из параметров - `image_file/image_base64/image_link`.""") # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера if captcha_id['errorId'] == 0: captcha_id = captcha_id["taskId"] self.result_payload.update({"taskId": captcha_id}) else: return captcha_id # если передан параметр `callbackUrl` - не ждём решения капчи а возвращаем незаполненный ответ if self.task_payload.get('callbackUrl'): return self.result_payload else: # Ожидаем решения капчи time.sleep(self.sleep_time) return get_sync_result(result_payload = self.result_payload, sleep_time = self.sleep_time)
def captcha_handler( self, captcha_link: str = None, captcha_file: str = None, captcha_base64: str = None, **kwargs, ) -> dict: """ Метод получает от вас ссылку на изображение, скачивает его, отправляет изображение на сервер RuCaptcha, дожидается решения капчи и вовзращает вам результат :param captcha_link: Ссылка на изображение :param captcha_file: Необязательный параметр, служит для открытия уже скачанных файлов изображений. :param captcha_base64: Загрузка изображения в кодировке base64 :param kwargs: Дополнительные параметры для `requests.get(....)` скачивающего изображение, если передана ссылка. :return: Возвращает весь ответ сервера JSON-строкой. """ if 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: content = self.session.get(captcha_link, **kwargs).content # согласно значения переданного параметра выбираем функцию для сохранения изображения if self.save_format == SAVE_FORMATS[0]: captcha_id = self.__image_const_saver(content) elif self.save_format == SAVE_FORMATS[1]: captcha_id = self.__image_temp_saver(content) else: raise ParamError( additional_info= """You must set one of param - `captcha_file/captcha_base64/captcha_link`.\n Вы должны задать один из параметров - `captcha_file/captcha_base64/captcha_link`.""" ) # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера if captcha_id["errorId"] == 0: captcha_id = captcha_id["taskId"] self.result_payload.update({"taskId": captcha_id}) else: return captcha_id # если передан параметр `callbackUrl` - не ждём решения капчи а возвращаем незаполненный ответ if self.task_payload.get("callbackUrl"): return self.result_payload else: # Ожидаем решения капчи time.sleep(self.sleep_time) return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
async def captcha_handler( self, captcha_link: str = None, captcha_file: str = None, captcha_base64: str = None, ): """ Метод получает от вас ссылку на изображение, скачивает его, отправляет изображение на сервер RuCaptcha, дожидается решения капчи и вовзращает вам результат :param captcha_link: Ссылка на изображение :return: Возвращает весь ответ сервера JSON-строкой. """ # если был передан линк на локальный скачаный файл if captcha_file: captcha_id = await self.__read_captcha_image_file( captcha_file, content_type="file") elif captcha_base64: captcha_id = await self.__read_captcha_image_file( captcha_base64, content_type="base64") elif captcha_link: # согласно значения переданного параметра выбираем функцию для сохранения изображения if self.save_format == "const": captcha_id = await self.__image_const_saver(captcha_link) elif self.save_format == "temp": captcha_id = await self.__image_temp_saver(captcha_link) else: raise ParamError( additional_info= """You must set one of param - `captcha_file/captcha_base64/captcha_link`.\n Вы должны задать один из параметров - `captcha_file/captcha_base64/captcha_link`.""" ) # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера if captcha_id["errorId"] == 0: captcha_id = captcha_id["taskId"] self.result_payload.update({"taskId": captcha_id}) else: return captcha_id # если передан параметр `callbackUrl` - не ждём решения капчи а возвращаем незаполненный ответ if self.task_payload.get("callbackUrl"): return self.result_payload else: # Ждем решения капчи await asyncio.sleep(self.sleep_time) return await get_async_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
async def captcha_handler( self, objectName: str, rowsCount: int, columnsCount: int, image_link: str = None, image_file: str = None, image_base64: str = None, ) -> dict: """ Этот тип задачи берет вашу картинку, добавляет на нее сетку нужного размера и отдает работнику с требованием выбрать объекты нужного типа. :param objectName: Имя объекта. :param rowsCount: Кол-во строк. Min 2, max 5 :param columnsCount: Кол-во колонок. Min 2, max 5 :param image_link: Ссылка на изображение :param image_file: Необязательный параметр, служит для открытия уже скачанных файлов изображений. :param image_base64: Загрузка изображения в кодировке base64 :return: Возвращает весь ответ сервера JSON-строкой. """ # проверка параметров сетки if (2 < rowsCount < 5) and (2 < columnsCount < 5): raise ValueError( "Параметр `rowsCount` и `columnsCount` должен быть больше 2 и меньше 5." f"Вы передали - `rowsCount`:{rowsCount}, `columnsCount`:{columnsCount}" ) # обновляем task_payload новыми данными для сетки разметки и названия предмета self.task_payload["task"].update({"objectName": objectName}) self.task_payload["task"].update({"rowsCount": rowsCount}) self.task_payload["task"].update({"columnsCount": columnsCount}) # если был передан линк на локальный скачаный файл if image_file: captcha_id = await self.__read_captcha_image_file( image_file, content_type="file") elif image_base64: captcha_id = await self.__read_captcha_image_file( image_base64, content_type="base64") elif image_link: # согласно значения переданного параметра выбираем функцию для сохранения изображения if self.save_format == "const": captcha_id = await self.__image_const_saver(image_link) elif self.save_format == "temp": captcha_id = await self.__image_temp_saver(image_link) else: raise ParamError( additional_info= """You must set one of param - `image_file/image_base64/image_link`.\n Вы должны задать один из параметров - `image_file/image_base64/image_link`.""" ) # Проверка статуса создания задачи, если создано без ошибок - извлекаем ID задачи, иначе возвращаем ответ сервера if captcha_id["errorId"] == 0: captcha_id = captcha_id["taskId"] self.result_payload.update({"taskId": captcha_id}) else: return captcha_id # если передан параметр `callbackUrl` - не ждём решения капчи а возвращаем незаполненный ответ if self.task_payload.get("callbackUrl"): return self.result_payload else: # Ждем решения капчи await asyncio.sleep(self.sleep_time) return await get_async_result(result_payload=self.result_payload, sleep_time=self.sleep_time)