Zum Inhalt springen

API

Einführung

Mit der API v1.5 in Undetectable können Sie eine Liste von Profilen abrufen, diese erstellen, starten, aktualisieren und schließen. Darüber hinaus können Sie mit den erhaltenen Informationen in Chromium-Kernprofilen verschiedene Automatisierungstools wie Puppeteer, Playwright und andere verwenden.

Den Chromedriver für die Arbeit mit Selenium können Sie hier herunterladen:
Windows
MacOS M series
MacOS Intel

Das Programm muss gestartet sein, um mit der API zu arbeiten.

Standardmäßig wird der lokale Server auf Port 25325 gestartet. Wenn dieser Port belegt ist, wird ein anderer Port verwendet. In den Programmeinstellungen können Sie den Port anzeigen und auf den gewünschten ändern.

Verwenden Sie für den Zugriff auf den lokalen Server die IP 127.0.0.1, localhost oder die lokale IP in Ihrem Netzwerk und den Port aus den Einstellungen plus den Pfad, den Sie ausführen möchten, z.B. http://localhost:25325/status.

Alle API-Antworten sehen wie folgt aus:

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

wobei <status code> und <status> den Status widerspiegeln:

<status code><status>Beschreibung
0”success”Erfolg
1”error”Fehler, <return object> = {“error”:“Fehlerbeschreibung”}

<return object> - verschiedene Daten, die an die API gesendet werden, z.B. eine Liste von Profilen.

Fehler haben das folgende Format:

{
"code":1,
"status":"error",
"data":
{"error": "Fehlerbeschreibung"},
}

Anfragen

Status

  • Pfad: /status
  • Methode: GET

Beschreibung: Gibt den Status des lokalen Servers zurück, ob er funktioniert oder nicht.

Rückgabedaten
{
"code":0,
"status":"success",
"data":{},
}

Profilliste

  • Pfad: /list
  • Methode: GET

Beschreibung: Gibt eine Liste der in dem Programm verfügbaren Chromium-Browserprofile zurück.

Rückgabedaten
{
"code": 0,
"status": "success",
"data" {
"profile_id1": {
"name": "Profil1", // Profilname im Programm
"status": "Verfügbar", // Profilstatus, kann "Gestartet", "Gesperrt", "Verfügbar" sein
"debug_port": "xxxx", // Debug-Port des Browsers, wird für die Automatisierung verwendet (leerer Wert, wenn das Profil nicht gestartet ist). Nur für Chromium-Browser
"websocket_link": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // Link zum Browser, wird für die Automatisierung verwendet (leerer Wert, wenn das Profil nicht gestartet ist). Nur für Chromium-Browser
"folder": "Name", // Profilordnername
"tags": ["tag1", "tag2", "tag3"], // Profiltags
"cloud_id": "", // ID des Cloud-Profils
"creation_date": 123456789, // Erstellungsdatum Unix-Zeitstempel
"modify_date": 123456789, // Änderungsdatum Unix-Zeitstempel
},
"profile_id2": {
},
},
}

Profil erstellen

  • Pfad: /profile/create
  • Methode: POST

Beschreibung: Erstellt ein Profil mit den ausgewählten Parametern. Alle Parameter sind optional und können fehlen. Die Liste der Browser für den Befehl: Chrome, Edge, FireFox, IE, Opera, Safari, Yandex. Die Liste der Betriebssysteme für den Befehl: Windows, Windows 7, Windows 8, Windows 8.1, Windows 10, Android, iPhone, iPad, Linux, Mac. Wenn keine Konfigurationen mit dem ausgewählten Betriebssystem oder Browser vorhanden sind, wird ein zufälliger Betriebssystem- oder Browser-Typ verwendet.
Format: JSON

