Pular para o conteúdo

API

Introdução

Com a API v1.5 do Undetectable, você poderá obter uma lista de perfis, criar, iniciar, atualizar e fechar perfis. Além disso, com as informações obtidas nos perfis baseados no núcleo do Chromium, você poderá conectar várias ferramentas de automação, como Puppeteer, Playwright, entre outras.

Você pode baixar o Chromedriver para trabalhar com o Selenium aqui:
Windows
MacOS M series
MacOS Intel

O programa deve estar em execução para usar a API.

Por padrão, o servidor local é executado na porta 25325. Se essa porta estiver ocupada, ele será executado em outra porta. Você pode verificar a porta nas configurações do programa e alterá-la, se necessário.

Para acessar o servidor local, use o IP 127.0.0.1, localhost ou o IP local dentro da sua rede, juntamente com a porta das configurações e o caminho que deseja executar, por exemplo, http://localhost:25325/status.

Todas as respostas da API têm o seguinte formato:

{
"code": `<código de status>`,
"status": `<status>`,
"data": `<objeto de retorno>`,
}

onde <código de status> e <status> refletem o status:

<código de status><status>Descrição
0”success”sucesso
1”error”erro, <objeto de retorno> = {“error”:“descrição do erro”}

<objeto de retorno> - vários dados enviados pela API, como uma lista de perfis.

Os erros têm o seguinte formato:

{
"code":1,
"status":"error",
"data":
{"error": "descrição do erro"},
}

Requisições

Status

  • Caminho: /status
  • Método: GET

Descrição: Retorna o status do servidor local, se ele está funcionando ou não.

Dados de retorno
{
"code":0,
"status":"success",
"data":{},
}

Lista de perfis

  • Caminho: /list
  • Método: GET

Descrição: Retorna uma lista de perfis no navegador Chromium disponíveis no programa.

Dados de retorno
{
"code": 0,
"status": "success",
"data" {
"profile_id1": {
"name": "Perfil1" // Nome do perfil no programa
"status": "Disponível", // status do perfil, pode ser: "Iniciado", "Bloqueado", "Disponível"
"debug_port": "xxxx", // porta de depuração do navegador, usada para automação (valor vazio se o perfil não estiver em execução). Apenas para o navegador Chromium
"websocket_link": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // link para o navegador, usado para automação (valor vazio se o perfil não estiver em execução). Apenas para o navegador Chromium
"folder": "Nome", // Nome da pasta do perfil
"tags": ["tag1", "tag2", "tag3"], // Tags do perfil
"cloud_id": "", // ID do perfil na nuvem
"creation_date": 123456789, // Data de criação em formato Unix Timestamp
"modify_date": 123456789, // Data de modificação em formato Unix Timestamp
},
"profile_id2": {
},
},
}

Criação de perfil

  • Caminho: /profile/create
  • Método: POST

Descrição: Cria um perfil com os parâmetros selecionados. Todos os parâmetros são opcionais e podem ser omitidos. A lista de navegadores para o comando: Chrome, Edge, FireFox, IE, Opera, Safari, Yandex. A lista de sistemas operacionais para o comando: Windows, Windows 7, Windows 8, Windows 8.1, Windows 10, Android, iPhone, iPad, Linux, Mac. Se não houver configurações com o sistema operacional ou navegador selecionado, um tipo aleatório de sistema operacional ou navegador será usado.
Formato: JSON

Parâmetros da solicitação:
{
"name": "perfil com configurações aleatórias", // Nome do perfil no programa
"os": "Windows", // Configuração do sistema operacional a ser usado
"browser": "Chrome", // Configuração do navegador a ser usado
"cpu": 8, // Número de núcleos, valores possíveis: 32, 24, 20, 16, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1, 0
"memory": 8, // Quantidade de memória, valores possíveis: 8, 4, 2, 1, 0
"tags": ["tag1", "tag2"], // Definir tags para o perfil
"geolocation": "12.44, 13.524", // Definir geolocalização, se inserir um valor vazio ou incorreto, as configurações padrão serão usadas
"resolution": "1024x768", // Resolução da tela, valores possíveis: "800x600", "960x540", "1024x768", "1152x864", "1280x720", "1280x768", "1280x800", "1280x1024", "1366x768", "1408x792", "1440x900", "1400x1050", "1440x1080", "1536x864", "1600x900", "1600x1024", "1600x1200", "1680x1050", "1920x1080", "1920x1200", "2048x1152", "2560x1080", "2560x1440", "3440x1440", "3840x2160", "5120x1440"
"proxy": "socks5://127.0.0.1:5555:login:pass", // Alterar o proxy no perfil (os proxies podem ser http, https, socks5, podem ter login/senha ou não)
"notes": "Texto", // Alterar as notas no perfil
"folder": "testFolder", // Em qual pasta o perfil será criado
"language": "ru-RU, en-US", // É possível definir 2 idiomas
"cookies": [{}], // Importar cookies para o perfil
"type": "cloud", // Tipo de perfil: cloud, local
"group": "group_example", // Se nenhum grupo for inserido, ele usará as configurações padrão, se houver um grupo inserido e ele for inválido, será exibido um erro
"configid": "id", // ID da configuração, se inserido, os parâmetros OS e Browser serão ignorados, os outros parâmetros serão usados se possível, por exemplo, se a configuração for para Android, a resolução da tela não será alterada
"accounts": [ // Importar contas de diferentes sites para o perfil
{"website": "facebook.com", "username": "test@gmail.com", "password": "123456"},
{"website": "mail.com","username": "test@gmail.com","password": "123456"}
],
"timezone": "Pacific/Niue" ("Auto", "System") // set timezone or timezone mode
}
Dados de retorno:
{
"code": 0,
"status": "success",
"data": {
"profile_id": "xxxxxxxx...", // ID exclusivo do perfil
"name": "perfil com configurações aleatórias" // Nome do perfil no programa
}
}

Iniciar perfil

  • Caminho: /profile/start/<profileID>
  • Método: GET

Descrição: Inicia o perfil com o <profileID> selecionado. Você pode adicionar parâmetros à URL:

  • chrome_flags e passar quaisquer flags de inicialização que desejar, apenas certifique-se de codificá-las em URL encoding, por exemplo: ?chrome_flags=—blink-settings%3DimagesEnabled%3Dfalse%20—disable-webgl2
  • start-pages e especificar as páginas de inicialização, apenas certifique-se de codificá-las em URL encoding, por exemplo: ?start-pages=https%3A%2F%2Fgoogle.com%2Chttps%3A%2F%2Fya.ru
Dados de retorno
{
"code":0,
"status":"success",
"data":{
"name": "Perfil1" // Nome do perfil no programa
"websocket_link":"ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // link para o navegador, usado para automação (valor vazio se o perfil não estiver em execução). Apenas para navegadores Chromium
"debug_port": "xxxx", // porta de depuração do navegador Chromium, usada para automação (valor vazio se o perfil não estiver em execução). Apenas para navegadores Chromium
"folder": "Nome", // Nome da pasta do perfil
"tags": ["tag1", "tag2", "tag3"] // Tags do perfil
},
}

Encerrar perfil

  • Caminho: /profile/stop/<profileID>
  • Método: GET

Descrição: Encerra o perfil com o <profileID> selecionado

Retornando Dados:
{
"code": 0,
"status": "sucesso",
"data": {}
}

Atualizar Perfil

  • Caminho: /perfil/atualizar/<IDdoPerfil>
  • Método: POST

Descrição: Atualiza as informações no perfil com o <IDdoPerfil> fornecido. Todos os parâmetros são opcionais e podem não estar presentes.
Formato: JSON

Parâmetros da Requisição:
{
"proxy": "socks5://127.0.0.1:5555:login:senha", // Altera o proxy no perfil (os proxies podem ser http, https, socks5, com ou sem login/senha)
"notas": "Texto", // Altera as notas no perfil
"nome": "Nome do Perfil", // Altera o nome do perfil
"pasta":"Pasta de Teste", // Altera a pasta no perfil
"tags": ["tag1", "tag2"], // Define tags para o perfil, as tags antigas serão substituídas, se a matriz estiver vazia, todas as tags serão removidas do perfil
"geolocalizacao": "12.44, 13.524", // Define a geolocalização, se um valor vazio ou incorreto for inserido, as configurações padrão serão usadas
"cookies":[{}], // Importa cookies para o perfil
"tipo": "nuvem", // Tipo de perfil: nuvem, local
"grupo": "exemplo_de_grupo", // Se nenhum grupo for fornecido, ele será obtido nas Configurações Padrão, se um grupo inválido for fornecido, um erro será retornado
"contas": [ // Importa contas de diferentes sites para o perfil
{"website": "facebook.com", "username": "test@gmail.com", "password": "123456"},
{"website": "mail.com","username": "test@gmail.com","password": "123456"}
],
"timezone": "Pacific/Niue" ("Auto", "System") // set timezone or timezone mode
}
Retornando Dados:
{
"code": 0,
"status": "sucesso",
"data": {}
}

Excluir Perfil

  • Caminho: /perfil/excluir/<IDdoPerfil>
  • Método: GET

Descrição: Exclui o perfil com o <IDdoPerfil> fornecido.

Retornando Dados:
{
"code": 0,
"status": "sucesso",
"data": {}
}

Limpar Dados do Perfil

  • Caminho: /perfil/limpardados/<IDdoPerfil>
  • Método: GET

Descrição: Limpa todos os dados (cookies, histórico, notas, cache, etc.) do perfil com o <IDdoPerfil> fornecido.

Retornando Dados:
{
"code": 0,
"status": "sucesso",
"data": {}
}

Clear profile cookies

  • Path: /profile/clearcookies/<profileID>
  • Method: GET

Description: Clear only cookies from profile with selected <profileID>

Returning Data:
{
"code": 0,
"status": "success",
"data": {}
}

Cookies do Perfil

  • Caminho: /perfil/cookies/<IDdoPerfil>
  • Método: GET

Descrição: Retorna os cookies do perfil com o <IDdoPerfil> fornecido.

Retornando Dados:
{
"code": 0,
"status": "sucesso",
"data": {}
}

Enviar para a Nuvem

  • Caminho: /perfil/paranuvem
  • Método: POST

Descrição: Envia os perfis selecionados para a nuvem.
Formato: JSON

Parâmetros da Requisição:
{
"perfis": ["9b24cd2604d1b8260123242ab1f30c", "f4cbe3c89618bfc9647ba8a47c13f6"]
}
Retornando Dados:
{
"code": 0,
"status": "sucesso",
"data": {}
}

Tornar Local

  • Caminho: /perfil/paralocal
  • Método: POST

Descrição: Torna os perfis selecionados locais.
Formato: JSON

Parâmetros da Requisição:
{
"perfis": ["9b24cd2604d1b8260123242ab1f30c", "f4cbe3c89618bfc9647ba8a47c13f6"],
"group": "test"
}
Retornando Dados:
{
"code": 0,
"status": "sucesso",
"data": {}
}

Atualizar Versão do Navegador

  • Caminho: /perfil/atualizarversaonavegador/<IDdoPerfil>
  • Método: GET

Descrição: Atualiza a versão do navegador no perfil com o <IDdoPerfil> fornecido.
Formato: JSON

Retornando Dados:
{
"code": 0,
"status": "sucesso",
"data": {}
}

Lista de Configurações

  • Caminho: /listadeconfiguracoes
  • Método: GET

Descrição: Retorna a lista de configurações ativas.
Formato: JSON

Retornando Dados:
{
"code":0,
"status":"success",
"data": {
"config_id1":
{
"os": "Windows 10" // Sistema operacional
"browser":"Chrome 115", // Tipo e versão do navegador
"useragent": "xxxx", // UserAgent na configuração
"webgl": "Apple GPU", // WebGL na configuração
"screen": "1024x768", // Resolução da tela
},
"config_id2":
{
},
},
}

Lista de grupos

  • Caminho: /groupslist
  • Método: GET

Descrição: Retorna uma lista de grupos
Formato: JSON

Retornando Dados:
{
"code":0,
"status": "success",
"data": {["group1", "group2"]},
}

Informações do perfil

  • Caminho: /profile/getinfo/<profileID>
  • Método: GET

Descrição: Solicita informações sobre o perfil com o <profileID> selecionado
Formato: JSON

Retornando Dados:
{
"code":0,
"status": "success",
"data": {
"name": "Profile1" // Nome do perfil no programa
"status": "Disponível", // status do perfil, pode ser: "Iniciado", "Bloqueado", "Disponível"
"debug_port": "xxxx", // porta de depuração do navegador, usada para automação (valor vazio se o perfil não estiver em execução)
"websocket_link": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // link para o navegador, usado para automação (valor vazio se o perfil não estiver em execução)
"configid": "id" // ID da configuração
"cloud_id": ""
"type": "cloud" // Tipo de perfil: cloud, local
"proxy": "socks5://127.0.0.1:5555:login:pass", // Proxy do perfil
"folder": "Nome", // Nome da pasta do perfil
"tags": ["tag1", "tag2", "tag3"], // Tags do perfil
"notes": "Texto", // Notas do perfil
"useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43", // useragent do perfil
"browser": "Edge 114.0.1823.43", // Navegador do perfil
"os": "Windows 10", // Sistema operacional do perfil
"screen": "1366x768", // Resolução da tela do perfil
"language": "en-US,en;q=0.9,ak-GH;q=0.8,ak;q=0.7", // idioma do perfil
"cpu": 8, // Número de núcleos
"memory": 4, // Quantidade de memória
"creation_date": 123456789, // Data de criação do Unix Timestamp
"modify_date": 123456789, // Data de modificação do Unix Timestamp
},
}

