10bfb846a8
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.1 KiB
4.1 KiB
name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params_schema, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | uses_functions | uses_types | returns | returns_optional | error_type | imports | params_schema | tested | tests | test_file_path | file_path | |||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| whatsapp_open_chat | function | py | browser | 1.0.0 | impure | def whatsapp_open_chat(name: str, *, port: int = 9222, target_url_substr: str = 'whatsapp', wait_s: float = 1.3) -> dict | Abre un chat de WhatsApp Web por su nombre exacto en una pestana ya logueada del navegador diario via CDP, sin abrir ventana nueva ni darle foco. Busca por nombre, localiza el chat por su ancla estable span[title] dentro de #side, hace click de raton real y verifica que abrio leyendo el aria-label del composer. Base de whatsapp_read_chat y whatsapp_send_message. |
|
|
false | error_go_core |
|
|
true |
|
python/functions/browser/whatsapp_open_chat_test.py | python/functions/browser/whatsapp_open_chat.py |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from browser.whatsapp_open_chat import whatsapp_open_chat
# Requiere WhatsApp Web abierto y logueado en un Chrome lanzado con
# --remote-debugging-port=9222.
res = whatsapp_open_chat("NOTAS WASAP")
print(res)
# -> {"opened": True,
# "name": "NOTAS WASAP",
# "composer_label": "Escribir un mensaje para el grupo NOTAS WASAP",
# "coords": {"x": 180, "y": 240}}
O directo por CLI: python3 python/functions/browser/whatsapp_open_chat.py "NOTAS WASAP".
Cuando usarla
Cuando necesites abrir un chat concreto de WhatsApp Web antes de leerlo
(whatsapp_read_chat) o de enviar un mensaje (whatsapp_send_message). Es el paso
base de ambas: el chat tiene que estar abierto (composer apuntando a el) para que las
otras funciones operen sobre la conversacion correcta. Util para automatizar el
navegador diario sin abrir ventana nueva ni robar el foco al usuario.
Gotchas
- Viola los ToS de WhatsApp: automatizar la web tiene riesgo de ban del numero. Usar con cautela y bajo tu responsabilidad.
- El
namedebe ser EXACTO (match exacto despan[title]). Nombres ambiguos (varios chats que matchean) abren el primero que aparezca en la lista. - El buscador no filtra de forma fiable contactos NO cargados en la lista lateral: funciona para chats recientes/visibles. Un contacto sin chat reciente puede no aparecer (limitacion conocida; futura mejora: scroll en la lista lateral antes de buscar).
- Usa click de raton real (
cdp_click_xy). Unelement.click()JS NO abre el chat porque los handlers de React no reaccionan a eventos sinteticos del DOM. - Funciona con la ventana minimizada o sin foco: CDP opera la pestana sin necesidad de que Chrome este en primer plano.
Escapeno limpia el buscador: el texto se acumula entre llamadas. La funcion haceinput.select()+Backspaceantes de teclear el nombre nuevo.- Si el ancla existe pero esta fuera del viewport (
b.y<0o ancho 0), devuelveopened=Falseconreason="chat fuera de viewport (scroll necesario)"en vez de clicar a ciegas.