コード例 #1
0
    def captcha_handler(self, imageUrl: str, **kwargs) -> dict:
        """
                Метод получает ссылку изображение для задания
                :param imageUrl: URL картинки
        :param kwargs: Дополнительные параметры для `requests.post(....)`.
                :return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи)
        """
        self.task_payload["task"].update({"imageUrl": imageUrl})
        # Отправляем на антикапча параметры фанкапич,
        # в результате получаем JSON ответ содержащий номер решаемой капчи
        captcha_id = requests.post(create_task_url,
                                   json=self.task_payload,
                                   verify=False).json()

        # Проверка статуса создания задачи, если создано без ошибок - извлекаем 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)
コード例 #2
0
    def captcha_handler(self, websiteURL, websiteKey, **kwargs):
        """
		Метод решения ReCaptcha
		: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,
                                   **kwargs).json()

        # Проверка статуса создания задачи, если создано без ошибок - извлекаем 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)
コード例 #3
0
    def captcha_handler(self, websiteURL: str, websitePublicKey: str,
                        **kwargs):
        """
		Метод получает ссылку на страницу на которпой расположена капча и ключ капчи
		:param websiteURL: Ссылка на страницу с капчёй
		:param websitePublicKey: Ключ капчи(как его получить - описано в документаии на сайте антикапчи)
		:return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи)
		"""
        self.task_payload["task"].update({
            "websiteURL": websiteURL,
            "websitePublicKey": websitePublicKey
        })
        # Отправляем на антикапча параметры фанкапич,
        # в результате получаем JSON ответ содержащий номер решаемой капчи
        captcha_id = requests.post(create_task_url,
                                   json=self.task_payload,
                                   **kwargs).json()

        # Проверка статуса создания задачи, если создано без ошибок - извлекаем 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)
コード例 #4
0
	def captcha_handler(self, challenge: str):
		"""
		Метод получает ссылку изображение для задания
		:param challenge: Переменный токен который необходимо обновлять каждый раз перед созданием задачи
		:return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи)
		"""
		self.task_payload['task'].update({"challenge": challenge})
		# Отправляем на антикапча параметры фанкапич,
		# в результате получаем JSON ответ содержащий номер решаемой капчи
		captcha_id = requests.post(create_task_url, json=self.task_payload).json()

		# Проверка статуса создания задачи, если создано без ошибок - извлекаем 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)
コード例 #5
0
    def captcha_handler(self, websiteURL: str, websiteKey: str):
        """
        Метод получает ссылку на страницу, где расположена капча, и ключ капчи
        :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()

        # Проверка статуса создания задачи, если создано без ошибок - извлекаем 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)
コード例 #6
0
    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)
コード例 #7
0
    def task_handler(self, task_id: int) -> dict:
        """
        Method get task ID and try get captcha solution from server
        :param task_id: Captcha task ID
        """
        # update payload to get a captcha solution
        self.result_payload.update({"taskId": task_id})

        # wait captcha solution result
        time.sleep(self.sleep_time)
        return get_sync_result(result_payload=self.result_payload, sleep_time=self.sleep_time)
コード例 #8
0
    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)
コード例 #9
0
    def captcha_handler(
        self,
        websiteURL: str,
        websiteKey: str,
        minScore: float,
        pageAction: str,
        **kwargs,
    ) -> dict:
        """
		Метод решения ReCaptcha V3
		:param websiteURL: Ссылка на страницу с капчёй
		:param websiteKey: Ключ-индентификатор рекапчи на целевой странице. Берется из HTML этой страницы.
		:param minScore: Определяет фильтр, по которому отбирается работник с нужным минимальным score.
		:param pageAction: Значение параметра action, которое передается виджетом рекапчи в гугл,
                            и которое потом видит владелец сайта при проверке токена.
		:param kwargs: Дополнительные параметры для `requests.post`, который отправляет даныйе на решение.
		:return: Возвращает ответ сервера в виде JSON-строки
		"""
        if minScore not in MIN_SCORES:
            raise ValueError(
                f"Wrong `minScore` param - {minScore}, available params - {MIN_SCORES};"
            )
        # вставляем в пайлоад адрес страницы и ключ-индентификатор рекапчи
        self.task_payload["task"].update({
            "websiteURL": websiteURL,
            "websiteKey": websiteKey,
            "minScore": minScore,
            "pageAction": pageAction,
        })
        # Отправляем на антикапчу пайлоад
        # в результате получаем JSON ответ содержащий номер решаемой капчи
        captcha_id = requests.post(create_task_url,
                                   json=self.task_payload,
                                   **kwargs).json()

        # Проверка статуса создания задачи, если создано без ошибок - извлекаем 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)
