replaycli-py/api/chrome/cli.py

205 lines
6.4 KiB
Python

import json
import os
import urllib
import requests
class Chrome:
"""
## Instância do Chrome
---
Esta classe utiliza o serviço "svc_chrome.exe" para fazer manipulações no navegador.
Ela mapeia o robo através da propriedade rid.
"EP" significa endpoint, e aponta para o endereco na web on se hostea o serviço, por padrão é:
https://localhost:8443
"""
ep: str = ""
def __init__(self):
self.ep = "https://localhost:8443"
def __request_get__(self, data: str):
"""
## HTTP GET
---
Este método é responsável por realizar requisições HTTP do tipo GET.
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 + data
print("Calling: " + url)
apikey = os.environ.get('REPLAY_APIKEY')
headers = {"X-API-KEY": apikey}
res = requests.get(url, 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 __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 __request_raw_post__(self, path: str, data: str):
"""
## HTTP RAW POST
---
Este método é responsável por realizar requisições HTTP do tipo POST para objetos RAW.
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, data = data, 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 start (self, to: int = 120):
"""
## Chrome Start
Inicia uma nova sessão/instância do Google Chrome na máquina.
---
#### IMPORTANTE:
É um erro comum já estar com o Google Chrome aberto para realizar outras tarefas enquanto programa. Porém, para que este método funcione corretamente, é necessário que não haja nenhuma instância do Chrome, em primeiro ou segundo plano, ativa.
---
#### Parâmetros:
- to: Tempo em segundos que a API esperará pela abertura do Chrome. Caso o tempo seja excedido sem que o Chrome seja aberto com sucesso, é retornado um erro.
---
#### Retorna:
"" -> String vazia
"""
return self.__request_get__(f"/ipc/chrome/start?to={to}")
def start_headless (self):
"""
## Chrome Start Headless
Inicia uma nova sessão/instância do Google Chrome em segundo plano na máquina.
---
#### IMPORTANTE:
É um erro comum já estar com o Google Chrome aberto para realizar outras tarefas enquanto programa. Porém, para que este método funcione corretamente, é necessário que não haja nenhuma instância do Chrome, em primeiro ou segundo plano, ativa.
---
#### Parâmetros:
---
---
#### Retorna:
"" -> String vazia
"""
return self.__request_get__("/ipc/chrome/startHeadless")
def stop (self):
"""
## Chrome Stop
Finaliza todas as sessões/instâncias ativas, em primeiro ou segundo plano, da máquina. Caso não haja nenhuma sessão ativa, não faz nada.
---
#### IMPORTANTE:
Este método funciona apenas com instâncias inicializadas pelo Client do Chrome. Caso uma sessão do Chrome tenha sido iniciada por outros modos, não surtirá efeito.
---
#### Parâmetros:
---
---
#### Retorna:
"" -> String vazia
"""
return self.__request_get__("/ipc/chrome/stop")
def new (self, url: str = "https://www.google.com"):
"""
## Chrome New
Abre uma nova aba na instância do Google Chrome inicializada pelo client.
---
#### Parâmetros:
- url: Endereço web do site que se deseja acessar na nova aba.
---
#### Retorna:
-> ID da aba aberta.
"""
url = urllib.parse.quote(url, "")
return self.__request_get__(f"/ipc/chrome/new?url={url}")
def close (self, id: str):
"""
## Chrome Close
Fecha a aba cujo ID foi informado como parâmetro.
---
#### Parâmetros:
- id: Identificador da aba que se deseja fechar.
---
#### Retorna:
"" -> String vazia
"""
return self.__request_get__("/ipc/chrome/close/"+id)
def eval (self, id: str, command: str) -> dict:
"""
## Chrome Eval
Digita o comando recebido no Console JavaScript da página cujo ID foi recebido.
---
#### Parâmetros:
- id: Identificador da aba em que se quer acessar o console.
- command: Comando DOM JavaScript
---
#### Retorna:
-> ?
"""
return self.__request_raw_post__("/ipc/chrome/eval/"+id, command)