--- id: cdp_click_xy_human_go_browser name: cdp_click_xy_human kind: function lang: go domain: browser purity: impure version: 1.0.0 tested: false description: "Click humanizado en coordenadas absolutas (x,y): mueve el ratón con trayectoria Bézier y despacha mousePressed/mouseReleased con micro-pausa variable. Primitivo de click compartido por las tres vías de acción del agente: por selector, por #ref del AX tree y por visión (bounding box de OCR/YOLO)." tags: [cdp, browser, action, humanized, click, navegator] signature: "func CdpClickXYHuman(c *CDPConn, x, y float64, opts MouseHumanOpts) error" uses_functions: - cdp_move_mouse_human_go_browser uses_types: [] returns: [] returns_optional: false error_type: error_go_core imports: [] file_path: "functions/browser/cdp_click_xy_human.go" example: | conn, _ := browser.CdpConnect(9333) defer browser.CdpClose(conn, 0) // Click humanizado en el centro de un elemento detectado por visión (bbox): browser.CdpClickXYHuman(conn, 412.0, 318.0, browser.MouseHumanOpts{}) params: - name: c desc: "Conexión CDP activa (de CdpConnect)." - name: x desc: "Coordenada X absoluta en la página, en px CSS del viewport." - name: y desc: "Coordenada Y absoluta en la página, en px CSS del viewport." - name: opts desc: "Opciones de la trayectoria humana (zero-value = defaults). Origen del movimiento via FromX/FromY." output: "error si el movimiento del ratón o el despacho de eventos falla; nil en éxito." --- ## Ejemplo ```go conn, _ := browser.CdpConnect(9333) defer browser.CdpClose(conn, 0) // El centro del bounding box lo da el #ref del AX tree (DOM.getBoxModel) o la // detección de visión (OCR/YOLO). Aquí, click humanizado sobre ese punto: if err := browser.CdpClickXYHuman(conn, 412.0, 318.0, browser.MouseHumanOpts{}); err != nil { log.Fatal(err) } ``` ## Cuando usarla Cuando ya tienes las coordenadas de píxel del objetivo: el centro del bounding box de un elemento (resuelto por `#ref` del AX outline vía `DOM.getBoxModel`, o detectado por visión OCR/YOLO). Es el único primitivo de click del agente — no despaches `Input.dispatchMouseEvent` a mano. ## Gotchas - Coordenadas en el sistema de la página (px CSS del viewport), no de pantalla física. - La humanización añade latencia (movimiento Bézier + micro-pausa). Para scraping masivo de alto volumen, el llamador debe usar un preset rápido de `MouseHumanOpts` (política de sesión `fast`), no humanización completa por acción. - El destino debe estar dentro del viewport visible; haz scroll al elemento antes si hace falta.