Timers
Configurações de tempo no browserMate: delays entre ações, timeouts de carregamento e pausas controladas em scripts.
Existem cinco níveis de controle de tempo, cada um num lugar diferente do Agent Builder:
- Padrão (global): configurado uma vez no cadastro do agente, vale para toda a execução.
- De ação (por mapeamento): configurado dentro de cada mapeamento, na aba Mapeamentos da etapa: um delay e uma espera específicos daquela ação (ex.: aguardar depois de um clique).
- Da etapa de código: o Limite de Tempo do Script, configurado na própria etapa de Regra Customizada. Diz por quanto tempo aquele script pode rodar antes de ser encerrado.
- Timer de Espera (visual): um slider de segundos na seção Timer de Espera da etapa de Regra Customizada. Faz o processo aguardar antes de seguir, sem escrever código.
- Via script: pausas escritas à mão numa etapa de Regra Customizada, para lógica que os níveis anteriores não cobrem (polling, espera condicional). Continuam valendo.
Atraso na Execução (global)

O campo Atraso na Execução no Criação de Agente adiciona um delay fixo (em milissegundos) entre cada ação de browser executada pelo agente: cliques, preenchimentos e navegações.
| Valor | Uso típico |
|---|---|
| 0 ms | Sistemas rápidos ou ambientes de teste onde velocidade é prioritária |
| 500–1000 ms | Sistemas internos com renderização JavaScript assíncrona |
| 1500–3000 ms | Portais lentos, sistemas legados ou proteções anti-bot básicas |
setTimeout / time.sleep().
Limite de Carregamento de Páginas
O campo Limite de Carregamento de Páginas define o tempo máximo (em milissegundos) que o runtime aguarda pela conclusão do carregamento da página após uma navegação ou ação que aciona reload. Se a página não carregar dentro desse tempo, a etapa falha.
| Valor | Uso típico |
|---|---|
| 0 ms | Sem limite. O runtime espera o tempo que for necessário pelo carregamento. |
| 30000 ms (padrão) | Valor que já vem preenchido no campo, adequado à maioria dos portais. |
| 15000–30000 ms | Sistemas internos lentos, relatórios pesados ou VPNs com latência |
| 60000+ ms | Downloads grandes ou geração de relatórios que demoram muito |
Limite de Busca de Seletores
O campo Limite de Busca de Seletores define o tempo máximo (em milissegundos) que o runtime tenta localizar um elemento na página antes de declarar falha. É o timeout padrão de qualquer ação que precise localizar um seletor, como Preencher, Obter Informação e cliques.
| Valor | Uso típico |
|---|---|
| 0 ms | Sem limite. O runtime procura o elemento indefinidamente. |
| 30000 ms (padrão) | Valor que já vem preenchido no campo. |
| 5000–15000 ms | Elementos que aparecem logo após o carregamento inicial |
| 30000+ ms | Elementos que dependem de requisições AJAX lentas ou carregamento progressivo |
0 é uma escolha legítima: o runtime desliga o timeout e espera indefinidamente. O padrão de 30 segundos já vem preenchido no campo e só é aplicado por conta própria quando o valor está ausente ou inválido, nunca por cima de um 0 que você escolheu.
Aumente o Limite de Busca de Seletores quando:
- Elementos aparecem após uma requisição AJAX que demora alguns segundos
- A página tem carregamento progressivo (skeleton screens)
- O sistema exibe um spinner de carregamento antes de renderizar o conteúdo
Limite de Tempo do Script
O campo Limite de Tempo do Script fica na própria etapa de Regra Customizada, logo abaixo do código, e define por quantos segundos aquele script pode rodar antes de ser encerrado. Vale igualmente para Python e para Node.js, e tanto para código escrito direto na etapa quanto para um projeto de script selecionado.
Cada etapa tem o seu, e é para ser assim: ler uma planilha e dirigir um sistema desktop a noite inteira não pedem o mesmo tempo. O campo traz atalhos (2 minutos, 10 minutos, 1 hora, 8 horas) e aceita qualquer valor entre 10 segundos e 8 horas.
| Valor | Uso típico |
|---|---|
| 120 s | Só dados: cálculo, transformação de texto, montar ou ler um JSON. |
| 600 s | Com entrada e saída: arquivo, planilha, chamada de API, banco de dados, abrir um aplicativo, processar um registro dentro de um laço. |
| 3600 s (padrão) | Lote: a etapa processa a lista inteira de uma vez, ou executa um projeto de script mais longo. |
O campo aparece apenas onde tem efeito: numa etapa que só itera listas, sem código, não há script para cronometrar; e o Script de Sessão roda junto do navegador, fora desse relógio.
Quando o limite estoura, a mensagem no log e no console do depurador diz o limite que valia e separa os dois casos que levam ao mesmo erro: o tempo era curto para o volume que a etapa processa, ou o script travou de verdade, esperando uma janela que não abriu, um diálogo que ninguém respondeu ou um laço sem saída.
Timers de ação (por mapeamento)
Além dos timers globais, cada mapeamento de uma etapa de interação (clique, preenchimento etc.) tem sua própria seção Temporização, na aba Mapeamentos:

| Campo | Comportamento |
|---|---|
| Delay | Tempo (em ms) entre pressionar e soltar o botão do mouse durante a própria ação, o que simula um clique menos instantâneo. Não é uma espera antes ou depois da ação. |
| Aguardar Após Executar | Pausa (em ms) aplicada depois que a ação é concluída, antes de seguir para a próxima etapa. É o caso de "depois desse clique, aguarde N segundos" antes de continuar. Num clique que abre outra aba, é depois dessa pausa que o agente passa a operar nela. |
Timer de Espera (Regra Customizada)
É a forma visual de fazer o processo esperar. Na etapa de Regra Customizada, a seção Timer de Espera fica logo abaixo de Iterações de Listas e tem um slider de segundos. O valor escolhido é o tempo que o processo aguarda antes de seguir para a próxima etapa. Não precisa de código.

| Campo | Comportamento |
|---|---|
| Aguardar antes de seguir | Segundos, de 0 a 600. Toda etapa começa em 0, que significa sem espera. Arraste o slider ou digite o valor exato no campo abaixo dele. |
Quando a espera acontece
- No fim da etapa. O processo executa as Variáveis do Fluxo, os scripts e a iteração de listas e só depois aguarda. Por isso o tempo também não conta no Limite de Tempo do Script.
- Só quando a etapa executa. Uma etapa pulada por Executar esta Etapa somente se não espera. Uma etapa que falha também não chega à espera: a pausa entre tentativas é o Intervalo entre Tentativas da Gestão de Erros.
- O botão Parar vale durante a espera. O processo confere o pedido a cada 10 segundos e encerra a execução sem esperar o tempo acabar.
- Na Sandbox, a duração máxima da execução vale. A espera conta no tempo total da execução, que é encerrada ao atingir o limite. Veja Ambiente Sandbox → Limites de uso.
- Fica no log. Cada espera gera duas linhas, uma ao começar e outra ao terminar, no console do Debug e na Trilha de Auditoria.
Timer de Espera ou script?
As duas formas convivem e nenhuma substitui a outra. Os scripts com setTimeout e time.sleep() continuam valendo, descritos na próxima seção. O slider é o caminho visual para o caso simples.
| Situação | Use |
|---|---|
| Pausa fixa e simples antes de seguir | Timer de Espera |
| A etapa já tem script e só falta uma pausa depois dele | Timer de Espera, sem mexer no código |
| Esperar até uma condição (arquivo aparecer, status mudar numa API) | Script, com polling |
| Tempo calculado, que vem de uma variável | Script |
| Espera acima de 600 segundos | Script, ajustando o Limite de Tempo do Script |
| Esperar um elemento aparecer na página | Nenhum dos dois: use o mapeamento ou o Limite de Busca de Seletores |
Aguardar em scripts
Para pausas com lógica dentro de uma etapa de Regra Customizada, o script continua sendo o caminho. A espera escrita no script conta no Limite de Tempo do Script:
(async () => {
// Aguardar 2 segundos antes de continuar
await new Promise(resolve => setTimeout(resolve, 2000));
bm.bmLog('Aguardou 2s, continuando...');
bm.done('ok');
})();
import time
import browsermate as bm
# Aguardar 2 segundos antes de continuar
time.sleep(2)
bm.bmLog('Aguardou 2s, continuando...')
bm.done('ok')
Aguardar com timeout e polling
Para aguardar até que uma condição seja satisfeita (ex.: arquivo aparecer, status mudar numa API):
const axios = require('axios');
(async () => {
const jobId = bm.get('{job_id}');
const maxMs = 30000;
const inicio = Date.now();
let status = 'pendente';
while (status === 'pendente' && Date.now() - inicio < maxMs) {
await new Promise(r => setTimeout(r, 2000));
const resp = await axios.get(`https://api.sistema.com/jobs/${jobId}`);
status = resp.data.status;
}
if (status !== 'concluido') {
bm.bmLog('[TIMEOUT] Job não concluiu em 30s');
bm.done('timeout', { '{job_status}': 'timeout' });
} else {
bm.done('ok', { '{job_status}': status });
}
})();
Boas práticas
- Prefira espera por elemento a delay fixo. O Limite de Busca de Seletores aguarda o elemento aparecer sem desperdiçar tempo quando o sistema está rápido. Delays fixos sempre consomem o tempo todo.
- Ajuste por ambiente. Um agente configurado para o ambiente de produção pode precisar de delays diferentes de um agente de teste. Use parâmetros de inicialização para tornar os delays configuráveis por execução.
- Para uma pausa simples, use o Timer de Espera. O slider dispensa código e o valor fica visível na própria etapa. Deixe o script para a espera que depende de uma condição.
- Evite sleeps longos em scripts. Se o script precisa aguardar mais de 10 segundos, considere usar o padrão de Loop com etapas de decisão, que fica mais fácil de monitorar e depurar.
- Respeite o timeout do script. O runtime encerra scripts que excedam o tempo configurado, e um
sleepdentro do script conta nesse tempo. Para operações longas, divida em etapas menores ou aumente o timeout de execução. A espera do Timer de Espera roda depois do script e não entra nessa conta.
