- La automatización con Selenium permite controlar WhatsApp Web como si fuera un usuario real, enviando mensajes predefinidos a contactos de forma masiva.
- Un buen diseño en POO (por ejemplo, con una clase WhatsAppBot) facilita la encapsulación de la lógica, la reutilización del código y el mantenimiento del bot.
- La fiabilidad del bot depende de selectores correctos (XPATH, CSS), de la gestión de tiempos de carga y de mantener activa la sesión de WhatsApp Web.
- Python y C# pueden usarse con Selenium para integrar el envío de mensajes en proyectos más grandes o en plataformas de automatización externas.
Si alguna vez has pensado “ojalá WhatsApp pudiera gestionar solo los pedidos, las listas de la compra o los recordatorios sin que yo tenga que estar pendiente”, estás en el sitio adecuado. Cada vez más desarrolladores y personas curiosas se animan a crear su propio bot en WhatsApp Web usando Selenium, y es muy habitual encontrarse con problemas como que el script dice que ha enviado el mensaje… pero en la conversación no aparece nada.
En las siguientes líneas vamos a ver cómo funciona la automatización de un bot de WhatsApp con Selenium, qué utilidades reales tiene, cómo se estructura un proyecto típico, qué errores comunes pueden provocar que el mensaje “se envió” en la terminal pero no llegue al chat, y cómo puedes montar tu propio bot paso a paso tanto en Python como en C#. Todo con un lenguaje claro, cercano y con apuntes prácticos para que puedas adaptar la idea a tus propias necesidades.
Qué es Selenium y por qué sirve para automatizar WhatsApp Web
Selenium es una herramienta de automatización de navegadores que permite controlar de manera programada lo que haría un usuario humano: abrir una página, hacer clic en botones, escribir en campos de texto, leer información, moverse entre secciones y, en general, simular interacciones reales con una web. Es extremadamente popular en el mundo del testing de software, pero también se usa mucho para automatizar tareas repetitivas en cualquier sitio web.
Cuando trabajas con Selenium WebDriver, tu script actúa como un “mando a distancia” del navegador. Indicas a qué URL ir, qué elementos localizar (por XPATH, CSS selector, id, nombre, etc.) y qué acción realizar sobre ellos: escribir texto, hacer clic, enviar formularios, desplazar la página, o extraer datos. En el caso de WhatsApp Web, esta capacidad se aprovecha para automatizar el envío de mensajes, la gestión de contactos o incluso la verificación de códigos de registro.
Aplicado a WhatsApp Web, Selenium permite crear bots que escriben mensajes predefinidos a contactos concretos, sin necesidad de tocar el teléfono. El navegador se abre, carga web.whatsapp.com, se inicia sesión (normalmente escaneando el código QR la primera vez) y, a partir de ahí, el programa puede abrir chats, escribir mensajes, pulsar el botón de enviar y repetir el proceso con tantos contactos como necesites.
El enfoque tiene una ventaja importante: no dependes de APIs oficiales ni bibliotecas externas no soportadas, porque simplemente estás automatizando la versión web tal y como la usarías a mano. Eso sí, hay que tener en cuenta posibles cambios en la interfaz de WhatsApp Web, ya que si cambian los selectores o la estructura HTML, el bot puede dejar de funcionar hasta que actualices el código; consulta WhatsApp Web no carga los mensajes para soluciones habituales.
Principales usos de un bot de WhatsApp con Selenium
Una vez entiendes cómo Selenium controla el navegador, se abre un abanico enorme de posibilidades. Un bot sencillo para WhatsApp Web puede empezar como una prueba de concepto, pero rápidamente se convierte en una herramienta útil para automatizar flujos de trabajo cotidianos.
En el ámbito de las pruebas automatizadas de aplicaciones web, Selenium es un estándar. En el contexto de WhatsApp, puedes usarlo para simular cómo interactúa un usuario con la interfaz: abrir un chat, escribir y mandar mensajes, comprobar que ciertas notificaciones aparecen en pantalla, o que los flujos de comunicación se comportan como esperas cuando integras WhatsApp con otros sistemas.
Otra utilidad muy habitual es la automatización de tareas repetitivas. Imagina que todos los días tienes que enviar recordatorios a un grupo de clientes, confirmar citas o mandar información estándar. En lugar de escribir manualmente una y otra vez, el bot se encarga de abrir la conversación con cada contactoy lanzar un conjunto de mensajes predefinidos con la información que tu decidas. También puedes aprovechar respuestas automáticas en WhatsApp Business según el caso.
El mismo patrón sirve para construir sistemas de comunicación automatizada y marketing. Puedes gestionar una lista de contactos y programar envíos de mensajes promocionales, actualizaciones de estado de un pedido o notificaciones internas de empresa. Aunque WhatsApp tiene políticas estrictas, a nivel técnico el bot actúa como un usuario humano, solo que automatizado. Si buscas alternativas orientadas a empresas, considera la automatización con WhatsApp Business API.
Por último, no hay que olvidar la parte de recopilación de datos. Con Selenium puedes leer el contenido de la página, extraer textos de mensajes, registrar quién responde y cuándo, o incluso combinarlo con análisis externos. Aunque en el ejemplo típico el foco está en enviar mensajes, la misma herramienta permite navegar por webs de terceros, recoger información y procesarla en tu script.
Estructura típica de un bot de WhatsApp con Selenium en Python

