Skip to content

fix: update selectors for new UI and improve automation stability#130

Open
Samyr-Dev wants to merge 3 commits into
Matt-Fontes:mainfrom
Samyr-Dev:main
Open

fix: update selectors for new UI and improve automation stability#130
Samyr-Dev wants to merge 3 commits into
Matt-Fontes:mainfrom
Samyr-Dev:main

Conversation

@Samyr-Dev

Copy link
Copy Markdown

Descrição do Problema:
O script original apresentava falhas na execução devido a atualizações recentes na interface do WhatsApp Web, resultando no erro Cannot read properties of null (reading 'click'). Isso ocorria porque os seletores do botão de envio mudaram e o estado do React não era atualizado corretamente após a inserção do texto.

Mudanças Realizadas:

Novos Seletores: Adicionado suporte ao seletor wds-ic-send-filled (identificado na versão mais recente) e implementada lógica de fallback para seletores legados, garantindo compatibilidade entre diferentes versões.

Gestão de Eventos: Substituição do disparo de evento change por input. Isso assegura que o estado interno do React seja atualizado e o botão de envio seja habilitado dinamicamente no DOM.

Controle de Concorrência: Refatoração do loop para utilizar await em todas as etapas assíncronas. Isso elimina condições de corrida (race conditions) onde o script tentava clicar no botão antes de sua renderização.

Estabilidade e Segurança: Implementação de um intervalo de segurança de 1000ms entre mensagens para evitar detecção por sistemas automáticos de spam e garantir a ordem cronológica do envio.

Validação de Contexto: Adicionada verificação prévia de existência dos elementos #main e textarea, fornecendo erros mais descritivos ao usuário.

Como Testar:

Abra o WhatsApp Web em uma conversa ativa.

Cole o script no console do DevTools.

Execute o comando enviarScript('Texto de Teste').

Verifique se a mensagem é inserida, o botão de envio aparece e o clique é disparado com sucesso.

Samyr-Dev added 3 commits May 9, 2026 22:33
Este commit introduz melhorias críticas para garantir que o script funcione na versão mais recente da interface do WhatsApp Web, além de aumentar a estabilidade e segurança da execução.

1. Suporte a Múltiplos Seletores (Resiliência)
Mudança: Implementação de uma lógica de busca por múltiplos seletores para o botão de envio.

Motivo: O WhatsApp Web frequentemente altera os atributos data-testid e data-icon. Adicionamos o novo padrão wds-ic-send-filled identificado em versões recentes, mantendo os seletores legados (send, data-icon="send") como fallback. Isso evita que o script quebre em diferentes versões da interface.

2. Correção no Ciclo de Vida de Eventos (React Compatibility)
Mudança: Substituição do evento change pelo evento input (textarea.dispatchEvent(new Event('input', {bubbles: true}))).

Motivo: O WhatsApp é construído em React. O evento change muitas vezes não é suficiente para notificar o estado da aplicação de que o campo de texto foi preenchido. O evento input garante que a interface "perceba" o novo texto e renderize o botão de enviar no DOM.

3. Sincronização Assíncrona (Ajuste de Race Conditions)
Mudança: Migração da lógica de clique de um setTimeout isolado para uma espera real com await dentro do loop for...of.

Motivo: No script original, o setTimeout não bloqueava a execução. Isso causava "encavalamento" de mensagens, onde o script tentava enviar a linha 2 antes mesmo da linha 1 ter sido processada. Agora, o script aguarda obrigatoriamente 250ms após a inserção do texto para garantir que o botão de envio esteja presente e clicável.

4. Delay de Segurança (Anti-Ban/Throttle)
Mudança: Adição de um intervalo de 1000ms (1 segundo) entre o envio de cada mensagem.

Motivo: Automações que enviam mensagens em intervalos de milissegundos são facilmente detectadas pelos sistemas de segurança do WhatsApp como comportamento de bot (spam). O delay de 1s simula um ritmo mais humano e reduz o risco de bloqueio da conta durante testes de volume (como o roteiro de um filme).

5. Melhoria no Tratamento de Erros e Logs
Mudança: Adição de verificações de existência para o main e textarea antes de iniciar o loop.

Motivo: Evita o erro Cannot read properties of null logo no início, fornecendo um feedback claro ao usuário no console caso ele esqueça de abrir uma conversa antes de rodar o script.
Updated instructions for sending scripts via WhatsApp Web and added technology section.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant