Auto Refresh

Como funciona

Escrito para a versão que está agora na Chrome Web Store.

Permissões, e por que pedimos tão pouco

Recarregar uma aba por temporizador não exige nenhum acesso ao site. A extensão pede ao navegador que recarregue; ela nunca vê a página. É por isso que instalá-la não mostra o aviso de sempre, o de «ler e alterar todos os seus dados em todos os sites».

Só duas funções precisam ler a página: a contagem regressiva desenhada sobre ela e o monitoramento por palavra-chave. Essas pedem acesso a um site por vez, na primeira vez que você as usa ali. Tudo o que foi concedido aparece na página de opções e pode ser revogado site a site.

O pacote não traz nenhum content script declarativo. O código de página só é injetado nas abas que você liberou, usando chrome.scripting — em um site que você não liberou, nenhuma linha do nosso código roda.

Intervalos, agendamentos e horários exatos

O fixo repete a cada N segundos. O aleatório sorteia um valor novo dentro de uma faixa a cada ciclo, o que ajuda quando um padrão de requisições ritmicamente idêntico não é desejável. O personalizado aceita horas, minutos e segundos.

Um agendamento limita a regra aos dias da semana escolhidos e a uma janela de início e fim. Uma janela cujo fim é anterior ao início é tratada como atravessando a meia-noite, então 22:00 → 02:00 funciona como você espera.

Horários exatos substituem o intervalo por completo: liste 09:30 e 14:00 e a página recarrega nesses momentos, passando para amanhã depois que eles já passaram.

A contagem regressiva desenhada na página

A extensão pode desenhar uma pequena contagem regressiva na própria página, para você ver quanto falta sem abrir a janela da barra de ferramentas. Arraste para onde quiser; a posição é lembrada por regra como porcentagem do viewport, então continua no lugar quando a janela muda de tamanho.

Essa é a única comodidade que exige acesso de leitura a um site. Desligue-a e as recargas programadas continuam funcionando sem permissão nenhuma — daí ela ser uma opção de cada regra em vez de um botão global.

O modo compacto tira as palavras e deixa só os dígitos, pensado para uma página que você acompanha num painel de parede do outro lado da sala.

Sintaxe das expressões

Texto simples casa sem diferenciar maiúsculas em qualquer parte do texto visível.

Expressões regulares são escritas entre barras, com flags opcionais: /\$\d+(\.\d{2})?/i. Padrões soltos prefixados com $ também são aceitos quando você cola regras vindas de outro lugar.

Seletores CSS e XPath casam com elementos, não com palavras. XPath começa com // ou com um ponto.

Expressões booleanas combinam todo o resto: (In Stock OR Available) AND NOT Sold Out. Coloque uma frase entre aspas apenas quando ela contiver uma dessas palavras-chave.

Várias expressões em um mesmo monitor são unidas por OR. Quando precisar de AND, escreva uma única expressão booleana em vez de contar com uma regra implícita.

Regras prontas

Modelos prontos cobrem as situações para as quais isto é realmente usado: um item que volta ao estoque, um preço que muda, uma nova vaga publicada, um build que termina, um painel interno que começa a devolver 500.

Escolher um preenche tanto a expressão quanto um intervalo sensato — trinta segundos para reposição, dez minutos para uma página de vagas — porque acertar o intervalo faz tanta parte da receita quanto as palavras. Depois disso, tudo continua editável.

Os modelos vão dentro da extensão em vez de serem buscados. Baixá-los sob demanda significaria que poderíamos ver quem observa o quê e quando, que é exatamente o que prometemos não saber.

Apontar um elemento em vez de escrever um seletor

O seletor visual destaca elementos conforme você passa pela página; clicar em um deles escreve o seletor por você. Use onde quer que um seletor CSS seja pedido — a região monitorada, um alvo de clique ou o valor a extrair.

Ele prefere uma âncora estável como id ou data-testid a um caminho posicional do tipo div:nth-child(3) > span. Caminhos posicionais quebram na primeira vez que o site inclui um banner; âncoras por atributo costumam sobreviver a uma reformulação.

Se um seletor quebrar mesmo assim, o reparo por IA pega o seletor antigo mais um fragmento da página nova e propõe um substituto, com uma pontuação de confiança que você avalia antes de aceitar.

Aparece, some, qualquer coisa muda

«Aparece» dispara quando surge uma correspondência. «Some» dispara quando todas as expressões deixam de casar — útil para um aviso de «esgotado» ou de manutenção indo embora.

«Qualquer coisa muda» não precisa de palavras-chave. Ele tira uma impressão digital do texto visível e avisa quando essa impressão se mexe. A primeira varredura só estabelece uma linha de base, então uma regra recém-criada nunca dispara de imediato.

