js_eval_loop
Execute a script on each item in a list in a single call, replacing multiple round-trips. Returns results per item plus final snapshot.
Instructions
Ejecuta script una vez por cada item — UNA llamada en lugar de N.
La variable item esta disponible en script como objeto JS plano.
Devuelve array JSON con {ok, result, error} por item + snapshot final.
USAR ESTO en lugar de llamar js_eval/click/fill N veces para operaciones bulk. Cada tool call = un round-trip LLM. Un loop aqui = 50-100x mas rapido para N>5.
Parametros:
items — lista de objetos, uno por iteracion
script — JS a ejecutar por item; puede usar await; item esta en scope
delay_ms — espera entre iteraciones (default 300ms; bajar si la app es rapida)
Ejemplo — crear 20 usuarios en una sola llamada: js_eval_loop( items=[ {"name": "Ana Garcia", "user": "agarcia", "phone": "3101234567", "email": "ana@corp.com", "area": "TI", "role": "Operador"}, ... ], script=""" document.querySelector('button[aria-label*="gregar"], button.agregar').click(); await new Promise(r => setTimeout(r, 400)); const inp = document.querySelectorAll('input:not([type=checkbox]):not([type=radio])'); const s = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').set; const fire = (el,v) => { s.call(el,v); el.dispatchEvent(new Event('input',{bubbles:true})); el.dispatchEvent(new Event('change',{bubbles:true})); }; fire(inp[0], item.name); fire(inp[1], item.user); fire(inp[2], item.phone); fire(inp[3], item.email); fire(inp[4], item.area); const sel = document.querySelectorAll('select')[0]; const ss = Object.getOwnPropertyDescriptor(HTMLSelectElement.prototype,'value').set; ss.call(sel, item.role); sel.dispatchEvent(new Event('change',{bubbles:true})); document.querySelector('button[type=submit], button.crear').click(); return item.user; """ )
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| script | Yes | ||
| delay_ms | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |