Przejdź do treści

API

Wprowadzenie

Dzięki API v1.5 w Undetectable możesz otrzymywać listę profili, tworzyć, uruchamiać, aktualizować i zamykać je. Ponadto, za pomocą uzyskanych informacji, w profilach na rdzeniu Chromium, możesz podłączać różne narzędzia automatyzacji, takie jak Puppeteer, Playwright i inne.

Aby korzystać z Chromedrivera do pracy z Selenium, możesz go pobrać tutaj:
Windows
MacOS M series
MacOS Intel

Aby korzystać z API, program musi być uruchomiony.

Domyślnie lokalny serwer uruchamiany jest na porcie 25325, jeśli ten port jest zajęty, zostanie uruchomiony na innym porcie. W ustawieniach programu możesz sprawdzić port i zmienić go na odpowiedni.

Aby uzyskać dostęp do lokalnego serwera, użyj IP 127.0.0.1, localhost lub lokalne IP w Twojej sieci i portu z ustawień + ścieżki, które chcesz wykonać, na przykład http://localhost:25325/status.

Wszystkie odpowiedzi na API wyglądają następująco:

{
"code": `<status code>`,
"status": `<status>`,
"data": `<return object>`,
}

gdzie <status code> i <status> odzwierciedlają status:

<status code><status>Opis
0”success”sukces
1”error”błąd, <return object> = {“error”:“opis błędu”}

<return object> – różne dane wysyłane przez API, na przykład lista profili.

Błędy mają następującą postać:

{
"code":1,
"status":"error",
"data":
{"error": "opis błędu"},
}

Zapytania

Status

  • Ścieżka: /status
  • Metoda: GET

Opis: Zwraca status lokalnego serwera, czy działa czy nie

Zwracane dane
{
"code":0,
"status":"success",
"data":{},
}

Lista profili

  • Ścieżka: /list
  • Metoda: GET

Opis: Zwraca listę profili w przeglądarce Chromium dostępnych w programie

Zwracane dane
{
"code": 0,
"status": "success",
"data" {
"profile_id1": {
"name": "Profil1" // Nazwa profilu w programie
"status": "Dostępny", // status profilu, może być: "Uruchomiony","Zablokowany", "Dostępny"
"debug_port": "xxxx", // port debugowania przeglądarki, używany do automatyzacji (puste, jeśli profil nie jest uruchomiony). Tylko dla przeglądarki Chromium
"websocket_link": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // link do przeglądarki, używany do automatyzacji (puste, jeśli profil nie jest uruchomiony). Tylko dla przeglądarki Chromium
"folder": "Nazwa", // Nazwa folderu profilu
"tags": ["tag1", "tag2", "tag3"], // Tagi profilu
"cloud_id": "", // ID profilu w chmurze
"creation_date": 123456789, // Data utworzenia w formacie Unix Timestamp
"modify_date": 123456789, // Data modyfikacji w formacie Unix Timestamp
},
"profile_id2": {
},
},
}

Tworzenie profilu

  • Ścieżka: /profile/create
  • Metoda: POST

Opis: Tworzy profil z wybranymi parametrami. Wszystkie parametry są opcjonalne i mogą ich nie być. Lista przeglądarek dla polecenia: Chrome, Edge, FireFox, IE, Opera, Safari, Yandex. Lista systemów operacyjnych dla polecenia: Windows, Windows 7, Windows 8, Windows 8.1, Windows 10, Android, iPhone, iPad, Linux, Mac. Jeśli nie ma konfiguracji z wybranym systemem operacyjnym lub przeglądarką, zostanie użyty losowy typ systemu operacyjnego lub przeglądarki
Format: JSON