As impressões ignoram de propósito o HTML bruto. Nonces, carimbos de hora e scripts inline mudam em quase todo carregamento, então gerar hash da marcação faria a coisa avisar sem parar.

Opções de varredura

Esperar antes de varrer dá às páginas dinâmicas tempo de renderizar. Se um monitor nunca dispara num site que claramente casa, quase sempre é por isso.

Restringir um monitor a uma região com um seletor CSS tira toda a mobília da página da jogada e é a forma mais eficaz de cortar falsos positivos.

Varrer o código HTML em vez do texto visível também casa com marcação escondida. É uma opção de desenvolvedor; ela vai casar com coisas que ninguém consegue ver.

Interações com a página

Um alvo de interação é um seletor CSS com um XPath opcional de reserva: serve para fechar um pop-up ou banner de cookies, expandir uma seção recolhida ou mudar para a aba certa. É acionado depois de cada recarga ou apenas quando o monitor dispara, e os alvos rodam em ordem.

Use o seletor visual em vez de escrever seletores à mão — ele prefere id e data-testid a caminhos posicionais, o que aguenta muito melhor as reformulações do site.

A detecção de captcha pausa a regra e avisa você. A extensão não tenta resolver, contornar nem derrotar de qualquer outra forma um desafio.

Rodízio de quiosque

Dê a uma regra uma lista de URLs, uma por linha, e a aba passa por elas no ritmo do temporizador em vez de recarregar a mesma página. É o modo que você quer para um painel de parede ou um monitor sobrando exibindo vários dashboards em rodízio.

O cursor do rodízio vive junto ao estado de execução da regra, então uma reinicialização do navegador ou um service worker suspenso retomam na URL certa em vez de começar a lista do zero.

Os monitores continuam valendo durante o rodízio, o que significa que uma única regra pode girar quatro dashboards e avisar quando qualquer um deles começar a mostrar erro.

Extrair um valor ao longo do tempo

Aponte para um preço, uma contagem de estoque ou uma posição e cada verificação registra o que estava escrito. Os números são extraídos do que os cerca — símbolos de moeda e separadores de milhar são removidos — então 1 299,00 € vira um número que dá para plotar e comparar.

Um limite transforma a série em alerta: abaixo de um valor, acima de um valor, ou uma variação percentual desde a última amostra. Sem limite, a série é registrada em silêncio e só aparece quando você vai olhar.

Tudo pode ser exportado em CSV. O gráfico do painel é, de propósito, uma única linha sem eixos — o painel tem 320px de largura, e leitura precisa é justamente para o que serve a exportação.

Histórico de mudanças

Toda vez que um monitor dispara, a hora, a página e o texto que casou ficam anotados. É isso que faz valer a pena deixar uma vigilância rodando sem ninguém olhando: horas depois você vê exatamente o que aconteceu e quando, em vez de encontrar uma notificação que perdeu.

Os instantâneos guardam o texto ao redor no momento do disparo, então dá para comparar antes e depois em vez de só saber que algo se mexeu.

O histórico local é um buffer circular cujo tamanho você define nas opções; as entradas mais antigas caem conforme chegam novas. Retenção mais longa fica na conta, e só se você ligar a sincronização na nuvem.

Para que serve a IA

A criação de regras pega uma frase — «me avise quando voltar ao estoque e estiver abaixo de US$ 200» — e devolve uma expressão, um modo e um intervalo sugerido. É o caminho mais rápido para pular a sintaxe, pensado para quem nunca vai aprender expressões regulares e não precisa aprender.

O resumo de mudanças pega o texto de antes e depois de um disparo e diz em uma linha o que realmente mudou, o que importa numa página em que a diferença útil está enterrada entre carimbos de hora e anúncios rotativos.

A classificação de mudanças julga se uma diferença é significativa ou ruído, e o reparo de seletores propõe um substituto quando uma reformulação quebra um deles. Os quatro rodam nos nossos servidores: não há nenhuma chave de modelo em lugar algum do pacote da extensão, e as requisições levam o fragmento analisado, não um histórico de navegação.

Alertas

No navegador: uma notificação, um som, destacar a correspondência na página ou trazer a aba para a frente.

Fora do navegador: e-mail, um webhook, Telegram, Discord ou Slack. Configure no painel; eles exigem conta e plano Pro.

Alertas não são reenviados. Um aviso de reposição que chega dez minutos atrasado é pior do que inútil, então uma entrega que falha é reportada em vez de entrar numa fila.

