replaycli-py/api/anticaptcha/cli.py

119 lines
3.8 KiB
Python
Raw Normal View History

2022-01-13 15:14:01 +00:00
from asyncio.windows_events import NULL
2022-01-11 15:17:35 +00:00
import os
import json
import requests
2022-01-13 15:14:01 +00:00
import urllib
2022-01-11 15:17:35 +00:00
class AntiCaptcha:
"""
## AntiCaptcha Client
---
Esta classe utiliza o serviço svc_anticaptcha para quebrar provas de robô presentes em sites.
"""
ep: str = ""
2022-01-13 15:14:01 +00:00
def __init__(self):
2022-01-11 15:17:35 +00:00
self.ep = "https://localhost:8443"
2022-01-13 15:14:01 +00:00
def __request_json_post__(self, path: str, object: dict):
2022-01-11 15:17:35 +00:00
2022-01-13 15:14:01 +00:00
"""
## HTTP JSON POST
---
Este método é responsável por realizar requisições HTTP do tipo POST para objetos JSON.
2022-01-11 15:17:35 +00:00
2022-01-13 15:14:01 +00:00
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
2022-01-11 15:17:35 +00:00
2022-01-13 15:14:01 +00:00
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 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)