Henry
3 min read

3198 vistas
#python #selenium #whatsapp #bot

compartir:

Hola Pythoniano(a), hoy crearemos un bot para automatizar algunas funciones de Whatsapp, como enviar mensajes a tus contactos, o usarlo como notificaciónes, hay muchas ideas. ;)

¿QUÉ ES SELENIUM?

Selenium es un entorno de pruebas que se utiliza para comprobar si el software que se está desarrollando funciona correctamente. Esta herramienta permite: grabar, editar y depurar casos de pruebas que se pueden automatizar. Lo interesante de Selenium es que se puede editar acciones o crearlas desde cero.

CARACTERÍSTICAS DE SELENIUM

INSTALACIÓN

Antes de empezar necesitaremos instalar chromedriver
(servidor que se conecta con nuestro navegador Chrome para automatizar pruebas,
puedes descargar la versión compatible con tu navegador web y sistema operativo:
chromedriver

PREPARANDO EL ENTORNO VIRTUAL

Abrimos una consola o terminal (Linux, Windows ó Mac )

        

   # creamos la carpeta bot-whatsapp
   $ mkdir  bot-whatsapp

   # ingresamos en la carpeta
   $ cd  bot-whatsapp

   # instalamos el generador de entornos virtualenv
   $ pip install virtualenv

   # creamos el entorno virtual "bot-whatsapp"
   $ virtualenv  bot-whatsapp

   # en Linux o Mac activamos el entorno con el comando:
   $ source bot-whatsapp/bin/activate

   # en Windows activamos el entorno con el comando:
   $ .\bot-whatsapp\Scripts\activate

   # instalamos  Selenium dentro del entorno
   (bot-whatsapp)$ pip install selenium

        
    

CREAMOS EL MODULO bot_whatsapp.py

Importamos las siguientes librerias:

        
    from time import sleep
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import WebDriverWait

        
    

Creamos la clase BotWhatsapp con su inicializador y algunos atributos.

        

    class BotWhatsapp:
        def __init__(self):
            self.path_driver = '/usr/local/bin/chromedriver'
            self.base_url = 'https://web.whatsapp.com/'
            self.timeout = 30
            self.set_paths()

        
    

Bien ahora definimos el método set_paths() con los siguientes atributos.

        

    def set_paths(self):
        self.base_input = '._3FRCZ'
        self.firs_contact = '//*[@id="pane-side"]/div[1]/div/div/div[1]'
        self.base_sent = '/html/body/div/div/div/div[4]/div/footer/div[1]/div[2]/div/div[2]'

        
    

Luego creamos el método start_browser() básicamente lo que hace
es configurar el browser que usaremos , que será google chrome y algunos parámetros extras , recuerda que ahí le seteo la variable self.path_driver que es la ruta de tu servidor chromedriver.

        

    def start_browser(self):
         options = webdriver.ChromeOptions()
         options.add_argument('--disable-infobars')
         options.add_argument('--disable-extensions')
         options.add_argument('--profile-directory=Default')
         options.add_argument("--disable-plugins-discovery")

         self.browser = webdriver.Chrome(executable_path=self.path_driver,
                                         chrome_options=options)
         self.browser.get(self.base_url)
         try:
             WebDriverWait(self.browser, self.timeout).until(
                 EC.presence_of_element_located(
                 (By.CSS_SELECTOR, self.base_input)))
             return True
         except Exception as e:
             print(e)
             return False

        
    

Hola!, revisa nuestro curso "Desarrolla Aplicaciones de voz con Alexa" esta genial!!

curso selenium como un ninja

Continuamos creando el metodo send_message_to_contact() donde le pasamos los argumentos contacto y mensaje con el siguiente proceso:

¿Genial verdad?

        
    def send_message_to_contact(self, contact, message):
        start = self.start_browser()
        if not start:
            return False

        user_search = self.search_user_or_group(contact)
        if not (user_search or contact or message):
            return False
        message = message.strip()
        try:
            send_msg = WebDriverWait(self.browser, self.timeout).until(
                EC.presence_of_element_located(
                (By.XPATH, self.base_sent)))
        except Exception as e:
            print(e)
            return
        messages = message.split("\n")
        for msg in messages:
            send_msg.send_keys(msg)
            send_msg.send_keys(Keys.SHIFT + Keys.ENTER)
            sleep(1)
        send_msg.send_keys(Keys.ENTER)
        print('mensaje enviado.')
        return True

        
    

El método final search_user_or_group()
para seleccionar el contacto que le pasamos.

         

     def search_user_or_group(self, contact):
         search = self.browser.find_element_by_css_selector(self.base_input)
         search.clear()
         search.send_keys(contact)
         try:
             vali_ = WebDriverWait(self.browser, 5).until(
                 EC.presence_of_element_located(
                 (By.XPATH, self.firs_contact)))
             if vali_.is_displayed():
                 search.send_keys(Keys.ENTER)
                 return True
         except Exception as e:
             print(e)
             print('No se encontro contacto.')
         return False

         
     

EJECUTANDO NUESTRO BotWhatsapp

Entonces la mejor parte, cuando ejecutamos nuestro bot malicioso (no usarlo para fines de spam, please) :D

        

    obj = BotWhatsapp()
    obj.send_message_to_contact('100000000', 'Hola, Bro)

        
    

Puedes decargar el codigo completo aqui:
Código BotWhatsapp

Genial si completaste el post!,
seguro que te sera muy útil este contenido en alguno de tus proyectos
Hasta pronto Pythoniano!

Now is better than never

Hola!, revisa nuestro curso "Desarrolla Aplicaciones de voz con Alexa" esta genial!!

curso selenium como un ninja