v2.0

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:

Atraso na Execução (global)

Painel Velocidade e Limites de Tempo do cadastro do agente
Cadastro do Agente → Velocidade e Limites de Tempo: os três timers padrão, aplicados à execução inteira.

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.

ValorUso típico
0 msSistemas rápidos ou ambientes de teste onde velocidade é prioritária
500–1000 msSistemas internos com renderização JavaScript assíncrona
1500–3000 msPortais lentos, sistemas legados ou proteções anti-bot básicas
O Atraso na Execução é aplicado globalmente a todas as ações desse agente. Para pausas específicas em etapas individuais, use o Timer de Espera de uma etapa de Regra Customizada, ou escreva a pausa num script com 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.

ValorUso típico
0 msSem 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 msSistemas internos lentos, relatórios pesados ou VPNs com latência
60000+ msDownloads 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.

ValorUso típico
0 msSem limite. O runtime procura o elemento indefinidamente.
30000 ms (padrão)Valor que já vem preenchido no campo.
5000–15000 msElementos que aparecem logo após o carregamento inicial
30000+ msElementos que dependem de requisições AJAX lentas ou carregamento progressivo
0 significa "sem limite" Nestes dois campos, 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:

Prefira aumentar o Limite de Busca de Seletores a usar delays fixos. O runtime para de esperar assim que o elemento aparece, tornando a execução mais rápida nos casos em que o sistema responde rapidamente.

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.

ValorUso típico
120 sSó dados: cálculo, transformação de texto, montar ou ler um JSON.
600 sCom 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.
Escolha o menor tempo que a etapa realmente precisa. Ao estourar, a etapa é encerrada e conta como erro, entrando na Gestão de Erros da etapa: ela pode ser tentada de novo, ou o fluxo pode seguir por um contorno. É isso que transforma um travamento em nova tentativa. Com um limite folgado demais, uma etapa presa segura a execução por horas antes de qualquer reação, e o efeito se multiplica se a etapa estiver dentro de um laço. Por isso, etapa de laço nunca leva valor de lote.

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.

Aqui o zero não existe Ao contrário dos limites de página e de seletor, este campo não aceita "sem limite", e isso é proposital. Quem cronometra o script é o próprio ambiente runtime. Um script sem teto que perca o runtime (a bandeja fechada, a máquina reiniciada, o serviço derrubado) continua rodando sozinho, sem nada que o encerre, possivelmente segurando o aplicativo que ele abriu. O teto de 8 horas é a garantia de que toda execução termina.

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:

Seção Temporização de um mapeamento, com os campos Delay e Aguardar Após Executar
Mapeamento de um clique: Temporização com Delay e Aguardar Após Executar, específicos desta ação.
CampoComportamento
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.
Use Aguardar Após Executar quando uma ação específica dispara algo lento (abre um modal com animação, carrega um relatório) e só aquela etapa precisa da pausa. Evita ter que subir o Atraso na Execução global, que afetaria todas as ações do agente.

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.

Seção Timer de Espera da etapa de Regra Customizada, com o slider de segundos
Etapa de Regra Customizada → Timer de Espera: o slider e o campo numérico definem os segundos de espera.
CampoComportamento
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

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çãoUse
Pausa fixa e simples antes de seguirTimer de Espera
A etapa já tem script e só falta uma pausa depois deleTimer 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ávelScript
Espera acima de 600 segundosScript, ajustando o Limite de Tempo do Script
Esperar um elemento aparecer na páginaNenhum dos dois: use o mapeamento ou o Limite de Busca de Seletores
O Runtime precisa estar atualizado. A espera é executada pelo Runtime em que o agente roda. Um Runtime instalado antes desta funcionalidade ignora o campo, e o processo segue sem aguardar. Atualize o Runtime (veja Ambientes Runtime).

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:

Node.js: aguardar 2 segundos
(async () => {
  // Aguardar 2 segundos antes de continuar
  await new Promise(resolve => setTimeout(resolve, 2000));

  bm.bmLog('Aguardou 2s, continuando...');
  bm.done('ok');
})();
Python: aguardar 2 segundos
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):

Node.js: polling com timeout de 30s
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