Passar para o conteúdo principal

Automação Básica do Dolphin {anty}

Informações gerais 📜

Os perfis de navegador baseados no mecanismo "Anty" suportam a inicialização ativada pelo protocolo DevTools. Isso permite que você se conecte ao perfil por meio de uma porta gerada na inicialização e automatize o navegador usando ferramentas como Puppeteer, Playwright, Selenium e outras.

Portanto, a automação básica envolve três etapas básicas:

  1. Inicie o perfil por meio da API com o protocolo DevTools ativado

  2. Conecte-se à porta de perfil usando uma ferramenta de automação (Puppeteer, Playwright, Selenium, Postman, etc.).

  3. Execute seu próprio script de automação por meio de uma conexão aberta.

ℹ️ Para usar automação, o Dolphin Anty deve estar em execução e autorizado a funcionar. A autorização pode ser feita por login e senha ou por solicitação de software usando um token. Você pode criar um token em seu gabinete pessoal.

Parâmetros de solicitação para autorização usando token:

Para evitar o erro 401, é necessário enviar a solicitação
Method: POST
URL: http://localhost:3001/v1.0/auth/login-with-token
Header: Content-Type: application/json
Body:

{ "token": "API_TOKEN"}

Em qualquer lugar onde houver API_TOKEN, você precisará substituí-lo pelo seu token (chave da API) do seu gabinete pessoal em nosso site.

ChromeDriver ⬇️

O ChromeDriver é a ponte entre seu script (por exemplo, Selenium) e o navegador Dolphin{anty}. O driver padrão pode revelar automação, portanto, fornecemos nosso próprio ChromeDriver modificado para cada versão do navegador.

Exemplos de solicitação de autorização ⚙️

Exemplo em 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)})

Exemplo em 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)

Exemplo em 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());}}

Exemplo em 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))
}}

✅ Se for bem-sucedido, a resposta será:

{"success": true}

Etapa 1 - Iniciar um perfil via API ▶️

Para iniciar um perfil de navegador via API, envie uma solicitação GET:

http://localhost:3001/v1.0/browser_profiles/PROFILE_ID/start?automation=1

Para headless mode:

​http://localhost:3001/v1.0/browser_profiles/PROFILE_ID/start?automation=1&headless=1​
  1. PROFILE_ID - ID do perfil do browser (você pode obtê-lo por meio da API ou no aplicativo Dolphin{anty} ao editar um perfil).

  2. automation=1 - parâmetro obrigatório.

Exempo de como iniciar uma requisição via Postman

⚠️Notas importantes:

  1. A API local funciona somente se o Dolphin{anty} estiver em execução.

  2. As solicitações devem ser enviadas do mesmo computador em que o navegador é executado.

  3. Por padrão, a API local usa a porta 3001; se estiver ocupada, outra porta será atribuída (verifique na janela Saúde do Dolphin{anty}).

  4. No plano gratuito, a importação/exportação de cookies via API não está disponível devido à ausência de sincronização na nuvem.​

API response

Se o perfil tiver sido iniciado com êxito, a resposta terá aproximadamente a seguinte aparência (os valores dos campos port e wsEndpoint podem variar):

{
"success": true,
"automation": {
"port": 50568,
"wsEndpoint": "/devtools/browser/c71c1a9d-f07c-4dd9-84a9-53a4c6df9969" }}​

Etapa 2 Conectando a um perfil 🔌

Puppeteer

Puppeteer — Biblioteca popular do Google para automação e teste da interface do usuário do navegador. Originalmente criada para iniciar o Chrome e verificar a interface do usuário, mas suporta quase todas as ações do navegador. Requer conhecimento de JavaScript/Node.js.

Exemplos de código


const puppeteer = require('puppeteer-core');

(async () => {
// COLOQUE SEU port AQUI
const port = 50568;

// COLOQUE SEU wsEndpoint AQUI
const wsEndpoint = '/devtools/browser/c71c1a9d-f07c-4dd9-84a9-53a4c6df9969';

// CONEXÃO DIRETA
const browser = await puppeteer.connect({
browserWSEndpoint: `ws://127.0.0.1:${port}${wsEndpoint}`
});

// A PARTIR DESTE MOMENTO, VOCÊ PODE AUTOMATIZAR O QUE QUISER
// POR EXEMPLO, TIRAR UM SCREENSHOT DO GOOGLE
const page = await browser.newPage();
await page.goto('https://google.com');
await page.screenshot({ path: 'google.png' });

await browser.close();
})();

Playwright

Playwright vs Selenium: What are the Main Differences and Which is Better?  - Applitools

Playwright - Uma alternativa mais nova e moderna ao Puppeteer, só que desenvolvida pela Microsoft com API e funcionalidade semelhantes.

Exemplo de Código:


const { chromium } = require('playwright');

(async () => {
// COLOQUE SEU port AQUI
const port = 50568;

// COLOQUE SEU wsEndpoint AQUI
const wsEndpoint = '/devtools/browser/c71c1a9d-f07c-4dd9-84a9-53a4c6df9969';

// CONEXÃO DIRETA
const browser = await chromium.connectOverCDP(`ws://127.0.0.1:${port}${wsEndpoint}`);

// A PARTIR DESTE MOMENTO, VOCÊ PODE AUTOMATIZAR O QUE QUISER
// POR EXEMPLO, TIRAR UM SCREENSHOT DO GOOGLE
const page = await browser.contexts()[0].newPage();
await page.goto('https://google.com');
await page.screenshot({path: 'google.png'});
await browser.close();
})();

Selenium

Selenium - Testautomatisierung.org

A conexão do Selenium a um navegador em execução é descrita neste artigo. Vale a pena observar que o Selenium usa o ChromeDriver padrão, mas os sites podem detectar a automação. Portanto, recomendamos o uso de nosso ChromeDriver — faça o download e especifique o caminho em seu código para ocultar o uso do Selenium.

Etapa 3 Interromper um perfil ⛔️

Para interromper um perfil de navegador via API, envie uma GET request:

 http://localhost:3001/v1.0/browser_profiles/PROFILE_ID/stop

Respondeu à sua pergunta?