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.
A | B | C |
Mensaje | Hola {}, este es un mensaje de prueba | |
RutaAdjunto | C:\Users\xxxxxx\Pictures\imagen.jpg | |
3334445566 | Nombre contacto | |
3334445566 | Nombre contacto | |
3334445566 | Nombre contacto | |
3334445566 | Nombre 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!!