Check IP

  • Path: /profile/getinfo/<profileID>
  • Method: GET

Description: Checks the connection in the profile with the selected , if the check fails, an error is returned
Format: JSON

Returning Data:
{
"code":0,
"status": "success",
"data": {
"ip": "127.0.0.1" // Returns the IP address in this profile
}
}

Get timezones list

  • Path: /timezoneslist
  • Method: GET

Description: Returning timezones list
Format: JSON

Returning Data:
{
"code":0,
"status": "success",
"data": {
"Pacific/Niue": "GMT-11:00",
"America/Cambridge_Bay": "GMT-7:00",
...
},
}

Exemplos

Puppeteer (Node.js)

Node.js Puppeteer Iniciar um perfil com um nome específico e abrir a página undetectable.io nesse perfil:

const puppeteer = require('puppeteer');
const axios = require('axios');
const port = 25325; // Porta
const ip = '127.0.0.1'; // IP local
const profileName = ‘TestProfile; // Nome do perfil
const sleep = (ms) => {
return new Promise((resolve) => setTimeout(resolve, ms));
};
axios.get('http://' + ip + ':' + port + '/status').then(response => {
if (response.data.code == 0) {
axios.get('http://' + ip + ':' + port + '/list').then(async response => {
for (var profile in response.data.data) {
///// Iniciar um perfil específico e navegar para a página
if (response.data.data[profile].name == profileName ) {
axios.get('http://' + ip + ':' + port + '/profile/start/' + profile).then(async response => {
try {
const browser = await puppeteer.connect({
browserWSEndpoint: response.data.data.websocket_link,
defaultViewport: null
});
const page = await browser.newPage();
await sleep(1000);
await page.goto('https://undetectable.io');
} catch (e) {
console.log(e);
}
})
.catch(error => {
console.log(error);
});
}
}
})
.catch(error => {
console.log(error);
});
}
})
.catch(error => {
console.log(error);
});

Selenium (Python)

Python + Selenium Iniciar perfis em uma determinada pasta e abrir vários sites:

from time import sleep
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
address = "127.0.0.1" # Endereço IP local da API (se você estiver trabalhando em outro computador na mesma rede ou a porta estiver aberta nas configurações do roteador, você poderá acessar a API localmente e precisará alterar este endereço)
port_from_settings_browser = '25325' # Porta da API local (pode ser encontrada nas configurações do programa)
chrome_driver_path = "chromedriver.exe" # Caminho para o chromedriver v110
ser = Service(chrome_driver_path)
chrome_options = Options()
list_response = requests.get(f'http://{address}:{port_from_settings_browser}/list').json()['data'] # Envia uma solicitação para a API local para obter a lista de perfis
profile_id = ''
for key, value in list_response.items(): # Percorre a lista de perfis e os inicia um por um
if value['folder'] == 'test': # Aqui você pode adicionar uma verificação para iniciar apenas os perfis desejados (neste exemplo, estamos iniciando os perfis que estão na pasta 'test')
profile_id = key
if value['status'] == 'Available': # Se o perfil não estiver em execução, inicia o perfil e obtém a porta de depuração
start_profile_response = requests.get(f'http://{address}:{port_from_settings_browser}/profile/start/{profile_id}', timeout=5).json()['data']
debug_port = start_profile_response['debug_port']
if value['status'] == 'Started': # Se o perfil estiver em execução, simplesmente pega a porta de depuração dos dados disponíveis
debug_port = value['debug_port']
if value['status'] == 'Locked': # Se o perfil estiver bloqueado, pula para o próximo
continue
if debug_port: # Verifica se o navegador possui uma porta de conexão (os perfis WebEngine não possuem portas, então os fechamos imediatamente)
chrome_options.debugger_address = f'{address}:{debug_port}'
driver = webdriver.Chrome(service=ser, options=chrome_options)
driver.get("https://whoer.net/") # Abre o whoer.net na guia ativa
driver.switch_to.new_window('tab') # Cria uma nova guia e muda para ela
driver.get(url='https://browserleaks.com/js') # Abre o browserleaks.com/js na guia ativa
# Aqui você pode adicionar qualquer outra ação
sleep(5) # Aguarda 5 segundos
requests.get(f'http://{address}:{port_from_settings_browser}/profile/stop/{profile_id}') # Interrompe o perfil