Blog

Postado em em 27 de agosto de 2022

Envio Automático de Mensagem no WhatsApp Usando o Python

Hoje eu vou te mostrar o envio automático de mensagem no WhatsApp de uma forma completa utilizando o Python!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Envio Automático de Mensagem no WhatsApp Usando o Python

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Envio Automático de Mensagem no WhatsApp

Você provavelmente já precisou enviar mensagem com Python para deixar sua automação mais completa não é mesmo?

A ideia da aula de hoje é te mostrar como enviar mensagens com anexo no WhatsApp além das mensagens comuns!

Envio de Mensagens com Python

Antes de iniciar a aula é importante ressaltar que o WhatsApp não gosta de automações que não sejam com a sua própria API.

Então é importante que você tome cuidado com o que está fazendo, nós estamos apenas ensinando como fazer essa automação, mas como você vai usar é responsabilidade sua.

É possível até que tenha seu número bloqueado dependendo de como você utilizar essa automação com Python.

Outro ponto importante é que nessa aula nós vamos utilizar o Selenium, então é importante que já tenha um conhecimento sobre a ferramenta.

Caso ainda não saiba o que é ou não tem muito conhecimento basta clicar aqui que temos um post falando mais sobre ele e mostrando as configurações.

Cuidados com a automação
Cuidados com a automação

Aqui temos alguns cuidados que você precisa tomar, já falamos sobre isso, mas é sempre bom relembrar, pois pode gerar problemas para quem está utilizando.

Para construir esse código de envios com Python integrando com WhatsApp nós vamos utilizar 3 blocos de códigos.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time

navegador = webdriver.Chrome()
navegador.get("https://web.whatsapp.com")

# esperar a tela do whatsapp carregar
while len(navegador.find_elements(By.ID, 'side')) < 1: # -> lista for vazia -> que o elemento não existe ainda
    time.sleep(1)
time.sleep(2) # só uma garantia

Nesse primeiro código vamos fazer a importação das bibliotecas que serão utilizadas, depois vamos abrir o navegador, vamos abrir o site do whatsapp web.

Em seguida temos 2 pontos importantes, iniciando a estrutura de repetição while, para garantir que a tela do WhatsApp web carregou.

Aqui estamos procurando a lista lateral onde você tem seus contados, então se ela não estiver lá é porque a página ainda não carregou.

IMPORTANTE: Isso quer dizer que aqui você vai ter tempo suficiente para poder utilizar o QR Code para abrir o seu WhatsApp, já que por padrão o navegador que é aberto não tem suas informações gravadas.

Vamos agora para o segundo bloco de código!

# o whatsapp já carregou
import pandas as pd

tabela = pd.read_excel("Envios.xlsx")
display(tabela[['nome', 'mensagem', 'arquivo']]) # tem também uma coluna telefone dentro da tabela

Essa parte é após o WhatsApp carregar, ou seja, após você ler o QR Code para abrir o seu WhatsApp no computador.

Aqui vamos utilizar a biblioteca pandas para abrir o nosso arquivo Envios.xlsx que contém os nomes, as mensagens, os anexos e os números de telefones para quais vamos automatizar as mensagens.

Arquivo de contatos e mensagens
Arquivo de contatos e mensagens

Aqui você vai poder colocar o nome dos seus contatos, pode personalizar a mensagem que será enviada.

Já na coluna arquivo, se você não tiver nenhum anexo a ser enviado pode deixar o N, caso contrário pode colocar o nome do arquivo já com a extensão do arquivo.

Carregando e visualizando as informações do arquivo de Envios
Carregando e visualizando as informações do arquivo de Envios

Então dentro do código vamos ter a visualização dessas informações para que possamos utilizá-las para o envio das mensagens.

Agora vamos para o último bloco de código, que é o bloco onde de fato vamos fazer os envios de mensagens e anexos!

import urllib
import time
import os

for linha in tabela.index:
    # enviar uma mensagem para a pessoa
    nome = tabela.loc[linha, "nome"]
    mensagem = tabela.loc[linha, "mensagem"]
    arquivo = tabela.loc[linha, "arquivo"]
    telefone = tabela.loc[linha, "telefone"]
    
    texto = mensagem.replace("fulano", nome)
    texto = urllib.parse.quote(texto)

    # enviar a mensagem
    link = f"https://web.whatsapp.com/send?phone={telefone}&text={texto}"
    
    navegador.get(link)
    # esperar a tela do whatsapp carregar -> espera um elemento que só existe na tela já carregada aparecer
    while len(navegador.find_elements(By.ID, 'side')) < 1: # -> lista for vazia -> que o elemento não existe ainda
        time.sleep(1)
    time.sleep(2) # só uma garantia
    
    # você tem que verificar se o número é inválido
    if len(navegador.find_elements(By.XPATH, '//*[@id="app"]/div/span[2]/div/span/div/div/div/div/div/div[1]')) < 1:
        # enviar a mensagem
        navegador.find_element(By.XPATH, '//*[@id="main"]/footer/div[1]/div/span[2]/div/div[2]/div[2]/button/span').click()
        
        if arquivo != "N":
            caminho_completo = os.path.abspath(f"arquivos/{arquivo}")
            navegador.find_element(By.XPATH, 
                                   '//*[@id="main"]/footer/div[1]/div/span[2]/div/div[1]/div[2]/div/div/span').click()
            navegador.find_element(By.XPATH, 
                                   '//*[@id="main"]/footer/div[1]/div/span[2]/div/div[1]/div[2]/div/span/div/div/ul/li[4]/button/input').send_keys(caminho_completo)
            time.sleep(2)
            navegador.find_element(By.XPATH, 
                                   '//*[@id="app"]/div/div/div[2]/div[2]/span/div/span/div/div/div[2]/div/div[2]/div[2]/div/div').click()
            
        time.sleep(5)

