Python | Bot de cumpleaños de whatsapp

¿Alguna vez ha deseado desear automáticamente a sus amigos en sus cumpleaños, o enviar un conjunto de mensajes a su amigo (¡o a cualquier contacto de Whastapp!) automáticamente a una hora preestablecida, o enviar a sus amigos miles de mensajes de texto aleatorios en whatsapp! ¡Usando Browser Automation puedes hacer todo eso y mucho más!
Primero debe instalar estos: – 
1) Enlaces de Python para Selenium (software de automatización del navegador) 
 

pip install selenium

2) Chrome webdriver 
Descargue el controlador de Chrome desde aquí: página de descarga de Chromedriver (elija su versión específica) 

Cómo lo hace el bot

El script utiliza el paquete PySelenium para abrir una ventana del controlador web de Chrome en la que se realizan todas las tareas. Comprueba si la fecha y el mes actuales coinciden con los de un archivo json. En caso afirmativo, se devuelve el atributo ‘nombre’ que se utiliza para encontrar el chat correspondiente en la web de Whatsapp (búsqueda por xpath ). Luego, el script simula hacer clic en el chat, lo abre, escribe el mensaje en el cuadro de chat y simula un clic en el botón Enviar.
 

¿Qué es JSON?

JSON significa Notación de objetos de JavaScript. Es una forma muy simple y ligera de almacenar datos. Aunque se deriva de JavaScript, es independiente del idioma y tiene un aspecto similar a los diccionarios de Python 
. Consulte este artículo para obtener más información sobre JSON.
A continuación se muestra la implementación. 
 

Python3

# get current date in required format
import datetime
 
# store the birthdates of your contacts
import json
  
from selenium import webdriver
  
# add a delay so that all elements of
# the webpage are loaded before proceeding
import time
 
# Global variable Do not use elsewhere
eleNM = None
 
# This function is just to return a
# string of the message required
def wish_birth(name):
    return "Happy Birthday " + name.split(" ")[0] + "!!"
 
# This function returns a list of values of some
# attribute based on conditions on two attributes from the JSON file.
# use to return names of contacts having their birthday on current date.
def getJsonData(file, attr_ret, attr1, attr2, attr_val1, attr_val2):
     
    # Load the file's data in 'data' variable
    data = json.load(file)
    retv =[]
 
    # If the attributes' value conditions are satisfied,
    # append the name into the list to be returned.
    for i in data:
        if(i[attr1]== attr_val1 and i[attr2]== attr_val2):
           retv.append(i[attr_ret])
    return retv
 
# Opening the JSON file (birthdays.json) in read only mode.
data_file = open("birthdays.json", "r")
namev =[]
print("Script Running")
 
# This will keep rerunning the part of
# the code from 'while True' to 'break'.
# use to keep waiting for the JSON function
# to return a non empty list.
# In practice, this function will keep rerunning at
# 11:59pm a day before the birthday and break out at 12:00am.
while True:
    try:
        # to get current date
        datt = datetime.datetime.now()
        namev = getJsonData(data_file, "name", "birth_month", "birth_date",
                                           str(datt.month), str(datt.day))
 
    except json.decoder.JSONDecodeError:
        continue
    if(namev !=[]):
        break
 
# ChromeOptions allows us use the userdata of chrome
# so that you don't have to sign in manually everytime.
chropt = webdriver.ChromeOptions()
 
# adding userdata argument to ChromeOptions object
chropt.add_argument("user-data-<LOCATION TO YOUR CHROME USER DATA>")
 
# Creating a Chrome webdriver object
driver = webdriver.Chrome(executable_path ="<LOCATION TO CHROME WEBDRIVER>",
                                                          options = chropt)
driver.get("https://web.whatsapp.com/")
 
# delay added to give time for all elements to load
time.sleep(10)
 
print(namev)
 
# Finds the chat of your contacts (as in the namev list)
for inp in namev:
    try:
        eleNM = driver.find_element_by_xpath('//span[@title ="{}"]'.format(inp))
    except Exception as ex:
        print(ex)
        continue
    # Simulates a mouse click on the element
    eleNM.click()
 
    while(True):
        # Finds the chat box element
        eleTF = driver.find_element_by_class_name("_13mgZ")
        # Writes the message(function call to wish_birth())
        eleTF.send_keys(wish_birth(inp))
        # Finds the Send button
        eleSND = driver.find_element_by_class_name("_3M-N-")
        # Simulates a click on it
        eleSND.click()
        break

Cómo se ve el archivo JSON
 

[
  {
    "name": "NAME1",
    "birth_month": "1",
    "birth_date": "12"
  },
  {
    "name": "NAME2",
    "birth_month": "5",
    "birth_date": "15"
  }

]

Publicación traducida automáticamente

Artículo escrito por RuturajM y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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