Cada canal abaixo tem sua própria configuração no painel, e o painel liga direto de volta para estes parágrafos.

E-mail

Adicione o endereço no painel e enviamos um único e-mail de confirmação para ele. O canal fica em silêncio até que o link de dentro seja aberto; o link funciona uma vez e expira em 24 horas.

Essa confirmação dupla não é formalidade. Sem ela, qualquer pessoa com conta poderia digitar o endereço de um desconhecido e fazer nosso domínio entregar ali o texto que quisesse — o formato exato de um relay de e-mail aberto, e o jeito mais rápido de perder reputação de envio. Por isso o botão Testar não confirma um endereço; só um endereço já confirmado pode ser testado.

E-mail é o único canal que consome a cota diária, porque é o único que pagamos. E-mails de confirmação não contam, mas reenviar um tem limite de frequência.

Webhook

Cole um endpoint https:// que você controle. Fazemos POST de application/json no formato { source, title, body, url, at }: o título e o corpo do disparo, a página em que aconteceu e um carimbo de tempo ISO.

Uma tentativa, oito segundos de espera, sem reenvio. Cabeçalhos personalizados podem ser guardados junto do canal quando você precisa de um token de autenticação do seu lado.

A URL precisa ser https, e hosts que resolvem para faixas privadas ou link-local são rejeitados ao adicionar o canal — incluindo o endereço de metadados da nuvem. Essa checagem existe para que este formulário não possa ser usado para fazer nossos servidores sondarem uma rede interna em nome de alguém.

Telegram

O Telegram precisa de dois valores, e o painel pede os dois: um bot token e um chat id. Fale com o @BotFather, envie /newbot e copie o token devolvido. Depois mande qualquer mensagem para o seu novo bot — um bot não consegue iniciar uma conversa com você — e leia chat.id em https://api.telegram.org/bot<token>/getUpdates.

Chamamos sendMessage na Bot API do Telegram com o seu token. O token fica na sua conta, não é usado para mais nada e nunca é entregue à extensão; revogá-lo no BotFather corta a entrega na hora.

Discord

Configurações do servidor → Integrações → Webhooks → Novo webhook, escolha o canal, depois Copiar URL do webhook e cole no painel.

Fazemos POST de um embed do Discord com o título, o texto que casou e um link para a página. A URL é ela própria a credencial — quem a tiver pode publicar naquele canal — então trate como segredo. Apagar o webhook no Discord o revoga na hora, sem nada para mudar do nosso lado.

Slack

No seu app do Slack, em Incoming Webhooks, ative o recurso, adicione um ao workspace, escolha o canal e copie a URL de hooks.slack.com.

Fazemos POST de { text } com o título, o texto que casou e a URL da página. O webhook está preso ao único canal que você escolheu e é a própria credencial; revogue no Slack para parar a entrega.

Quando o Chrome congela uma aba em segundo plano

O economizador de memória do Chrome descarta abas que ele acha ociosas, e isso interrompe o ciclo de recarga. A extensão percebe a aba descartada e a recarrega para trazê-la de volta.

Manter a janela visível evita isso por completo. «Manter o computador acordado» nas opções impede que a suspensão do sistema tenha o mesmo efeito durante a madrugada.

Sincronização, dispositivos e o que sai da sua máquina

Sem uma conta, absolutamente nada sai do seu navegador.

Com a sincronização na nuvem ligada, guardamos as regras que você escreveu e os disparos que elas produziram. Não guardamos — nem temos interesse em — uma lista dos sites que você visita.

A mesclagem acontece no dispositivo, por regra, pela hora da última modificação — editar num notebook nunca sobrescreve o que o desktop configurou. Regras presas a uma aba nunca sincronizam, porque um id de aba não significa nada em outra máquina.

O teste, e o que o plano gratuito mantém

O teste são sete dias com tudo liberado, contados localmente. Não exige conta, não exige cartão e não há nada para cancelar — quando termina, os recursos Pro ficam somente leitura em vez de sumir, então nada do que você configurou se perde.

O plano gratuito quer ser realmente utilizável, não uma demonstração: regras de recarga ilimitadas, todas as opções da camada de recarga e três monitores de texto simples. Intervalos aleatórios, sons e notificações não são medidos, porque cobrar por alerta é justamente o que torna as extensões concorrentes desagradáveis de conviver.

O que o Pro acrescenta é escala e nuvem: monitores ilimitados, expressões avançadas, agendamento, interações com a página, extração, histórico, IA e alertas que saem do navegador. O vitalício é o mesmo conjunto de recursos com a cota de IA reiniciando por ano em vez de por mês — custos de inferência voltam todo ano, mesmo quando o pagamento não volta.