Un diseño muy habitual para este tipo de proyecto en Python se basa en Programación Orientada a Objetos (POO), encapsulando toda la lógica de interacción con WhatsApp Web en una clase específica. De esta forma, el código queda más limpio, modular y fácil de mantener.
Lo normal es definir una clase, por ejemplo WhatsAppBot, que se encarga de agrupar la configuración del navegador, el arranque de Selenium, la apertura de WhatsApp Web y los métodos que enviarán mensajes a tus contactos. Así se ocultan los detalles técnicos dentro de la clase, y quien use el bot solo tiene que crear una instancia y llamar a sus métodos públicos.
Dentro de esa clase suele destacar un método como send_messages (o similar), cuyo trabajo principal es iterar por una lista de contactos. Para cada uno, se genera o se abre la URL adecuada de WhatsApp Web, se detecta el cuadro de entrada del mensaje mediante un XPATH u otro selector, se escribe el texto y se simula la pulsación de la tecla Enter o el clic en el botón de envío.
La estructura se completa con un bloque principal del tipo if __name__ == «__main__», donde se instancia la clase WhatsAppBot y se lanza el método que recorre la lista de contactos. Gracias a esta organización, el script puede reutilizarse en otros proyectos o integrarse con sistemas más grandes sin tener que tocar la lógica interna.
Este diseño refleja claramente los principios de la POO: abstracción, encapsulación y modularidad. Abstraes el concepto de “bot de WhatsApp” en una clase única, encapsulas los detalles del navegador y de Selenium dentro de métodos privados o internos, y organizas el código en piezas reutilizables para que puedas adaptar la lógica de envío, los mensajes o el origen de los contactos sin reescribir todo.
Flujo de ejecución: cómo trabaja el bot paso a paso
Detrás de un script que parece simple hay un flujo de ejecución muy claro que conviene entender, sobre todo cuando algo falla (por ejemplo, cuando la consola dice que el mensaje se ha mandado, pero en la app no aparece ningún mensaje enviado).
Todo arranca cuando se crea una instancia de WhatsAppBot (o la clase que hayas definido). En el constructor se inicializa Selenium WebDriver, se configura el navegador (habitualmente Chrome, aunque puedes usar otros) y se abren las opciones necesarias: tamaño de ventana, perfil de usuario, tiempo de espera implícito, etc.
Una vez listo el navegador, se llama al método que envía los mensajes a la lista de contactos. Para cada uno, el bot abre la URL de WhatsApp Web asociada a ese número o accede al chat mediante búsqueda interna. En ese momento es crucial que ya estés logueado en WhatsApp Web; si es la primera vez, tendrás que escanear el código QR manualmente, pero a partir de ahí se puede reutilizar la sesión siempre que no cierres el navegador o el perfil de usuario; si necesitas ver o cerrar sesiones abiertas, revisa ver y cerrar sesiones abiertas.
El siguiente paso es localizar el elemento de entrada de mensaje. Aquí se suele usar un XPATH concreto o un selector CSS. Una vez encontrado, el bot escribe el texto predefinido (o varios textos) y simula la acción de enviar, ya sea con la tecla Enter o activando el botón de envío. Este proceso se repite para todos los contactos de la lista.
Durante la ejecución, el código incorpora gestión de excepciones por si el cuadro de texto no se encuentra, la página tarda demasiado en cargar o ocurre algún problema con el navegador. Al final del recorrido por todos los contactos, se cierran el navegador y la instancia de WebDriver, liberando recursos y dejando todo limpio para una ejecución futura.
Requisitos técnicos para automatizar WhatsApp Web con Python y Selenium
Para levantar un proyecto funcional necesitas cumplir una serie de requisitos básicos de entorno. Por suerte, la mayoría son fáciles de configurar y solo hay que hacerlo una vez.
En primer lugar, debes tener Python 3.x instalado en tu sistema. Cualquier versión moderna suele funcionar bien con Selenium, aunque conviene mantenerse relativamente actualizado para evitar incompatibilidades con dependencias.
El segundo paso es instalar la biblioteca selenium a través de pip. Desde la terminal o línea de comandos basta con ejecutar la orden pip install selenium. Esto descargará e instalará el paquete necesario para controlar el navegador desde Python.
Además de la librería, necesitarás el WebDriver correspondiente a tu navegador (por ejemplo, ChromeDriver si usas Google Chrome). Este archivo actúa como intermediario entre tu script de Python y el navegador, permitiendo que Selenium envíe instrucciones y reciba respuestas.
Por último, es importante contar con una conexión a Internet estable y tener acceso a WhatsApp Web. Lo habitual es que la primera vez que ejecutes el bot se abra el navegador en web.whatsapp.com y tengas que escanear el código QR con tu móvil. Una vez iniciada la sesión, el bot podrá trabajar sobre esa sesión mientras siga activa.
Pasos generales para usar un archivo de automatización de WhatsApp con Selenium
Una vez preparado el entorno, el uso de un script de automatización suele seguir un conjunto de pasos bastante estándar, tanto si has obtenido el código desde un repositorio como si lo has escrito tú mismo.
Lo primero es descargar el archivo con el código fuente o clonar el repositorio donde se encuentra el proyecto. En muchos casos tendrás un archivo principal como main.py, que será el punto de entrada de la aplicación.
Después abres tu editor o IDE favorito (VS Code, PyCharm, etc.) y creas, si hace falta, el archivo .py donde copiarás el código. Si ya viene en un repositorio, simplemente lo abres desde el IDE para poder modificarlo a tu gusto.
Dentro del script vas a encontrar una sección donde se define la lista de contactos. Suele ser una estructura del tipo contacts = . Ahí es donde tienes que añadir las personas a las que deseas enviar los mensajes, respetando el formato que haya definido el desarrollador original.
También tendrás una lista o bloque con los mensajes predefinidos que el bot va a mandar. Es buena idea personalizar estos textos para adaptarlos al caso de uso real: confirmaciones de pedido, avisos de entrega, recordatorios, etc. Cambiando ese listado podrás variar fácilmente el contenido que se enviará a todos los contactos.
Una vez configurados contactos y mensajes, guardas el archivo y lo ejecutas desde la terminal o desde el propio IDE. El navegador se abrirá, cargará WhatsApp Web y, tras asegurarte de que estás logueado, observarás cómo el bot automatiza el proceso de envío de mensajes a cada contacto de la lista una y otra vez.
Ejemplo de proyecto en Python: main.py y personalización
Muchos repositorios que muestran cómo automatizar WhatsApp Web con Selenium se estructuran alrededor de un archivo principal, habitualmente llamado main.py, que contiene la lógica básica del bot. Sobre esa base puedes realizar ajustes y mejoras según tus necesidades.
En este tipo de proyectos, el archivo principal suele encargarse de cargar la lista de contactos, inicializar el bot (la instancia de la clase que controla Selenium) y lanzar el método que envía los mensajes. La lista de contactos puede estar codificada directamente en el script o provenir de un archivo externo, pero en muchos ejemplos se presenta directamente en el código para simplificar.
Si quieres cambiar el comportamiento, basta con editar main.py para añadir o quitar contactos, modificar los textos a enviar o incluso introducir nuevas funciones, como registrar en un log qué mensajes se han mandado con éxito y en qué momento, o manejar listas de espera para reintentos.
Este enfoque hace realmente sencillo experimentar: puedes empezar con un bot mínimo que solo envía uno o dos mensajes a un par de números de prueba, y luego ir complicando la lógica poco a poco. A medida que vayas ganando confianza, puedes integrar el bot con bases de datos, sistemas externos o APIs de terceros que generen el contenido del mensaje automáticamente; por ejemplo, aprender a crear un chatbot con ChatGPT API puede ser útil para generar respuestas dinámicas.
Además, el hecho de que muchos proyectos sean de código abierto anima a que cualquiera pueda contribuir con mejoras, correcciones o nuevas funcionalidades. Si encuentras una forma más robusta de seleccionar elementos, gestionas mejor los tiempos de espera o añades compatibilidad con más navegadores, puedes compartir esos cambios para ayudar a otros desarrolladores.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.