chore: auto-commit (13 archivos)
- .gitignore - CAPABILITIES_TODO.md - demo_e2e/results/prueba_1_quotes.json - demo_e2e/results/prueba_2_perceive.json - demo_e2e/results/prueba_3_search.json - demo_e2e/results/prueba_4_login_session.json - demo_e2e/results/prueba_5_books.json - demo_e2e/results/prueba_6_session_storage.json - demo_e2e/results/prueba_7_find_honesto.json - demo_e2e/results/prueba_8_verificacion.json - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+51
-1
@@ -2,7 +2,7 @@
|
||||
title: Capacidades de navegador (CDP) + construcción del MCP full-CDP
|
||||
artefacto: project · projects/web_scraping
|
||||
created: 06/06/2026 00:00
|
||||
updated: 06/06/2026 09:00
|
||||
updated: 06/06/2026 10:00
|
||||
status: in_progress
|
||||
related_issues: []
|
||||
related_flows: []
|
||||
@@ -548,6 +548,56 @@ Storage granular desglosado (cookie/localStorage/sessionStorage × get/set/delet
|
||||
nosotros lo hacemos con 6), video/tracing/highlight (9 tools de debug visual de testing), `generate_locator`,
|
||||
`run_code_unsafe` (= nuestro `page_eval_js`). Replicar esto sube el contador a ~45 sin añadir poder.
|
||||
|
||||
### H. Política de velocidad de interacción (human / fast / instant) — REFACTOR, no flag
|
||||
|
||||
**No es un flag, es un refactor del primitivo + breaking en el teclado.** Hoy el camino de acción es
|
||||
human-only sin escape: `CdpClickXYHuman` siempre llama `CdpMoveMouseHuman` (25 puntos con sleeps), la
|
||||
micro-pausa press/release (30-90ms) está hardcoded, `CdpTypeText` no tiene opts (delay 10ms/char hardcoded),
|
||||
y `MouseHumanOpts` no tiene campo de modo (poner Steps=1 sigue moviendo y pausando). La política de 3 modos
|
||||
exige tocar el primitivo, no pasar opts distintos.
|
||||
|
||||
**El eje que separa los 3 (clave): "¿dispara eventos de ratón reales?"** — `fast` SÍ (mousemove/down/up,
|
||||
movimiento reducido), `instant` NO (usa `element.click()` JS). Hay SPAs con listeners en hover/mousedown que
|
||||
se rompen con instant pero funcionan con fast — eso justifica tener 3 y no 2.
|
||||
|
||||
| Parámetro | human (default) | fast | instant |
|
||||
|---|---|---|---|
|
||||
| Trayectoria ratón | Bézier ~25 pts | recta ~5 pts | sin movimiento |
|
||||
| Duración move | 350-800ms | ~40-80ms | 0 |
|
||||
| Jitter | 2px | 0-1px | 0 |
|
||||
| Pausa press/release | 30-90ms | 5-15ms | 0 |
|
||||
| Eventos ratón reales | sí | sí | no (`element.click()` JS) |
|
||||
| Typing delay/char | 10-40ms var | 1-3ms | 0 (set value + `input` event) |
|
||||
| Dispara hover/mousedown handlers | sí | sí | no |
|
||||
| Sigilo anti-bot | alto | bajo | nulo |
|
||||
| Caso de uso | agente vs detección | scraping masivo propio | tests + **fallback sin-bbox** |
|
||||
|
||||
**`instant` no es "solo tests": es el fallback obligatorio sin geometría.** `refBoxCenter` falla con error
|
||||
duro si el nodo no tiene box model (display:contents, área 0 con handler). El camino instant
|
||||
(`backendNodeId` → `DOM.resolveNode` → `Runtime.callFunctionOn` `.click()`) es el degradado natural cuando
|
||||
la vía bbox no aplica. No añadir un 4º modo "paranoid" — tres y basta.
|
||||
|
||||
**Arquitectura (sin meter estado de sesión en las funciones stateless):**
|
||||
- [x] **H1** ✅ (06/06) `Mode` (string `human`/`fast`/`instant`) en `MouseHumanOpts`. Branch en
|
||||
`CdpMoveMouseHuman` (instant=no-op, fast=reducido) y `CdpClickXYHuman` (pausa derivada del modo, no
|
||||
hardcoded). Toca el **primitivo compartido** → re-test de click_ref/human/xy. (medio)
|
||||
- [x] **H2** ✅ (06/06) `MouseProfileForMode(mode)` → `MouseHumanOpts` — **una sola fuente de verdad** del mapeo
|
||||
modo→números, consumida por MCP + runner YAML + CLI (no duplicar). (pequeño)
|
||||
- [ ] **H3** Teclado con config: `CdpTypeText` gana variante con delay/modo + instant via `set value` +
|
||||
`input` event. **BREAKING** → blast radius `script_navegador` (uses_functions) + MCP `type_ref`;
|
||||
**migrar consumidores en el mismo PR**. Es el corte que más cuidado pide. (medio)
|
||||
- [x] **H4** ✅ (06/06) `instant` fallback en `CdpClickRef` (`element.click()` JS) cuando no hay bbox o Mode=instant.
|
||||
- [~] **H5** parcial (06/06): override per-acción `mode` en tools MCP `dom_click_ref`/`dom_hover_ref` ✅
|
||||
(validado: human ~1212ms > fast ~590ms > instant ~499ms). PENDIENTE: estado de sesión
|
||||
`browser_set_mode` + `mode:` en YAML + `--mode` CLI.
|
||||
- [ ] **H6** Precedencia: **override per-acción > modo de sesión > default human**. Mantener el override
|
||||
per-acción (instant puntual sobre un elemento sin bbox aunque la sesión sea human).
|
||||
- [ ] **H7** e2e por modo: instant rompe sitio-con-hover, human/fast no — es la prueba que valida el eje.
|
||||
|
||||
**Los waits NO entran aquí** (`wait_idle` quietMs/timeout, `wait_load`) — son *correctness*, ortogonales al
|
||||
sigilo. Pero documentar: en scraping masivo el throughput lo matan TANTO la humanización COMO los waits;
|
||||
`mode: fast` sin ajustar waits no da toda la velocidad.
|
||||
|
||||
### Telemetría
|
||||
|
||||
`call_monitor` ya existe — cada tool del MCP encaja sin trabajo extra.
|
||||
|
||||
Reference in New Issue
Block a user