Files
fn_registry/python/functions/browser/cdp_press_key.md
T
egutierrez 8742cb25be feat(browser): auto-commit con 60 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-07 11:42:31 +02:00

4.3 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
cdp_press_key function py browser 1.0.0 impure def cdp_press_key(key: str, *, port: int = 9222, target_url_substr: str = '', modifiers: int = 0, timeout_s: float = 10.0) -> dict Pulsa una tecla nombrada (Enter, Escape, Backspace, Tab, ArrowDown, Delete, ...) sobre el elemento enfocado de una pestana de un Chrome con remote debugging, via CDP Input.dispatchKeyEvent (rawKeyDown + keyUp). Primitiva de input CDP reutilizable: enviar mensajes (Enter en el composer de WhatsApp), cerrar overlays (Escape), navegar resultados (ArrowDown), borrar (Backspace) o combos con modificadores (Ctrl+A).
cdp
browser
automation
python
navegator
false error_go_core
json
urllib.request
websocket
params output
name desc
key Nombre canonico de la tecla a pulsar. Soportadas: Enter, Escape, Backspace, Tab, Delete, ArrowDown, ArrowUp, ArrowLeft, ArrowRight, Home, End. Una tecla no soportada devuelve ok=False sin tocar la red.
name desc
port Puerto de remote debugging de Chrome. Default 9222.
name desc
target_url_substr Substring que debe contener la URL del target (pestana). Si vacio, usa el primer target de tipo 'page'.
name desc
modifiers Bitmask de modificadores CDP combinables con OR: Alt=1, Ctrl=2, Meta/Cmd=4, Shift=8. Ej. Ctrl+Shift = 2|8 = 10. Default 0.
name desc
timeout_s Timeout en segundos para la conexion WebSocket. Default 10.0.
dict {ok: bool, error: str}. ok=True si los eventos rawKeyDown+keyUp se emitieron sin error. Nunca lanza: errores de red/conexion/transport y teclas no soportadas se devuelven en 'error' con ok=False.
true
test_golden_enter_emite_rawkeydown_y_keyup_vk13
test_edge_tecla_no_soportada_ok_false_sin_abrir_ws
test_error_create_connection_lanza_ok_false
python/functions/browser/cdp_press_key_test.py python/functions/browser/cdp_press_key.py

Ejemplo

import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from browser.cdp_press_key import cdp_press_key

# Requiere un Chrome lanzado con --remote-debugging-port=9222
# y una pestana de WhatsApp Web abierta con el composer enfocado y texto escrito.
res = cdp_press_key("Enter", target_url_substr="whatsapp")  # envia el mensaje
print(res["ok"], res["error"])

# Combo con modificadores (Ctrl+A para seleccionar todo): Ctrl=2.
cdp_press_key("Home", target_url_substr="whatsapp", modifiers=2)

O directo por CLI: python3 python/functions/browser/cdp_press_key.py "Enter" "whatsapp".

Cuando usarla

Cuando necesites enviar una pulsacion de tecla sobre la pestana ya abierta del navegador diario sin abrir ventana nueva ni darle foco al sistema: Enter para enviar (composer de WhatsApp), Escape para cerrar overlays/dialogos, ArrowDown/ArrowUp para navegar resultados de busqueda, Backspace/Delete para borrar, o combos con modifiers (Ctrl/Shift/Alt/Meta). Tipicamente despues de escribir con cdp_type_chars_py_browser para confirmar la accion. Es la primitiva de input sobre la que se construyen funciones whatsapp_*_py_browser y cualquier script que opere una pestana existente via CDP.

Gotchas

  • Actua sobre el elemento enfocado de la pagina: CDP Input.dispatchKeyEvent no apunta a un selector, va al foco actual. Asegura el foco (clic o el.focus() via cdp_eval_py_browser) antes de pulsar.
  • Enter en WhatsApp Web envia el mensaje (no inserta salto de linea). Para newline dentro del composer usa Shift+Enter (modifiers=8) o no uses esta funcion para eso.
  • modifiers es el bitmask de CDP, no un string: Alt=1, Ctrl=2, Meta/Cmd=4, Shift=8; combina con OR (ej. Ctrl+Shift = 10).
  • No se emite evento char aparte: el par rawKeyDown+keyUp con el windowsVirtualKeyCode correcto (Enter=13) basta para disparar el envio en WhatsApp (validado via press_key del MCP del navegador).
  • Requiere un Chrome lanzado con --remote-debugging-port=9222 (o el puerto que pases). Sin remote debugging, GET /json falla y devuelve ok=False.
  • Nunca lanza: errores de red, conexion WS, transport o tecla no soportada se reportan en el campo error con ok=False.