Parametry żądania:
{
"name": "profil z losowymi ustawieniami", // Nazwa profilu w programie
"os": "Windows", // Konfiguracja systemu operacyjnego do użycia
"browser": "Chrome", // Konfiguracja przeglądarki do użycia
"cpu": 8, // Liczba rdzeni, możliwe wartości: 32, 24, 20, 16, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1, 0
"memory": 8, // Ilość pamięci, możliwe wartości: 8, 4, 2, 1, 0
"tags": ["tag1", "tag2"], // Ustawienie tagów dla profilu
"geolocation": "12.44, 13.524", // Ustawienie geolokalizacji, jeśli zostanie podana pusta lub nieprawidłowa wartość, zostaną użyte domyślne ustawienia
"resolution": "1024x768", // Rozdzielczość ekranu, możliwe wartości: "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", // Zmiana proxy w profilu (proxy mogą być http, https, socks5, mogą zawierać login/hasło lub nie)
"notes": "Tekst", // Zmiana notatek w profilu
"folder": "testFolder", // Folder, w którym znajduje się profil
"language": "ru-RU, en-US", // Można ustawić 2 języki
"cookies": [{}], // Importowanie plików cookie do profilu
"type": "cloud", // Typ profilu: cloud, local
"group": "group_example", // Jeśli nie podano grupy, zostanie użyta domyślna konfiguracja, jeśli podano nieprawidłową grupę, zostanie wyświetlony błąd
"configid": "id", // ID konfiguracji, jeśli podane, to parametry OS i Browser zostaną zignorowane, a pozostałe parametry zostaną użyte, na przykład, jeśli konfiguracja jest dla Androida, rozdzielczość ekranu nie zostanie zmieniona
"accounts": [ // Importowanie kont z różnych stron do profilu
{"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
}
Zwracane dane:
{
"code": 0,
"status": "success",
"data": {
"profile_id": "xxxxxxxx...", // Unikalne ID profilu
"name": "profil z losowymi ustawieniami" // Nazwa profilu w programie
}
}

Uruchamianie profilu

  • Ścieżka: /profile/start/<profileID>
  • Metoda: GET

Opis: Uruchamia profil o wybranym <profileID>. W parametrach linku można dodać następujące opcje:

  • chrome_flags i przekazać dowolne flagi uruchamiania, które chcesz, ale musisz je zakodować w kodowaniu URL, na przykład:
  1. ?chrome_flags=—blink-settings%3DimagesEnabled%3Dfalse%20—disable-webgl2
  2. ?chrome_flags=—headless%3Dnew
  • start-pages i podać strony startowe, ale musisz je zakodować w kodowaniu URL, na przykład: ?start-pages=https%3A%2F%2Fgoogle.com%2Chttps%3A%2F%2Fya.ru
Zwracane dane
{
"code":0,
"status":"success",
"data":{
"name": "Profil1" // Nazwa profilu w programie
"websocket_link":"ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // link do przeglądarki, używany do automatyzacji (pusta wartość, jeśli profil nie jest uruchomiony). Tylko dla przeglądarki Chromium
"debug_port": "xxxx", // port debugowania przeglądarki Chromium, używany do automatyzacji (pusta wartość, jeśli profil nie jest uruchomiony). Tylko dla przeglądarki Chromium
"folder": "Nazwa", // Nazwa folderu profilu
"tags": ["tag1", "tag2", "tag3"] // Tagi profilu
},
}

Zamykanie profilu

  • Ścieżka: /profile/stop/<profileID>
  • Metoda: GET

Opis: Zatrzymuje profil o wybranym <profileID>

Zwracanie danych:
{
"code": 0,
"status": "success",
"data": {}
}

Aktualizacja profilu

  • Ścieżka: /profile/update/<profileID>
  • Metoda: POST

Opis: Aktualizuje informacje w profilu o wybranym <profileID>. Wszystkie parametry są opcjonalne i mogą ich nie być.
Format: JSON

Parametry żądania:
{
"proxy": "socks5://127.0.0.1:5555:login:pass", // Zmienia proxy w profilu (proxy mogą być http, https, socks5, mogą zawierać login/hasło lub nie)
"notes": "Tekst", // Zmienia notatki w profilu
"name": "Nazwa profilu", // Zmienia nazwę profilu
"folder":"TestFolder", // Zmienia folder w profilu
"tags": ["tag1", "tag2"], // Ustawia tagi dla profilu, stare tagi zostaną nadpisane, jeśli tablica jest pusta, usunie wszystkie tagi z profilu
"geolocation": "12.44, 13.524", // Ustawia geolokalizację, jeśli podane jest puste lub nieprawidłowe, zostaną użyte domyślne ustawienia
"cookies":[{}], // Importuje ciasteczka do profilu
"type": "cloud", // Typ profilu: cloud, local
"group": "group_example", // Jeśli nie ma podanej grupy, zostanie użyta domyślna konfiguracja, jeśli podana grupa jest nieprawidłowa, zostanie wyświetlony błąd
"accounts": [ // Importuje konta z różnych stron do profilu
{"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
}
Zwracanie danych:
{
"code": 0,
"status": "success",
"data": {}
}

Usuwanie profilu

  • Ścieżka: /profile/delete/<profileID>
  • Metoda: GET

Opis: Usuwa profil o wybranym <profileID>

Zwracanie danych:
{
"code": 0,
"status": "success",
"data": {}
}

Wyczyszczenie danych w profilu

  • Ścieżka: /profile/cleardata/<profileID>
  • Metoda: GET

Opis: Czyści wszystkie dane (ciasteczka, historia, notatki, pamięć podręczna itp.) w profilu o wybranym <profileID>

Zwracanie danych:
{
"code": 0,
"status": "success",
"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": {}
}

Clear profile cache

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

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

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

Ciasteczka profilu

  • Ścieżka: /profile/cookies/<profileID>
  • Metoda: GET

Opis: Pobiera ciasteczka profilu o wybranym <profileID>

Zwracanie danych:
{
"code": 0,
"status": "success",
"data": {}
}

Wysyłanie do chmury

  • Ścieżka: /profile/tocloud
  • Metoda: POST

Opis: Wysyła wybrane profile do chmury
Format: JSON

Parametry żądania:
{
"profiles": ["9b24cd2604d1b8260123242ab1f30c", "f4cbe3c89618bfc9647ba8a47c13f6"],
"group": "test"
}
Zwracanie danych:
{
"code": 0,
"status": "success",
"data": {}
}

Ustawienie jako lokalne

  • Ścieżka: /profile/tolocal
  • Metoda: POST

Opis: Ustawia wybrane profile jako lokalne
Format: JSON

Parametry żądania:
{
"profiles": ["9b24cd2604d1b8260123242ab1f30c", "f4cbe3c89618bfc9647ba8a47c13f6"]
}
Zwracanie danych:
{
"code": 0,
"status": "success",
"data": {}
}

Aktualizacja wersji przeglądarki

  • Ścieżka: /profile/updatebrowser/<profileID>
  • Metoda: GET

Opis: Aktualizuje wersję przeglądarki w profilu o wybranym <profileID>
Format: JSON

Zwracanie danych:
{
"code": 0,
"status": "success",
"data": {}
}

Lista konfiguracji

  • Ścieżka: /configslist
  • Metoda: GET

Opis: Zwraca listę aktywnych konfiguracji
Format: JSON

Zwracane dane:
{
"code":0,
"status":"success",
"data": {
"config_id1":
{
"os": "Windows 10" // System operacyjny
"browser":"Chrome 115", // Przeglądarka i wersja
"useragent": "xxxx", // UserAgent w konfiguracji
"webgl": "Apple GPU", // WebGL w konfiguracji
"screen": "1024x768", // Rozdzielczość ekranu
},
"config_id2":
{
},
},
}

Lista grup

  • Ścieżka: /groupslist
  • Metoda: GET

Opis: Zwraca listę grup
Format: JSON

Zwracane dane:
{
"code":0,
"status": "success",
"data": {["group1", "group2"]},
}

Informacje o profilu

  • Ścieżka: /profile/getinfo/<profileID>
  • Metoda: GET

Opis: Pobiera informacje o profilu o wybranym <profileID>
Format: JSON

Zwracane dane:
{
"code":0,
"status": "success",
"data": {
"name": "Profile1" // Nazwa profilu w programie
"status": "Dostępny", // Status profilu, może być: "Uruchomiony","Zablokowany", "Dostępny"
"debug_port": "xxxx", // Port debugowania przeglądarki, używany do automatyzacji (pusta wartość, jeśli profil nie jest uruchomiony)
"websocket_link": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // Link do przeglądarki, używany do automatyzacji (pusta wartość, jeśli profil nie jest uruchomiony)
"configid": "id" // ID konfiguracji
"cloud_id": ""
"type": "cloud" // Typ profilu: cloud, local
"proxy": "socks5://127.0.0.1:5555:login:pass", // Proxy profilu
"folder": "Name", // Nazwa folderu profilu
"tags": ["tag1", "tag2", "tag3"], // Tagi profilu
"notes": "Text", // Notatki profilu
"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 profilu
"browser": "Edge 114.0.1823.43", // Przeglądarka profilu
"os": "Windows 10", // System operacyjny profilu
"screen": "1366x768", // Rozdzielczość ekranu profilu
"language": "en-US,en;q=0.9,ak-GH;q=0.8,ak;q=0.7", // Język profilu
"cpu": 8, // Liczba rdzeni
"memory": 4, // Ilość pamięci
"creation_date": 123456789, // Data utworzenia w formacie Unix Timestamp
"modify_date": 123456789, // Data modyfikacji w formacie Unix Timestamp
},
}

Check IP

  • Path: /profile/checkconnection/<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",
...
},
}

Get proxies list

  • Path: /proxies/list
  • Method: GET

Description: Returning proxies list
Format: JSON

Returning Data:
{
"code":0,
"status": "success",
"data": {
"proxy_id1":
{
"name": "Proxy1"
"type": "http",
"host": "127.0.0.1",
"port": "2222",
"login": "12345",
"password": "12345",
"ipchangelink": "",
}
"proxy_id2":
{
},
}
}

Add proxy

  • Path: /proxies/add
  • Method: POST

Description: Add a proxy to the proxy manager, the parameters login, password, ipchangelink are optional, the rest are required
Format: JSON

Request parameters:
{
"name": "Proxy1",
"type": "http",
"host": "127.0.0.1",
"port": "2222",
"login": "12345",
"password": "12345",
"ipchangelink": ""
}
Returning Data:
{
"code": 0,
"status": "success",
"data": {
"proxy_id": "12345"
}
}

Delete proxy

  • Path: /proxies/delete/<ProxyID>
  • Method: GET

Description: Removes a proxy with the selected ID. Proxy will be deleted for all profiles with that proxy, the same as during normal deletion from the manager
Format: JSON

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

Update proxy

  • Path: /proxies/update/<ProxyID>
  • Method: POST

Description: Updates the proxy with the selected ID, all parameters are optional
Format: JSON

Request parameters:
{
"name": "Proxy1",
"type": "http",
"host": "127.0.0.1",
"port": "2222",
"login": "12345",
"password": "12345",
"ipchangelink": ""
}
Returning Data:
{
"code": 0,
"status": "success",
"data": {
}
}

Przykłady

Puppeteer (Node.js)

Uruchomienie profilu o określonej nazwie i otwarcie strony undetectable.io w tym profilu za pomocą Node.js Puppeteer:

const puppeteer = require('puppeteer');
const axios = require('axios');
const port = 25325; // Port
const ip = '127.0.0.1'; // Lokalny IP
const profileName = ‘TestProfile; // Nazwa profilu
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) {
///// Uruchomienie konkretnego profilu i przejście do strony
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)

Uruchomienie profili znajdujących się w określonym folderze i otwarcie kilku stron za pomocą Pythona + Selenium:

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" # Lokalny adres IP API (jeśli pracujesz z innego komputera w tej samej sieci lub port jest otwarty w ustawieniach routera, możesz zdalnie uzyskać dostęp do lokalnego API i ten adres trzeba będzie zmienić)
port_from_settings_browser = '25325' # Port lokalnego API (można znaleźć w ustawieniach programu)
chrome_driver_path = "chromedriver.exe" # Ścieżka do chromedriver dla v110
ser = Service(chrome_driver_path)
chrome_options = Options()
list_response = requests.get(f'http://{address}:{port_from_settings_browser}/list').json()['data'] # Wysyłamy żądanie do lokalnego API w celu uzyskania listy profili
profile_id = ''
for key, value in list_response.items(): # Przechodzimy przez listę profili i uruchamiamy je jeden po drugim
if value['folder'] == 'test': # Tutaj można dodać sprawdzenie, aby uruchamiać tylko wybrane profile (w tym przykładzie uruchamiamy profile znajdujące się w folderze 'test')
profile_id = key
if value['status'] == 'Available': # Jeśli profil nie jest uruchomiony, uruchamiamy go i pobieramy debug_port
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': # Jeśli profil jest uruchomiony, po prostu pobieramy debug_port z dostępnych danych
debug_port = value['debug_port']
if value['status'] == 'Locked': # Jeśli profil jest zablokowany, pomijamy go
continue
if debug_port: # Sprawdzamy, czy przeglądarka ma port debugowania (profile WebEngine nie mają portów, więc od razu je zamykamy)
chrome_options.debugger_address = f'{address}:{debug_port}'
driver = webdriver.Chrome(service=ser, options=chrome_options)
driver.get("https://whoer.net/") # Otwieramy whoer.net w aktywnej karcie
driver.switch_to.new_window('tab') # Tworzymy nową kartę i przełączamy się na nią
driver.get(url='https://browserleaks.com/js') # Otwieramy browserleaks.com/js w aktywnej karcie
# Tutaj można dodać dowolne inne działania
sleep(5) # Czekamy 5 sekund
requests.get(f'http://{address}:{port_from_settings_browser}/profile/stop/{profile_id}') # Zatrzymujemy profil