Anforderungsparameter:
{
"name": "Profil mit zufälligen Einstellungen", // Name des Profils in der Anwendung
"os": "Windows", // Konfiguration des Betriebssystems, das verwendet werden soll
"browser": "Chrome", // Konfiguration des Browsers, der verwendet werden soll
"cpu": 8, // Anzahl der Kerne, mögliche Werte: 32, 24, 20, 16, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1, 0
"memory": 8, // Speichergröße, mögliche Werte: 8, 4, 2, 1, 0
"tags": ["Tag1", "Tag2"], // Tags für das Profil festlegen
"geolocation": "12.44, 13.524", // Geolocation festlegen, wenn ein leerer oder ungültiger Wert eingegeben wird, werden die Standardeinstellungen verwendet
"resolution": "1024x768", // Bildschirmauflösung, mögliche Werte: "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", // Proxy im Profil ändern (Proxy kann http, https, socks5 sein, es können Varianten mit und ohne Benutzername/Passwort verwendet werden)
"notes": "Text", // Notizen im Profil ändern
"folder": "Testordner", // In welchem Ordner sich das Profil befinden soll
"language": "ru-RU, en-US", // Es können 2 Sprachen festgelegt werden
"cookies": [{}], // Cookies in das Profil importieren
"type": "cloud", // Profiltyp: cloud, local
"group": "Gruppenbeispiel", // Wenn keine Gruppe angegeben ist, wird der Standardwert aus den Einstellungen verwendet. Wenn eine ungültige Gruppe angegeben ist, wird ein Fehler ausgegeben
"configid": "ID", // Config-ID, wenn angegeben, werden die Parameter OS und Browser ignoriert, die anderen Parameter werden nach Möglichkeit verwendet. Zum Beispiel, wenn die Konfiguration für Android ist, wird sich die Bildschirmauflösung nicht ändern
"accounts": [ // Konten von verschiedenen Websites in das Profil importieren
{"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
}
Rückgabedaten:
{
"code": 0,
"status": "success",
"data": {
"profile_id": "xxxxxxxx...", // Eindeutige Profil-ID
"name": "Profil mit zufälligen Einstellungen" // Name des Profils in der Anwendung
}
}

Profil starten

  • Pfad: /profile/start/<profileID>
  • Methode: GET

Beschreibung: Startet das Profil mit der ausgewählten <profileID>. Sie können Parameter zur URL hinzufügen:

  • chrome_flags und übergeben Sie beliebige Startflags, die Sie möchten, sie müssen jedoch in URL-Codierung codiert werden, zum Beispiel:
  1. ?chrome_flags=—blink-settings%3DimagesEnabled%3Dfalse%20—disable-webgl2
  2. ?chrome_flags=—headless%3Dnew
  • start-pages und geben Sie Startseiten an, sie müssen jedoch in URL-Codierung codiert werden, zum Beispiel: ?start-pages=https%3A%2F%2Fgoogle.com%2Chttps%3A%2F%2Fya.ru
Rückgabedaten
{
"code":0,
"status":"success",
"data":{
"name": "Profil1" // Name des Profils in der Anwendung
"websocket_link":"ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // Link zum Browser, wird für die Automatisierung verwendet (leerer Wert, wenn das Profil nicht gestartet ist). Nur für Chromium-Browser
"debug_port": "xxxx", // Debug-Port des Chromium-Browsers, wird für die Automatisierung verwendet (leerer Wert, wenn das Profil nicht gestartet ist). Nur für Chromium-Browser
"folder": "Name", // Name des Profilordners
"tags": ["Tag1", "Tag2", "Tag3"] // Tags des Profils
},
}

Profil schließen

  • Pfad: /profile/stop/<profileID>
  • Methode: GET

Beschreibung: Stoppt das Profil mit der ausgewählten <profileID>

Rückgabedaten:
{
"code": 0,
"status": "erfolg",
"data": {}
}

Profil aktualisieren

  • Pfad: /profil/aktualisieren/<profilID>
  • Methode: POST

Beschreibung: Aktualisiert die Informationen im Profil mit der angegebenen <profilID>. Alle Parameter sind optional und können fehlen.
Format: JSON

Anforderungsparameter:
{
"proxy": "socks5://127.0.0.1:5555:login:pass", // Ändert den Proxy im Profil (Proxies können http, https, socks5 sein, es können Varianten mit und ohne Benutzername/Passwort verwendet werden)
"notes": "Text", // Ändert die Notizen im Profil
"name": "Profilname", // Ändert den Profilnamen
"folder":"TestOrdner", // Ändert den Ordner im Profil
"tags": ["tag1", "tag2"], // Setzt Tags für das Profil, vorhandene Tags werden überschrieben, wenn das Array leer ist, werden alle Tags vom Profil entfernt
"geolocation": "12.44, 13.524", // Setzt die Geolokation, wenn ein leerer oder ungültiger Wert eingegeben wird, werden die Standardeinstellungen verwendet
"cookies":[{}], // Importiert Cookies in das Profil
"type": "cloud", // Profiltyp: cloud, local
"group": "Gruppenbeispiel", // Wenn keine Gruppe angegeben ist, wird die Standardgruppe aus den Einstellungen verwendet, wenn eine ungültige Gruppe angegeben ist, wird ein Fehler ausgegeben
"accounts": [ // Importiert Konten von verschiedenen Websites in das Profil
{"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
}
Rückgabedaten:
{
"code": 0,
"status": "erfolg",
"data": {}
}

Profil löschen

  • Pfad: /profil/löschen/<profilID>
  • Methode: GET

Beschreibung: Löscht das Profil mit der angegebenen <profilID>.

Rückgabedaten:
{
"code": 0,
"status": "erfolg",
"data": {}
}

Profildaten löschen

  • Pfad: /profil/datenlöschen/<profilID>
  • Methode: GET

Beschreibung: Löscht alle Daten (Cookies, Verlauf, Notizen, Cache usw.) des Profils mit der angegebenen <profilID>.

Rückgabedaten:
{
"code": 0,
"status": "erfolg",
"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": {}
}

Profil-Cookies

  • Pfad: /profil/cookies/<profilID>
  • Methode: GET

Beschreibung: Ruft die Cookies des Profils mit der angegebenen <profilID> ab.

Rückgabedaten:
{
"code": 0,
"status": "erfolg",
"data": {}
}

In die Cloud hochladen

  • Pfad: /profil/incloud
  • Methode: POST

Beschreibung: Lädt ausgewählte Profile in die Cloud hoch.
Format: JSON

Anforderungsparameter:
{
"profiles": ["9b24cd2604d1b8260123242ab1f30c", "f4cbe3c89618bfc9647ba8a47c13f6"],
"group": "test"
}
Rückgabedaten:
{
"code": 0,
"status": "erfolg",
"data": {}
}

Lokal machen

  • Pfad: /profil/inlokal
  • Methode: POST

Beschreibung: Macht ausgewählte Profile lokal.
Format: JSON

Anforderungsparameter:
{
"profiles": ["9b24cd2604d1b8260123242ab1f30c", "f4cbe3c89618bfc9647ba8a47c13f6"]
}
Rückgabedaten:
{
"code": 0,
"status": "erfolg",
"data": {}
}

Browser-Version aktualisieren

  • Pfad: /profil/browseraktualisieren/<profilID>
  • Methode: GET

Beschreibung: Aktualisiert die Browser-Version im Profil mit der angegebenen <profilID>.
Format: JSON

Rückgabedaten:
{
"code": 0,
"status": "erfolg",
"data": {}
}

Liste der Konfigurationen

  • Pfad: /konfigurationsliste
  • Methode: GET

Beschreibung: Gibt eine Liste der aktiven Konfigurationen zurück.
Format: JSON

Rückgabedaten:
{
"code":0,
"status":"erfolg",
"data": {
"config_id1":
{
"os": "Windows 10" // Betriebssystem
"browser":"Chrome 115", // Browser-Typ und Version
"useragent": "xxxx", // UserAgent in der Konfiguration
"webgl": "Apple GPU", // WebGL in der Konfiguration
"screen": "1024x768", // Bildschirmauflösung
},
"config_id2":
{
},
},
}

Gruppenliste

  • Pfad: /groupslist
  • Methode: GET

Beschreibung: Gibt eine Liste der Gruppen zurück
Format: JSON

Rückgabedaten:
{
"code":0,
"status": "erfolg",
"data": {["gruppe1", "gruppe2"]},
}

Profilinformationen

  • Pfad: /profile/getinfo/<profileID>
  • Methode: GET

Beschreibung: Ruft Informationen über das Profil mit der angegebenen <profileID> ab
Format: JSON

Rückgabedaten:
{
"code":0,
"status": "erfolg",
"data": {
"name": "Profil1" // Profilname in der Anwendung
"status": "Verfügbar", // Profilstatus, kann sein: "Gestartet", "Gesperrt", "Verfügbar"
"debug_port": "xxxx", // Debug-Port des Browsers, wird für die Automatisierung verwendet (leerer Wert, wenn das Profil nicht gestartet ist)
"websocket_link": "ws://127.0.0.1:xxxx/devtools/browser/xxxxxx", // Link zum Browser, wird für die Automatisierung verwendet (leerer Wert, wenn das Profil nicht gestartet ist)
"configid": "id" // Config-ID
"cloud_id": ""
"type": "cloud" // Profiltyp: cloud, lokal
"proxy": "socks5://127.0.0.1:5555:login:pass", // Profil-Proxy
"folder": "Name", // Profilordnername
"tags": ["tag1", "tag2", "tag3"], // Profiltags
"notes": "Text", // Profilnotizen
"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", // Profil-UserAgent
"browser": "Edge 114.0.1823.43", // Profilbrowser
"os": "Windows 10", // Profilbetriebssystem
"screen": "1366x768", // Profilbildschirmauflösung
"language": "en-US,en;q=0.9,ak-GH;q=0.8,ak;q=0.7", // Profilsprache
"cpu": 8, // Anzahl der CPU-Kerne
"memory": 4, // Speichergröße
"creation_date": 123456789, // Erstellungsdatum Unix-Zeitstempel
"modify_date": 123456789, // Änderungsdatum Unix-Zeitstempel
},
}

Überprüfen Sie die IP

  • Pfad: /profile/checkconnection/<profileID>
  • Methode: GET

Beschreibung: Überprüft die Verbindung im Profil mit der ausgewählten . Wenn die Überprüfung fehlschlägt, wird ein Fehler zurückgegeben
Format: JSON

Rückgabedaten:
{
"code":0,
"status": "success",
"data": {
"ip": "127.0.0.1" // Überprüfen Sie die IP
}
}

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": {
}
}

Beispiele

Puppeteer (Node.js)

Node.js Puppeteer: Starten Sie ein Profil mit einem bestimmten Namen und öffnen Sie die Seite undetectable.io in diesem Profil:

const puppeteer = require('puppeteer');
const axios = require('axios');
const port = 25325; // Port
const ip = '127.0.0.1'; // Lokale IP
const profileName = ‘TestProfile; // Profilname
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) {
///// Starten Sie ein bestimmtes Profil und navigieren Sie zur Seite
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: Starten Sie Profile in einem bestimmten Ordner und öffnen Sie mehrere Websites:

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" # Lokale IP-Adresse der API (Wenn Sie von einem anderen Computer im selben Netzwerk aus arbeiten oder der Port in den Router-Einstellungen geöffnet ist, können Sie auf die lokale API remote zugreifen und diese Adresse ändern)
port_from_settings_browser = '25325' # Port der lokalen API (in den Programmeinstellungen zu finden)
chrome_driver_path = "chromedriver.exe" # Pfad zum chromedriver für v110
ser = Service(chrome_driver_path)
chrome_options = Options()
list_response = requests.get(f'http://{address}:{port_from_settings_browser}/list').json()['data'] # Senden Sie eine Anfrage an die lokale API, um eine Liste der Profile zu erhalten
profile_id = ''
for key, value in list_response.items(): # Durchlaufen Sie die Liste der Profile und starten Sie sie einzeln
if value['folder'] == 'test': # Hier können Sie eine Überprüfung hinzufügen, um nur bestimmte Profile zu starten (in diesem Beispiel starten wir Profile, die sich im Ordner 'test' befinden)
profile_id = key
if value['status'] == 'Available': # Wenn das Profil nicht gestartet wurde, starten Sie es und erhalten Sie den 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': # Wenn das Profil gestartet wurde, nehmen Sie einfach den Debug-Port aus den verfügbaren Daten
debug_port = value['debug_port']
if value['status'] == 'Locked': # Wenn das Profil gesperrt ist, überspringen Sie es
continue
if debug_port: # Überprüfen Sie, ob der Browser einen Verbindungsport hat (WebEngine-Profile haben keine Ports, daher schließen wir sie sofort)
chrome_options.debugger_address = f'{address}:{debug_port}'
driver = webdriver.Chrome(service=ser, options=chrome_options)
driver.get("https://whoer.net/") # Öffnen Sie whoer.net im aktiven Tab
driver.switch_to.new_window('tab') # Erstellen Sie einen neuen Tab und wechseln Sie zu diesem
driver.get(url='https://browserleaks.com/js') # Öffnen Sie browserleaks.com/js im aktiven Tab
# Hier können Sie beliebige andere Aktionen hinzufügen
sleep(5) # Warten Sie 5 Sekunden
requests.get(f'http://{address}:{port_from_settings_browser}/profile/stop/{profile_id}') # Stoppen Sie das Profil