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