Automatizar WhatsApp

Quizás te has preguntado si es posible automatizar el envío de mensajes por medio de WhatsApp. En este tutoría te muestro una manera de hacerlo.

Para este caso vamos automatizar el envío de un mensaje personalizado con una imagen, archivo o video. Par esto vamos a utilizar python como lenguaje de programación y utilizaremos ademas autoit y selenium.

Comencemos entonces…

Instala Python en tu computadora dede el link oficial https://www.python.org, luego utiliza el editor de tu gusto como https://www.sublimetext.com, https://atom.io, https://code.visualstudio.com. etc.

Ahora debes instalar las siguientes herramientas, para ello vamos a hacer uso de powershell o linea de comando, donde ejecutaremos los siguientes comandos.

pip install selenium

pip install pandas

pip install xlrd

pip install -U pyautoit

pip install easygui

pip install XlsxWriter

Ahora puedes tomar el código que dejo a continuación. es importante que tengas en cuenta que la fuente de información en este caso es un archivo de excel, en este archivo de excel vamos a relacionar el mensaje que queremos enviar, donde {} va a ser el nombre del contacto, también vamos a relacionar el archivo que queremos enviar, y los numero y nombres de los contactos.

El esquema del archivo de excel debe ser el siguiente, debe estar en la hoja “Hoja1” en el archivo “Prueba.xlsx” dentro de la ruta del proyecto.

ABC
MensajeHola {}, este es un mensaje de prueba
RutaAdjuntoC:\Users\xxxxxx\Pictures\imagen.jpg
3334445566Nombre contacto
3334445566Nombre contacto
3334445566Nombre contacto
3334445566Nombre contacto

Luego de que el proceso se ejecute, automáticamente se asignará el mensaje “Se envió mensaje” el frente de cada contacto.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import time
import datetime
import os
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import autoit
import easygui as eg
import xlsxwriter
import os.path as path
import sys

nombreArchivoBaseDeDatos = "BaseDeDatos.xlsx"
try:
    df = pd.read_excel(nombreArchivoBaseDeDatos, 'Hoja1')

    mensaje = str(df['B'][0])
    rutaAdjunto = str(df['B'][1])
    print(mensaje,rutaAdjunto)
    if not path.exists(rutaAdjunto):
        raise Exception("El archivo adjunto no existe (" + rutaAdjunto + ")")
    
    driver = webdriver.Chrome('chromedriver.exe')
    driver.implicitly_wait(30)
    driver.get('https://web.whatsapp.com/')
    driver.maximize_window()

    eg.msgbox("Ingrese el código QR, y espere hasta que cargue la aplicación para continuar.","QR","Ok")

    time.sleep(3)

    for i in df.index:
        if i>1 and not (df['C'][i] == "Se envió mensaje" or df['C'][i] =="No se ecnontro contacto"):
            try:
                telefono = '+57'+str(df['A'][i])
                nombre = str(df['B'][i])
                print(telefono + ' | ' + nombre)
                
                # Abrir una nueva conversación
                driver.find_element_by_xpath('//span/div[2]/div/span').click()
                cajaBusqueda = driver.find_element_by_xpath('//label/div/div[2]')
                time.sleep(0.5)
                cajaBusqueda.send_keys(telefono)
                time.sleep(1.5)        

                # Validar si nuero existe
                driver.implicitly_wait(5)
                selectorMensajeDeResultado = driver.find_elements_by_xpath('//div[2]/div/div/span')
                textoMensajedeResultado = selectorMensajeDeResultado[0].text
                print(textoMensajedeResultado)
                if "No se encontraron resultados para" in textoMensajedeResultado:
                    time.sleep(0.5)
                    #Cerrar el cajón de búsqueda
                    driver.find_elements_by_xpath('//button/span')[0].click()
                    time.sleep(0.5)
                    df['C'][i] = "No se ecnontro contacto"
                    driver.implicitly_wait(30)
                    cajaBusqueda.clear()
                    print("No se ecnontro contacto")
                    raise Exception("No se ecnontro contacto")
                cajaBusqueda.send_keys(Keys.ENTER)
                time.sleep(1)
                driver.implicitly_wait(30)
                    

                # Attachment Drop Down Menu
                clipButton = driver.find_element_by_xpath('//*[@id="main"]/header/div[3]/div/div[2]/div/span')
                time.sleep(0.5)
                clipButton.click()
                time.sleep(0.5)

                # To send Videos and Images.
                mediaButton = driver.find_element_by_xpath('//*[@id="main"]/header/div[3]/div/div[2]/span/div/div/ul/li[1]/button')
                time.sleep(1)
                mediaButton.click()

                # Escribir la ruta del adjunto
                autoit.win_wait( "Abrir", 30)
                time.sleep(1)
                autoit.win_active("Abrir") 
                # Este comando es para escribir todo el texto al instante
                autoit.control_set_text("Abrir","Edit1",rutaAdjunto)
                # Este comando es para escribir digito por digito
                #autoit.control_send("Abrir","Edit1",rutaAdjunto) 
                time.sleep(1)
                autoit.control_send("Abrir","Edit1","{ENTER}")
                time.sleep(1)

                # Clic to send image
                time.sleep(0.5)
                whatsapp_send_button = driver.find_element_by_xpath('//*[@id="app"]/div/div/div[2]/div[2]/span/div/span/div/div/div[2]/span/div/div')
                # Selector antiguo
                #'//*[@id="app"]/div/div/div[2]/div[2]/span/div/span/div/div/div[2]/span[2]/div/div/span')
                time.sleep(0.9)
                whatsapp_send_button.click()
                time.sleep(0.5)

                # Escribir mensaje
                cajonEscribeMensaje = driver.find_element_by_xpath('//*[@id="main"]/footer/div[1]/div[2]/div/div[2]')
                                                                  #'//*[@id="main"]/footer/div/div[2]/div/div[2]'
                                                                   
                time.sleep(0.5)
                cajonEscribeMensaje.send_keys(mensaje.format(nombre.split(" ")[0]))
                time.sleep(0.5)
                cajonEscribeMensaje.send_keys(Keys.ENTER)
                time.sleep(0.5)

                df['C'][i] = "Se envió mensaje" 
            except Exception as err:
                print(str(err))
                print("Error")

except Exception as errorConocido:
    eg.msgbox("Error: " + str(errorConocido),"Fin","Ok")

finally:
    writer = pd.ExcelWriter(nombreArchivoBaseDeDatos) #, engine='xlsxwriter'
    df.to_excel(writer, 'Hoja1', index=False)
    writer.save()

eg.msgbox("Finalizó el proceso","Fin","Ok")

Deja tus comentarios y aportes. Espero sea de ayuda.

Saludos!!

Publicado en RDA

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *