Общие сведения 📜
Браузерные профили на базе движка Anty поддерживают запуск с включением DevTools Protocol. Это позволяет подключаться к профилю через сгенерированный при старте порт и автоматизировать работу браузера с помощью инструментов, таких как Puppeteer, Playwright, Selenium и других.
Таким образом, базовая автоматизация включает три основных шага:
Запустить профиль через API со включенным DevTools Protocol
Подключиться к порту профиля с помощью инструмента автоматизации (Puppeteer, Playwright, Selenium, Postman и пр.)
Запустить свой собственный скрипт автоматизации через открытое соединение
ℹ️ Для работы c автоматизацией Dolphin{anty} - он должен быть запущен и авторизован. Авторизоваться можно как с помощью логина и пароля, так и программным запросом с помощью токена.
Создать токен можно в личном кабинете.
Параметры запроса для авторизации с использованием токена:
Чтобы не возникала ошибка 401, обязательно нужно отправлять запрос
Метод: POST
URL: http://localhost:3001/v1.0/auth/login-with-token
Заголовок: Content-Type: application/json
Тело запроса:
{ "token": "API_TOKEN"}
В любом месте где есть API_TOKEN
- нужно заменить на свой токен (апи ключ) из личного кабинета на нашем сайте.
ChromeDriver ⬇️
Это мост между скриптом (например, Selenium) и браузером Dolphin{anty}. Стандартный драйвер выдает автоматизацию, поэтому мы выпускаем собственный модифицированный драйвер для каждой версии браузера.
Примеры запроса на авторизацию ⚙️
Пример кода JavaScript ▶️
Пример кода JavaScript ▶️
const axios = require('axios')
const apiUrl = 'http://localhost:3001/v1.0/auth/login-with-token'
const token = 'API_TOKEN'
const requestData = {token: token}
axios.post(apiUrl, requestData, {
headers: {'Content-Type': 'application/json'}
}).then(response => {
console.log('OK ', response.data)
})
.catch(error => {
console.error('Error ', error)})
Пример кода Python 🐍
Пример кода Python 🐍
import requests
api_url = 'http://localhost:3001/v1.0/auth/login-with-token'
token = 'API_TOKEN'
request_data = {'token': token}
headers = {'Content-Type': 'application/json'}
response = requests.post(api_url, json=request_data, headers=headers)
if response.status_code == 200:
print('OK ', response.json())
else:
print('Error ', response.status_code)
Пример кода Java ☕️
Пример кода Java ☕️
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
var client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
var req = HttpRequest.newBuilder(URI.create("http://localhost:3001/v1.0/auth/login-with-token"))
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(
"{\"token\":\"API_TOKEN\"}"
))
.build();
var res = client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println("OK " + res.statusCode());
System.out.println("Body: " + res.body());}}
Пример кода GO 🏃
Пример кода GO 🏃
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
url := "http://localhost:3001/v1.0/auth/login-with-token"
data := []byte(`{"token":"API_TOKEN"}`)
r, e := http.Post(url, "application/json", bytes.NewBuffer(data))
if e != nil {
fmt.Println("Error:", e)
return
}
defer r.Body.Close()
b, _ := io.ReadAll(r.Body)
if r.StatusCode == http.StatusOK {
fmt.Println("OK", string(b))
} else {
fmt.Println("Error", r.Status, string(b))
}}
✅ При удачном выполнении будет отображаться ответ:
{"success": true}
Шаг 1. Старт профиля через API ▶️
URL запроса
Для старта браузерного профиля через API необходимо послать GET-запрос:
http://localhost:3001/v1.0/browser_profiles/PROFILE_ID/start?automation=1
Так же профиль можно запустить в headless mode:
http://localhost:3001/v1.0/browser_profiles/PROFILE_ID/start?automation=1&headless=1
PROFILE_ID
- ID браузерного профиля. Узнать ID профиля можно путем запроса списка профилей через API или через приложение Dolphin{аnty} в правом верхнем углу при редактировании профиляautomation=1
- обязательный параметр для автоматизации
Пример запуска с помощью Postman через отправку запроса:
⚠️ Важные моменты
Локальный API работает только при запущенном Dolphin{anty}
Запросы нужно посылать с ПК, на котором запущен браузер
На данный момент локальный API работает всегда на 3001 порту, если 3001 порт занят - то занимается другой. Его можно посмотреть в окне Здоровья / Health которое открывается в нижней строке Dolphin{anty}
На бесплатном тарифе не будет работать эскпорт и импорт куки через API запрос из-за того что отсутствует синхронизации профилей в облако
Ответ API ✅
Если профиль был запущен успешно, то в ответ придет примерно следующая структура (значения полей port
и wsEndpoint
могут быть разными):
{
"success": true,
"automation": {
"port": 50568,
"wsEndpoint": "/devtools/browser/c71c1a9d-f07c-4dd9-84a9-53a4c6df9969" }}
Шаг 2. Подключение к профилю 🔌
Puppeteer
Puppeteer — популярная библиотека от Google для автоматизации и тестирования интерфейсов в браузере. Изначально создана для автозапуска браузера и проверки UI-элементов, но позволяет выполнять почти любые действия на веб-страницах, что делает её универсальной для автоматизации. Требует знаний JavaScript/Node.js.
Пример кода:
Пример кода:
const puppeteer = require('puppeteer-core');
(async () => {
// СЮДА ВАШ port
const port = 50568;
// СЮДА ВАШ wsEndpoint
const wsEndpoint = '/devtools/browser/c71c1a9d-f07c-4dd9-84a9-53a4c6df9969';
// НЕПОСРЕДСТВЕННО ПОДКЛЮЧЕНИЕ
const browser = await puppeteer.connect({
browserWSEndpoint: `ws://127.0.0.1:${port}${wsEndpoint}`
});
// С ЭТОГО МОМЕНТ АВТОМАТИЗИРУЕМ, ЧТО ХОТИМ
// НАПРИМЕР, СНИМАЕМ СКРИНШОТ С ГУГЛА
const page = await browser.newPage();
await page.goto('https://google.com');
await page.screenshot({ path: 'google.png' });
await browser.close();
})();
Playwright
По сути говоря, Playwright - более свежий и современный аналог Puppeteer. Разрабатывается Microsoft. Имеет схожий функционал и синтаксис.
Пример кода:
Пример кода:
const { chromium } = require('playwright');
(async () => {
// СЮДА ВАШ port
const port = 50568;
// СЮДА ВАШ wsEndpoint
const wsEndpoint = '/devtools/browser/c71c1a9d-f07c-4dd9-84a9-53a4c6df9969';
// НЕПОСРЕДСТВЕННО ПОДКЛЮЧЕНИЕ
const browser = await chromium.connectOverCDP(`ws://127.0.0.1:${port}${wsEndpoint}`);
// С ЭТОГО МОМЕНТ АВТОМАТИЗИРУЕМ, ЧТО ХОТИМ
// НАПРИМЕР, СНИМАЕМ СКРИНШОТ С ГУГЛА
const page = await browser.contexts()[0].newPage();
await page.goto('https://google.com');
await page.screenshot({path: 'google.png'});
await browser.close();
})();
Selenium
Подключение Selenium к запущенному браузеру описано в этой статье. Стоит упомянуть что Selenium использует стандартный ChromeDriver, но сайты могут распознать автоматизацию, по этому рекомендуем использовать наш ChromeDriver — скачать его и указать путь в коде, чтобы скрыть работу Selenium.
Шаг 3. Остановка профиля через API ⛔️
Для остановки браузерного профиля через API необходимо послать GET-запрос:
http://localhost:3001/v1.0/browser_profiles/PROFILE_ID/stop
Полезные ссылки 🔗