コード例 #10
0
    def captcha_handler(self,
                        websiteURL: str,
                        websiteKey: str,
                        recaptchaDataSValue: str = "",
                        **kwargs) -> dict:
        """
                Метод решения ReCaptcha
                :param websiteURL: Ссылка на страницу с капчёй
                :param websiteKey: Ключ капчи сайта(как получить - написано в документации)
                :param recaptchaDataSValue: Некоторые реализации виджета рекапчи могут содержать
                                    дополнительный параметр "data-s" в div'е рекапчи,
                                    который является одноразовым токеном и
                                    должен собираться каждый раз при решении рекапчи.
        :param kwargs: Дополнительные параметры для `requests.post(....)`.
                :return: Возвращает ответ сервера в виде JSON-строки
        """

        # вставляем в пайлоад адрес страницы и ключ-индентификатор рекапчи
        self.task_payload["task"].update({
            "websiteURL":
            websiteURL,
            "websiteKey":
            websiteKey,
            "recaptchaDataSValue":
            recaptchaDataSValue,
        })
        # Отправляем на антикапчу пайлоад
        # в результате получаем JSON ответ содержащий номер решаемой капчи
        captcha_id = requests.post(create_task_url,
                                   json=self.task_payload,
                                   verify=False,
                                   **kwargs).json()

        # Проверка статуса создания задачи, если создано без ошибок - извлекаем 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)
コード例 #11
0
    def captcha_handler(self,
                        websiteURL: str,
                        websiteKey: str,
                        recaptchaDataSValue: str = "",
                        **kwargs) -> dict:
        """
        Метод получает ссылку на страницу, где расположена капча, и ключ капчи
        :param: websiteURL: Ссылка на страницу с капчёй
        :param: websiteKey: Ключ капчи(как его получить - описано в документаии на сайте антикапчи)
                :param recaptchaDataSValue: Некоторые реализации виджета рекапчи могут содержать
                                    дополнительный параметр "data-s" в div'е рекапчи,
                                    который является одноразовым токеном и
                                    должен собираться каждый раз при решении рекапчи.
        :param kwargs: Дополнительные параметры для `requests.post(....)`.
        return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи)
        """
        self.task_payload["task"].update({
            "websiteURL":
            websiteURL,
            "websiteKey":
            websiteKey,
            "recaptchaDataSValue":
            recaptchaDataSValue,
        })
        # отправляем реквест, в ответ получаем JSON содержащий номер решаемой капчи
        captcha_id = requests.post(create_task_url,
                                   json=self.task_payload,
                                   verify=False,
                                   **kwargs).json()

        # Проверка статуса создания задачи, если создано без ошибок - извлекаем 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)
コード例 #12
0
    def captcha_handler(self, websiteURL: str, websiteKey: str,
                        **kwargs) -> dict:
        """
        Метод получает ссылку на страницу на которпой расположена капча и ключ капчи
        :param websiteURL: Адрес страницы на которой решается капча
        :param websiteKey: Ключ-индентификатор капчи на целевой странице.
        :param kwargs: Дополнительные параметры для `requests.post(....)`.
        :return: Возвращает ответ сервера в виде JSON(ответ так же можно глянуть в документации антикапчи)
        """
        self.task_payload["task"].update({
            "websiteURL": websiteURL,
            "websiteKey": websiteKey
        })
        # Отправляем на антикапча параметры фанкапич,
        # в результате получаем JSON ответ содержащий номер решаемой капчи
        captcha_id = requests.post(create_task_url,
                                   json=self.task_payload,
                                   verify=False,
                                   **kwargs).json()

        # Проверка статуса создания задачи, если создано без ошибок - извлекаем 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)