A modern Python library for automating WhatsApp Web using Playwright
Project description
WhatsPlay 🚀
Automatización avanzada de WhatsApp Web usando Playwright, Python y visión por computadora (OpenCV).
Permite interactuar con mensajes no leídos, autenticar mediante código QR, y realizar acciones complejas a través de eventos personalizados y filtrado de mensajes.
🧠 Descripción
WhatsPlay es una librería modular diseñada para automatizar WhatsApp Web desde Python. La arquitectura está inspirada en el patrón de eventos y la separación de responsabilidades, con módulos independientes para autenticación, interacción con la UI, lógica base, y procesamiento de imágenes.
✨ Características principales
- Automatización de navegador con Playwright para máxima compatibilidad
- extraccion automática de QR sin intervención manual
- Sistema de eventos personalizado para manejo asíncrono de mensajes
- Detección inteligente de mensajes no leídos
- Arquitectura modular con separación clara de responsabilidades
🖼️ Arquitectura del sistema
La arquitectura modular permite:
- Escalabilidad: Fácil adición de nuevas funcionalidades
- Mantenibilidad: Componentes independientes y bien definidos
- Testabilidad: Cada módulo puede probarse por separado
- Reutilización: Los módulos pueden usarse en otros proyectos
🚀 Instalación
Prerrequisitos
- Python 3.8 o superior
Instalación desde PyPI
pip install whatsplay
🧪 Ejemplos de uso
Uso básico
from whatsplay import WhatsAppClient
# Crear cliente
client = WhatsAppClient()
# Handler para mensajes no leídos
@client.on_unread_chat
def handle_unread(chats):
print("chat name: ", chats[0]['name'])
success = await client.send_message(chats[0]['name'], "Hello!")
if success:
print("✅ Mensaje enviado con éxito")
else:
print("❌ Falló el envío del mensaje")
# Iniciar cliente
client.run()
📁 Estructura del proyecto
whatsplay/
├───examples
│ simple_example.py
│ test_client.py
│ test_main_loop.py
│
└───src
└───whatsplay
│ base_client.py
│ client.py
│ event.py
│ utils.py
│ wa_elements.py
│ __init__.py
│
├───auth
│ auth.py
│ local_profile_auth.py
│ no_auth.py
│ __init__.py
│
├───constants
│ locator.py
│ states.py
│
├───events
│ event_handler.py
│ event_types.py
│ __init__.py
│
└───filters
message_filter.py
__init__.py
📦 Dependencias
Principales
playwright- Automatización de navegadoropencv-python- Procesamiento de imágenes (opcional)pillow- Manipulación de imágenesrequests- Cliente HTTP
Desarrollo
pytest- Framework de testingblack- Formateador de códigoflake8- Lintermypy- Verificación de tipos
🤝 Contribuciones
Las contribuciones son bienvenidas. Por favor:
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/nueva-funcionalidad) - Commit tus cambios (
git commit -am 'Agrega nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Abre un Pull Request
Guías de desarrollo
- Sigue PEP 8 para el estilo de código
- Actualiza la documentación cuando sea necesario
- Usa type hints en todas las funciones públicas
📋 Roadmap
- [✅] Soporte para mensajes multimedia (imágenes, videos, audios)
- [✅] MessageFilter
❓ FAQ
¿Es seguro usar WhatsPlay? WhatsPlay utiliza WhatsApp Web oficial, por lo que es tan seguro como usar WhatsApp en tu navegador.
¿Puede ser detectado por WhatsApp? WhatsPlay simula interacciones humanas normales, pero siempre existe un riesgo al automatizar servicios web, hagalo bajo su propia responsabilidad.
¿Funciona en servidores sin GUI? Sí, usando el modo headless de Playwright.
🐛 Reporte de bugs
Si encuentras un bug, por favor abre un issue incluyendo:
- Descripción del problema
- Pasos para reproducirlo
- Versión de Python y dependencias
- Logs relevantes
🤝 Agradecimientos
Este proyecto está inspirado y utiliza partes del código de RedShot, licenciado bajo la licencia Apache 2.0.
📄 Licencia
Este proyecto está licenciado bajo la Licencia Apache 2.0.
Copyright 2025 WhatsPlay
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Consultá el archivo LICENSE para más información.
⭐ Star este proyecto si te resulta útil
Made with ❤️ by [Markbusking]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file whatsplay-1.7.3.tar.gz.
File metadata
- Download URL: whatsplay-1.7.3.tar.gz
- Upload date:
- Size: 31.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39606edc814b538455e0d16e08cb3c77a1ec7a1e4bb22bf7727b8d4d09b231df
|
|
| MD5 |
5e1a662ac0f48fba4b84edec4be80e54
|
|
| BLAKE2b-256 |
8996231a3af816ecb30ae1ef8480dfc86ce03e2824f55ca9126f725da6e6e091
|
File details
Details for the file whatsplay-1.7.3-py3-none-any.whl.
File metadata
- Download URL: whatsplay-1.7.3-py3-none-any.whl
- Upload date:
- Size: 32.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
df3db286fecb0be65d07637c6378f393014aafd0e83ac1b245dffaabf1e9ef07
|
|
| MD5 |
c905f79febc311450b7cc462961065d0
|
|
| BLAKE2b-256 |
e975f15d7fd3b97b4b54135270899551b9e432a92293291b425a4ca2b4ee74da
|