From 286ef03413cbe9f2725292907651d1e0083fc398 Mon Sep 17 00:00:00 2001 From: Samyr Silva Tertuliano <147438864+Samyr-Dev@users.noreply.github.com> Date: Sat, 9 May 2026 22:33:46 -0300 Subject: [PATCH 1/3] =?UTF-8?q?Refatora=C3=A7=C3=A3o=20e=20Otimiza=C3=A7?= =?UTF-8?q?=C3=A3o=20do=20Script=20de=20Automa=C3=A7=C3=A3o=20(WhatsApp=20?= =?UTF-8?q?Web)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- shrekSendScript.js | 56 +++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/shrekSendScript.js b/shrekSendScript.js index ff005de..db8e21e 100644 --- a/shrekSendScript.js +++ b/shrekSendScript.js @@ -1,25 +1,39 @@ async function enviarScript(scriptText){ - const lines = scriptText.split(/[\n\t]+/).map(line => line.trim()).filter(line => line); - main = document.querySelector("#main"), - textarea = main.querySelector(`div[contenteditable="true"]`) - - if(!textarea) throw new Error("Não há uma conversa aberta") - - for(const line of lines){ - console.log(line) - - textarea.focus(); - document.execCommand('insertText', false, line); - textarea.dispatchEvent(new Event('change', {bubbles: true})); - - setTimeout(() => { - (main.querySelector(`[data-testid="send"]`) || main.querySelector(`[data-icon="send"]`)).click(); - }, 100); - - if(lines.indexOf(line) !== lines.length - 1) await new Promise(resolve => setTimeout(resolve, 250)); - } - - return lines.length; + const lines = scriptText.split(/[\n\t]+/).map(line => line.trim()).filter(line => line); + const main = document.querySelector("#main"); + const textarea = main ? main.querySelector(`div[contenteditable="true"]`) : null; + + if(!textarea) throw new Error("Não há uma conversa aberta! Clique em uma conversa antes de rodar o script."); + + for(const line of lines){ + console.log("Enviando linha:", line); + + textarea.focus(); + document.execCommand('insertText', false, line); + + textarea.dispatchEvent(new Event('input', {bubbles: true})); + + await new Promise(resolve => setTimeout(resolve, 250)); + + const sendBtn = main.querySelector('span[data-testid="wds-ic-send-filled"]') || + main.querySelector('span[data-icon="wds-ic-send-filled"]') || + main.querySelector('span[data-testid="send"]') || + main.querySelector('span[data-icon="send"]') || + main.querySelector('button:has(span[data-icon="send"])'); + + if (sendBtn) { + sendBtn.click(); + } else { + console.error("Botão de enviar não encontrado. O seletor pode ter mudado."); + break; + } + + if(lines.indexOf(line) !== lines.length - 1) { + await new Promise(resolve => setTimeout(resolve, 1000)); + } + } + + return lines.length; } enviarScript(` From 0b14bfd8015c5bb2b03c40308c97b72f89126ae4 Mon Sep 17 00:00:00 2001 From: Samyr Silva Tertuliano <147438864+Samyr-Dev@users.noreply.github.com> Date: Sun, 10 May 2026 00:11:46 -0300 Subject: [PATCH 2/3] Enhance README with usage instructions and technologies Updated instructions for sending scripts via WhatsApp Web and added technology section. --- README.md | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index a540f6b..3a34c0c 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,41 @@ # SendScriptWhatsApp -Código para enviar o Script inteiro de Shrek ou Bee Movie para seus amigos ou grupos do WhatsApp +Código para enviar o Script inteiro de Shrek ou Bee Movie para seus amigos ou grupos do WhatsApp através do console do navegador. + +## Tecnologias + +* JavaScript ## Utilização -Abra [shrekSendScript.js](https://github.com/Matt-Fontes/SendScriptWhatsApp/blob/main/shrekSendScript.js) -Ou -Abra [beeMovieSendScript.js](https://github.com/Matt-Fontes/SendScriptWhatsApp/blob/main/beeMovieSendScript.js) +1. Abra o [WhatsApp Web](https://web.whatsapp.com) e faça login na sua conta. +2. Abra a conversa para a qual deseja enviar o script e mantenha a caixa de texto selecionada. +3. Abra o **DevTools** (Ferramentas do Desenvolvedor) utilizando um dos atalhos: `Ctrl + Shift + J`, `Ctrl + Shift + I` ou `F12`. +4. No topo da aba que se abriu, clique em **Console**. +5. Escolha um dos scripts abaixo: + * [shrekSendScript.js](https://github.com/Matt-Fontes/SendScriptWhatsApp/blob/main/shrekSendScript.js) + * [beeMovieSendScript.js](https://github.com/Matt-Fontes/SendScriptWhatsApp/blob/main/beeMovieSendScript.js) +6. Copie todo o conteúdo do arquivo (clique em **Raw** -> `Ctrl + A` -> `Ctrl + C`). +7. No console do WhatsApp Web, cole o código. + +> [!IMPORTANT] +> Em atualizações recentes do Google Chrome, pode ser impedido que scripts sejam colados no Console. Para contornar isso, digite `allow pasting` no console e aperte Enter antes de colar o script. + +8. Após colar o script, aperte **Enter** para iniciar a execução. -Copie todo o conteúdo (clique em raw -> ctrl+a -> ctrl+c) +## Atenção -No WhatsApp Web abra o console do Browser +Esta ação é **irreversível**. Uma vez iniciado, o script enviará todas as linhas do roteiro automaticamente. -| ⚠️ Aviso importante, numa atualização recente do Google Chrome, está sendo impedido que qualquer script seja colado no Console.| -|--| -| ***Para contornar esse problema, o console do desenvolvedor espera receber um confirmação textual escrevendo no console: "allow pasting"***| -|Após isso será permitido colar e continuar a execução do script| +## Contribuidores +* [Matt-Fontes](https://github.com/Matt-Fontes) (Criador) +* [P0sseid0n](https://github.com/P0sseid0n) +* [Alphka](https://github.com/Alphka) +* [Bulani](https://github.com/Bulani) +* [WillFelisberto](https://github.com/WillFelisberto) +* [silvan-batistella](https://github.com/silvan-batistella) -Cole o código no console e aperte Enter +## Contato -Pronto +[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/samyrtertuliano) From 17e973087a4c1ba628769900019f47066ebfaf3a Mon Sep 17 00:00:00 2001 From: Samyr Silva Tertuliano <147438864+Samyr-Dev@users.noreply.github.com> Date: Sun, 10 May 2026 00:31:13 -0300 Subject: [PATCH 3/3] Update README with improved formatting and emojis --- README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 3a34c0c..58052f6 100644 --- a/README.md +++ b/README.md @@ -2,32 +2,32 @@ Código para enviar o Script inteiro de Shrek ou Bee Movie para seus amigos ou grupos do WhatsApp através do console do navegador. -## Tecnologias +## 🧑‍💻 Tecnologias * JavaScript -## Utilização +## 📖 Utilização 1. Abra o [WhatsApp Web](https://web.whatsapp.com) e faça login na sua conta. 2. Abra a conversa para a qual deseja enviar o script e mantenha a caixa de texto selecionada. 3. Abra o **DevTools** (Ferramentas do Desenvolvedor) utilizando um dos atalhos: `Ctrl + Shift + J`, `Ctrl + Shift + I` ou `F12`. 4. No topo da aba que se abriu, clique em **Console**. -5. Escolha um dos scripts abaixo: - * [shrekSendScript.js](https://github.com/Matt-Fontes/SendScriptWhatsApp/blob/main/shrekSendScript.js) - * [beeMovieSendScript.js](https://github.com/Matt-Fontes/SendScriptWhatsApp/blob/main/beeMovieSendScript.js) +5. Escolha e clique em um dos scripts abaixo: + * [Shrek](https://github.com/Matt-Fontes/SendScriptWhatsApp/blob/main/shrekSendScript.js) + * [Bee Movie](https://github.com/Matt-Fontes/SendScriptWhatsApp/blob/main/beeMovieSendScript.js) 6. Copie todo o conteúdo do arquivo (clique em **Raw** -> `Ctrl + A` -> `Ctrl + C`). 7. No console do WhatsApp Web, cole o código. -> [!IMPORTANT] +> 📍 [!IMPORTANT] > Em atualizações recentes do Google Chrome, pode ser impedido que scripts sejam colados no Console. Para contornar isso, digite `allow pasting` no console e aperte Enter antes de colar o script. 8. Após colar o script, aperte **Enter** para iniciar a execução. -## Atenção +## ⚠️ Atenção Esta ação é **irreversível**. Uma vez iniciado, o script enviará todas as linhas do roteiro automaticamente. -## Contribuidores +## 🧑‍💼 Contribuidores * [Matt-Fontes](https://github.com/Matt-Fontes) (Criador) * [P0sseid0n](https://github.com/P0sseid0n) @@ -35,7 +35,8 @@ Esta ação é **irreversível**. Uma vez iniciado, o script enviará todas as l * [Bulani](https://github.com/Bulani) * [WillFelisberto](https://github.com/WillFelisberto) * [silvan-batistella](https://github.com/silvan-batistella) +* [Samyr](https://github.com/Samyr-Dev) (Eu) -## Contato +## 📱 Contato [![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/samyrtertuliano)