v2.0

Automação Desktop

Quando o alvo não é uma página web: automatize aplicativos desktop nativos (Win32, Electron, Java Swing) com scripts Python numa etapa de Regra Customizada.

Automação web × Automação desktop

A automação via navegador já vem integrada nativamente na plataforma: as etapas Navegar, Preencher e Obter Informação controlam o browser diretamente, por seletor CSS/XPath, sem precisar de código. O gravador também faz parte dessa integração, e grava cliques e preenchimentos dentro do navegador.

Nenhuma dessas ferramentas alcança um aplicativo desktop (um programa Windows nativo, uma janela Electron, uma tela Java Swing etc.). São superfícies completamente diferentes de um navegador, sem seletor CSS/XPath e sem DOM.

Para automatizar um processo com apps desktop no browserMate, o caminho é utilizar as etapas de Regra Customizada com scripts Python que controlam o mouse, o teclado e as janelas do sistema operacional diretamente.

O gravador não serve para desktop O gravador abre um navegador controlado por Puppeteer e captura eventos daquele navegador. Ele não enxerga nem captura nada que aconteça fora dele.

Bibliotecas Python para automação desktop

Os scripts rodam em Python 3.14, embarcado no runtime. Escolha versões das bibliotecas compatíveis com essa série (veja Versões de Node.js e Python).

BibliotecaPara que serve
pyautogui Controle de mouse e teclado (mover, clicar, digitar, atalhos) e localização de elementos na tela por imagem.
pygetwindow Encontrar, focar, mover e redimensionar janelas abertas pelo título.
pywinauto Automação nativa do Win32. Encontra e aciona controles da interface pelo nome/classe, mais estável do que clicar em coordenadas fixas.
subprocess Biblioteca padrão do Python. Abre e gerencia o processo do aplicativo (equivalente ao clique duplo no executável).

Em NodeJS, o equivalente é robotjs ou nut.js (mouse/teclado) e child_process (abrir o executável). A etapa de Regra Customizada aceita as duas linguagens, veja Código Inline.

Basta escrever import pyautogui (ou qualquer outra biblioteca da tabela) no script. O runtime detecta o import e instala a dependência automaticamente na primeira execução, sem passo manual de instalação.

Fluxo básico

  1. Crie uma etapa Regra Customizada e escolha Python como linguagem (veja Código Inline).
  2. Se o script precisa de algum dado do processo, leia com bm.get('{variavel}', default).
  3. Escreva a lógica de automação com as bibliotecas acima.
  4. Finalize sempre com bm.done(resultado, updates), inclusive para devolver algo capturado na tela para as etapas seguintes.

Exemplo prático

Abrir a Calculadora do Windows, digitar uma conta e capturar o resultado de volta para o processo:

Python: abrir app, digitar e capturar resultado
import os, subprocess, tempfile, time
import pyautogui
import pygetwindow as gw

# Abre a Calculadora e aguarda a janela aparecer
subprocess.Popen('calc.exe')
time.sleep(1.5)

janela = gw.getWindowsWithTitle('Calculadora')[0]
janela.activate()

# Digita a conta e captura o resultado
valor = bm.get('{valor_a_somar}', '10')
pyautogui.write('25+' + valor)
pyautogui.press('enter')
time.sleep(0.5)

resultado_tela = pyautogui.screenshot(region=(janela.left, janela.top, janela.width, 100))

# Caminho ABSOLUTO: a pasta onde o script roda é temporária e é apagada quando
# a etapa termina. O caminho volta como variável para as etapas seguintes.
evidencia = os.path.join(tempfile.gettempdir(), 'calculadora.png')
resultado_tela.save(evidencia)

janela.close()

bm.bmLog('{application_success} Calculadora automatizada com sucesso')
bm.done('ok', {
    '{conta_realizada}': '25+' + valor,
    '{evidencia_calculadora}': evidencia,
})

Esse script roda como qualquer outro código Python na plataforma: mesma API bm (API de contexto do processo), mesmas regras de log (Logs Customizados) e mesma proteção de variáveis de sistema (Padrões de segurança).

Várias etapas no mesmo aplicativo

Um processo desktop de verdade raramente cabe numa etapa só: uma abre o sistema, outra lança os registros, outra encerra. E aqui aparece o ponto que mais confunde quem está começando, porque não tem nada a ver com Python.

Cada etapa de Regra Customizada roda num processo isolado, que nasce e morre com a etapa. O aplicativo que uma etapa abriu continua aberto, porque quem o sustenta é o sistema operacional. Mas o objeto que o representava no código morreu junto com a etapa. A etapa seguinte não recebe a janela: ela reconecta ao aplicativo que já está lá.

Por isso, quem abre devolve o identificador, e quem usa reconecta por ele:

Etapa 1: abre o sistema e devolve o identificador
import subprocess
from pywinauto import Application

processo = subprocess.Popen(r'C:\Program Files\CRM\crm.exe')
app = Application(backend='uia').connect(process=processo.pid, timeout=60)
app.window(title_re='.*CRM.*').wait('ready', timeout=60)

bm.done('aberto', { '{crm_pid}': str(processo.pid) })
Etapas seguintes: reconectam antes de qualquer coisa
from pywinauto import Application

pid = bm.get('{crm_pid}')
try:
    app = Application(backend='uia').connect(process=int(pid), timeout=30)
except Exception:
    app = Application(backend='uia').connect(title_re='.*CRM.*', timeout=30)

janela = app.window(title_re='.*CRM.*')
janela.set_focus()
# A etapa pode estar voltando de uma nova tentativa, com a tela em qualquer
# lugar. Normalize antes de digitar, nunca assuma onde a execução parou.
A regra vale para arquivos também: o que atravessa uma etapa é sempre um identificador (o PID de um aplicativo, o caminho absoluto de um arquivo), nunca o objeto em si. O tratamento completo está em Python e NodeJS → Estado entre etapas.

Sobre o tamanho das etapas: quebre por fase do processo (abrir, processar, encerrar), não por micro-ação. Clicar, digitar e salvar um mesmo registro são a mesma etapa. E dentro de um laço, deixe uma etapa por registro: cada etapa sobe um interpretador novo, então três etapas por registro triplicam o custo sem nenhum ganho.

O Copilot escreve o script para você

O Copilot do Agent Builder reconhece pedidos de automação desktop e escreve o script Python (ou NodeJS) diretamente. Basta descrever qual aplicativo e qual ação você quer automatizar. Ele sabe, por padrão:

Ainda assim, revise o script gerado antes de publicar. Automação desktop depende do estado exato da tela (janela em foco, resolução, elementos visíveis) no ambiente onde o runtime realmente vai rodar, algo que o Copilot não tem como verificar sozinho.

Cuidados e limitações