Inicialmente vamos fazer a importação das bibliotecas, em seguida vamos utilizar a estrutura de repetição for para que o nosso código seja repetido para todas as informações da nossa tabela.

Isso quer dizer que se tivermos 5 nomes o código será repetido 5 vezes, então independente da quantidade que colocar o código será repetido quantas vezes forem necessárias para fazer todos os envios.

IMPORTANTE: Novamente é bom tomar cuidado para quantas pessoas você faz esse envio automático para evitar com que você tome bloqueio no seu WhatsApp.

Depois de iniciar a nossa estrutura de repetição nós vamos armazenar as informações do nosso primeiro contato dentro das variáveis nome, mensagem, arquivo e telefone.

Em seguida nós temos a substituição do nome “fulano” na nossa mensagem para que você não tenha que ficar escrevendo manualmente o nome de cada pessoa.

Então dentro da mensagem nós temos fulano e no código vamos substituir esse texto pelo nome de cada contato.

Feito isso vamos fazer a criação do link, que nesse caso vamos utilizar o modelo do link abaixo:

link = f”https://web.whatsapp.com/send?phone={telefone}&text={texto}”

Com esse modelo de link nós vamos conseguir abrir uma página do WhatsApp Web na conversa com o contato com base no telefone, e já vamos ter o texto escrito!

Mensagem já na caixa de texto do WhatsApp
Mensagem já na caixa de texto do WhatsApp

Então a mensagem já fica escrita na sua caixa de texto, só faltando fazer o envio.

Sabendo disso nós podemos começar com a estrutura para o envio das mensagens. Vamos abrir o link já com as informações do contato.

OBS: Aqui novamente vamos esperar para que o WhatsApp carregue para que o código funcione normalmente.

Em seguida nós vamos verificar se o número é inválido ou não, pois quando o número é inválido o WhatsApp vai retornar uma espécie de erro.

Erro de número inválido
Erro de número inválido

Então vamos verificar com o xpath se temos esse elemento aparecendo, se encontrar é porque o número é inválido, caso contrário é um número válido e podemos enviar a mensagem.

OBS: Se você ainda não sabe como pegar o xpath de um elemento, que nada mais é do que o caminho (endereço) desse elemento, basta dar uma olhada rápida nesse nosso outro post para que você consiga buscar esse caminho, pois se estiver utilizando um navegador diferente é possível que tenha alguma diferença nesse caminho.

Feita essa verificação e o envio da mensagem de texto nós vamos verificar se a coluna de arquivo é diferente de N para saber se temos ou não um anexo a ser enviado.

Caso a coluna seja igual a N é porque não temos anexo então não temos mais nada a fazer. Vamos partir para o próximo contato.

Agora se o arquivo for diferente de N nós vamos utilizar novamente o xpath para encontrar e depois clicar nos botões para anexar o arquivo.

Então vamos clicar no botão de anexo, depois clicar no botão de arquivo (dentro das opções de anexo).

Depois nós vamos colocar o nome do arquivo dentro da caixa do nome do arquivo, assim não precisamos buscar o arquivo, então já podemos colocá-lo com o caminho completo.

Que nesse caso é a pasta arquivo + o nome do arquivo, pois temos essa pasta dentro da mesma pasta do nosso código.

Por fim vamos clicar no botão de enviar, pois até o momento o arquivo está na tela do WhatsApp pronto para ser enviado.

Pronto! Agora você já consegue enviar mensagens automáticas pelo WhatsApp com Python inclusive mensagens com anexo!

Conclusão – Envio Automático de Mensagem no WhatsApp

Nessa aula eu te mostrei como fazer o envio de mensagens pelo WhatsApp com Python de forma automática.

Você pode fazer o envio de mensagens de texto e ainda pode incluir anexos caso precise. Agora já pode criar sua lista de contatos para os quais vai enviar as mensagens e disparar de forma automática para todos eles.

Só tome cuidado como vai fazer o uso dessa automação, pois o WhatsApp não gosta de automações que não seja a dele, então use com sabedoria para não ter seu número bloqueado.

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador