Kimi WebBridge — Automatizacion de Navegador Real

NutriPulse SaaS — Scraping de Leads Dietistas — Sesion: nutribase-scraping

daemon activo 127.0.0.1:10086 extension v2.4.1 08:02 — 18 Jun 2026
🎯
23
Leads captados
🚫
17
Sin web propia
4.6
Rating medio
📞
19
Con telefono
4.2s
Tiempo total
1
Health check — verificar daemon activo
08:01:53
bash TERMINAL
~/.kimi-webbridge/bin/kimi-webbridge status
Respuesta 12ms
"running": true, "extension_connected": true, "version": "2.4.1"

2
navigate — abrir Doctoralia nutricionistas Madrid
08:01:54
🌐curl ACTION: navigate
curl -s -X POST http://127.0.0.1:10086/command \ -H 'Content-Type: application/json' \ -d '{ "action": "navigate", "args": { "url": "https://www.doctoralia.es/nutricionistas/madrid", "newTab": true, "group_title": "NutriPulse — Captacion leads" }, "session": "nutribase-scraping" }'
Respuesta 380ms
{ "success": true, "url": "https://www.doctoralia.es/nutricionistas/madrid", "tabId": 847 }

3
snapshot — leer arbol de accesibilidad
08:01:55
Por que snapshot en lugar de CSS: Los @e refs del arbol de accesibilidad sobreviven cambios de clases CSS y hashes de bundler. Son el selector mas robusto para automatizaciones a largo plazo.
📸curl ACTION: snapshot
curl -s -X POST http://127.0.0.1:10086/command \ -d '{"action":"snapshot","args":{},"session":"nutribase-scraping"}'
Arbol de accesibilidad (fragmento) 92ms
{ "url": "https://www.doctoralia.es/nutricionistas/madrid", "title": "Nutricionistas en Madrid | Doctoralia.es", "tree": [ { "@e": "@e12", "role": "listitem", "name": "Dra. Carmen Ruiz Molina" }, { "@e": "@e13", "role": "listitem", "name": "Dra. Isabel Torres Vega" }, { "@e": "@e14", "role": "listitem", "name": "Dr. Marcos Alonso Prieto" }, // ... 20 especialistas mas ] }

4
evaluate — extraer datos estructurados con JS
08:01:55 — 08:01:58
curl ACTION: evaluate
curl -s -X POST http://127.0.0.1:10086/command \ -d '{ "action": "evaluate", "args": { "code": "(() => { const cards = document.querySelectorAll(\"[data-id=specialist-card]\"); return JSON.stringify([...cards].map(c => ({ nombre: c.querySelector(\".name\")?.textContent?.trim(), ciudad: c.querySelector(\".city\")?.textContent?.trim(), rating: parseFloat(c.querySelector(\".rating\")?.textContent), telefono: c.querySelector(\".phone\")?.textContent?.trim() || null, tiene_web: !!c.querySelector(\"a.website-link\") }))); })()" }, "session": "nutribase-scraping" }' # Nota: JSON.stringify sin indent para evitar truncado de respuesta # Nota: IIFE para scope limpio entre llamadas evaluate
23 especialistas extraidos 210ms
{ "type": "string", "value": "[{\"nombre\":\"Dra. Carmen Ruiz Molina\",\"ciudad\":\"Madrid\",...},...]" }

5
screenshot — capturar evidencia visual
08:01:58
📷curl ACTION: screenshot
curl -s -X POST http://127.0.0.1:10086/command \ -d '{ "action": "screenshot", "args": { "format": "png", "path": "/tmp/nutribase/doctoralia-madrid-20260618.png" }, "session": "nutribase-scraping" }'
Screenshot guardado 145ms
{ "format": "png", "path": "/tmp/nutribase/doctoralia-madrid-20260618.png", "sizeBytes": 284651, "mimeType": "image/png" }

6
Leads capturados — filtrados por prioridad NutriPulse
23 registros
17 leads calificados sin web propia — candidatos ideales para el pitch de NutriPulse SaaS. Puntuacion calculada como: rating × 10 + (sin_web ? 20 : 0) + (telefono ? 10 : 0).
📋 leads-nutribase-20260618.csv 23 registros
⬇ Exportar CSV
# Nombre Ciudad Rating Telefono Tiene web Score lead
01 Dra. Carmen Ruiz Molina Madrid ★★★★★ 4.9 +34 910 44 55 21 No ✓ 79
02 Dra. Isabel Torres Vega Madrid ★★★★★ 4.8 +34 914 67 88 03 No ✓ 78
03 Dr. Marcos Alonso Prieto Barcelona ★★★★★ 4.8 +34 932 11 44 76 No ✓ 78
04 Dra. Lucia Fernandez Gil Barcelona ★★★★½ 4.7 +34 931 22 89 45 Si 57
05 Dra. Ana Maria Soler Roca Valencia ★★★★★ 4.9 +34 963 54 17 22 No ✓ 79
06 Dr. Roberto Perez Cuenca Madrid ★★★★½ 4.6 No ✓ 66
07 Dra. Patricia Gomez Lara Valencia ★★★★★ 4.8 +34 960 33 21 98 Si 58
08 Dra. Sofia Navarro Blanco Madrid ★★★★★ 4.7 +34 915 88 62 41 No ✓ 77
09 Dr. Javier Moreno Santos Barcelona ★★★★½ 4.5 +34 933 77 55 14 No ✓ 75
10 Dra. Elena Castro Mora Madrid ★★★★★ 4.9 +34 910 12 34 56 No ✓ 79
+ 13 registros mas en el CSV completo (leads_nutribase_20260618.csv)

7
Script cron completo — ejecucion diaria automatizada
scrape_nutribase.sh
crontab
#!/bin/bash # NutriPulse — Scraping diario Doctoralia via Kimi WebBridge # Cron: 0 8 * * * /home/nutribase/scripts/scrape_nutribase.sh BASE="http://127.0.0.1:10086/command" SESSION="nutribase-$(date +%Y%m%d)" OUTPUT="/data/leads/leads_$(date +%Y%m%d).csv" CIUDADES=("madrid" "barcelona" "valencia") # 1. Health check STATUS=$(~/.kimi-webbridge/bin/kimi-webbridge status) if [[ $(echo $STATUS | jq -r .running) != "true" ]]; then echo "Daemon no activo — abortando"; exit 1 fi # 2. Iterar ciudades echo "nombre,ciudad,rating,telefono,tiene_web,score" > $OUTPUT for CIUDAD in ${CIUDADES[@]}; do # Navegar curl -s -X POST $BASE -H 'Content-Type: application/json' \ -d "{\"action\":\"navigate\",\"args\":{\"url\":\"https://www.doctoralia.es/nutricionistas/$CIUDAD\",\"newTab\":true},\"session\":\"$SESSION\"}" sleep 1 # esperar carga # Extraer datos con evaluate DATOS=$(curl -s -X POST $BASE -H 'Content-Type: application/json' \ -d "{\"action\":\"evaluate\",\"args\":{\"code\":\"(() => { ... })()\" },\"session\":\"$SESSION\"}" \ | jq -r .value) # Filtrar y calcular score echo $DATOS | python3 /home/nutribase/scripts/parse_leads.py >> $OUTPUT done # 3. Cerrar sesion limpiamente curl -s -X POST $BASE -d "{\"action\":\"close_session\",\"args\":{},\"session\":\"$SESSION\"}" echo "Completado: $(wc -l < $OUTPUT) leads en $OUTPUT"

8
close_session + resumen final
08:01:57
🔒curl ACTION: close_session
curl -s -X POST http://127.0.0.1:10086/command \ -d '{ "action": "close_session", "args": {}, "session": "nutribase-scraping" }'
Session cerrada 88ms
{ "success": true, "closed": 3 }
📊 Breakdown por ciudad
Madrid 9 leads
Barcelona 7 leads
Valencia 7 leads
🎯 Calidad leads
Score > 75 8 leads
Score 60–75 9 leads
Score < 60 6 leads
⏱ Tiempos de ejecucion
navigate (×3) 1.14s
snapshot (×3) 276ms
evaluate (×3) 630ms
screenshot (×3) 435ms
close_session 88ms
Total 4.2s
Timeline de la sesion completa
08:01:53
Health check OK
running: true + extension_connected: true — daemon v2.4.1 activo
08:01:54
navigate x3 — Madrid, Barcelona, Valencia
Sesion nutribase-scraping abre 3 tabs en un mismo grupo visible en Chrome
08:01:55
snapshot x3 — arbol de accesibilidad
Extrae refs @e12..@e35 para cada card de especialista sin depender de CSS
08:01:55
evaluate x3 — extraccion JS con IIFE
23 objetos JSON extraidos: nombre, ciudad, rating, telefono, tiene_web. IIFE evita SyntaxError de redeclaracion entre llamadas
08:01:56
screenshot x3 — evidencia visual PNG
Guardado en /tmp/nutribase/doctoralia-{ciudad}-20260618.png — ruta personalizada, no base64
08:01:57
close_session — 3 tabs cerradas
Grupo "NutriPulse — Captacion leads" eliminado del navegador del usuario