from asyncio.windows_events import NULL import os import json import requests import urllib class AntiCaptcha: """ ## AntiCaptcha Client --- Esta classe utiliza o serviço svc_anticaptcha para quebrar provas de robô presentes em sites. """ ep: str = "" def __init__(self): self.ep = "https://localhost:8443" def __request_json_post__(self, path: str, object: dict): """ ## HTTP JSON POST --- Este método é responsável por realizar requisições HTTP do tipo POST para objetos JSON. Ele retorna o corpo de resposta da requisição, ou uma mensagem de erro, que indica qual foi a irregularidade ocorrida ao chamar a API. """ url = self.ep + path print("Calling: " + url) apikey = os.environ.get('REPLAY_APIKEY') headers = {"X-API-KEY": apikey} res = requests.post(url, json = object, headers = headers, verify = False) if res.status_code >= 400: raise Exception(f"HTTP ERROR: {str(res.status_code)} - {res.text}") if res.headers.get("Content-Type") != None and res.headers.get("Content-Type").find("json") != -1: return json.loads(res.text) else: return res.text def recaptcha_v2 (self, site: str, data_sitekey: str): """ ## Recaptcha V2 Este método realiza a quebra de Captchas do tipo V2. - Exemplo de site com Captcha V2: https://2captcha.com/demo/recaptcha-v2 --- #### Parâmetros: - site: Endereço (url) do site que se quer quebrar o Captcha - data_sitekey: Atributo data-sitekey presente no Captcha da página - Para encontrar este atributo, é possível utilizar a função Eval do Chrome com o comando: 'document.getElementById("g-recaptcha").getAttribute("data-sitekey")' --- #### Retorna: -> Solução do Captcha. Deve ser inserido no campo oculto do captcha na página. - Para encontrar o campo oculto, pode-se utilizar o comando: 'document.getElementById("g-recaptcha-response")' """ site = urllib.parse.quote (site, "") object = { "Site": site, "Data": data_sitekey, "Img": "", "To": 300 } return self.__request_json_post__ ("/ipc/anticaptcha/recaptchav2", object) def image2text (self, site: str, img_b64: str): """ ## Image to text Este método realiza a quebra de Captchas de imagem. - Exemplo de site com Captcha de Imagem: https://seguro.cesgranrio.org.br/login.aspx --- #### Parâmetros: - site: Endereço (url) do site que se quer quebrar o Captcha - img_b64: Imagem contendo o Captcha codificada em Base64. Não há forma simples e bem definida para conseguir isso, mas o código DOM JS abaixo talvez ajude: 'let img = document.getElementById("ImgCapcha1"); var canvas = document.createElement('CANVAS'); var ctx = canvas.getContext('2d'); var dataURL; canvas.height = img.naturalHeight; canvas.width = img.naturalWidth; ctx.drawImage(img, 0, 0); dataURL = canvas.toDataURL(); dataURL.split(",")[1]' --- #### Retorna: -> Solução do Captcha. Deve ser inserido no campo de resposta do Captcha para prosseguir. """ site = urllib.parse.quote (site, "") object = { "Site": site, "Img": img_b64, "To": 300 } return self.__request_json_post__ ("/ipc/anticaptcha/image2text", object)