stealth_ mode
Evada los sistemas de detección de bots con técnicas anti-detección avanzadas, que incluyen aleatorización de huellas digitales, simulación de comportamiento humano y configuraciones de navegador sigilosas.
Casos de uso
Sitios de comercio electrónico protegidos
Extraiga datos de productos de sitios con protección de Cloudflare, DataDome o PerimeterX
Plataformas de redes sociales
Extraiga datos públicos de plataformas con detección de bots sofisticada
Sitios de datos financieros
Acceda a datos de mercado, cotizaciones de acciones e información financiera de fuentes protegidas
APIs con límite de tasa
Evada el límite de tasa agresivo con rotación de huellas digitales
Contenido con bloqueo geográfico
Acceda a contenido restringido por región a través de un proxy que usted aporta
Pruebas de alta seguridad
Pruebe sus propios sistemas anti-bot con técnicas de evasión avanzadas
Endpoint
/api/v1/tools/stealth_modeParameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
operation | string | Optional | configure | Operación de sigilo a realizar: scrape, configure, create_context, create_page, get_stats o cleanup. `scrape` es la vía de una sola llamada: crea un contexto sigiloso, navega a `url`, devuelve los `formats` solicitados y desmonta el contexto, todo en una única llamada facturada. create_context seguido de create_page es una comprobación de navegación y de desafío: `create_page` carga `urlToTest`, informa de su estado, su título y cualquier página de desafío, y cierra la página antes de que la llamada termine, así que nada de ella pasa a una llamada posterior. Para trabajar en una misma página a lo largo de varias llamadas (iniciar sesión y luego leer; hacer clic y luego leer), usa [browser_session](/docs/api-reference/tools/browser-session) con `stealth: true`. `configure` solo valida `stealthConfig` y lo devuelve con los valores predeterminados completados, junto con una `note`: no guarda nada, así que pasa `stealthConfig` en cada llamada `scrape` o `create_context` que deba usarlo. Example: create_context |
stealthConfig | object | Optional | - | Opciones de sigilo detalladas. Claves: level (basic | medium | advanced, predeterminado medium), randomizeFingerprint, hideWebDriver, blockWebRTC, spoofTimezone, randomizeHeaders, useRandomUserAgent, simulateHumanBehavior (todos booleanos, predeterminado true), customUserAgent, customViewport ({ width 800-1920, height 600-1080 }), locale (predeterminado "en-US") y timezone. La configuración se aplica a la llamada en la que se pasa y no se recuerda entre llamadas. En el motor `camoufox` no se aplican `customUserAgent` ni `customViewport`, `locale` queda fijado al lanzar el navegador y, detrás de un proxy, `locale` y `timezone` siguen a la IP de salida; `scrape` y `create_context` informan de cada uno de estos casos en `warnings`. Example: {"level": "advanced", "blockWebRTC": true} |
engine | string | Optional | playwright | Motor de navegador: "playwright" (predeterminado) o "camoufox" (basado en Firefox, mayor anti-detección; disponible solo donde esté instalado en el backend). Example: camoufox |
contextId | string | Optional | - | ID de contexto de navegador devuelto por una llamada create_context. Páselo a create_page para abrir una página en ese contexto sigiloso. Example: ctx_ab12cd34ef56 |
urlToTest | string | Optional | - | create_page: la URL a la que navegar y que comprobar. La página se cierra antes de que la llamada termine. Example: https://protected-site.com |
url | string | Optional | - | URL a la que hacer scraping. Obligatoria para `operation: "scrape"` e ignorada por las demás operaciones, que usan `urlToTest` en su lugar. Example: https://protected-site.com/product/42 |
formats | array | Optional | ["markdown"] | Formatos que devuelve `operation: "scrape"`: `markdown`, `html`, `text`, `links`, `metadata` o `screenshot`. Una captura de pantalla se devuelve como un URI de recurso `crawlforge://screenshot/{id}` en lugar de base64 en línea, y este endpoint REST reenvía ese URI sin resolverlo, así que por ahora `screenshot` solo se puede usar desde el servidor MCP de CrawlForge, que sí puede leer el recurso. Example: ["markdown", "links"] |
wait_for | number | Optional | - | Espera adicional tras la carga de la página, en milisegundos (0-30000). Úsela para contenido que se renderiza después de DOMContentLoaded; una ejecución sigilosa ya incluye pausas similares a las humanas, así que empiece con valores bajos. Example: 2000 |
verbose | boolean | Optional | false | Devuelve la huella digital generada completa de create_context en lugar de un resumen. Útil para depurar por qué un destino sigue detectando el navegador. Example: false |
respect_robots | boolean | Optional | true | Respeta el robots.txt del sitio de destino. Si lo omite, se aplica el valor predeterminado conforme (`true`): una URL que robots.txt no permita a `CrawlForge` se rechaza antes de lanzar ningún navegador y este endpoint no cobra nada por ello, y cada navegación se comprueba igual. La regla se compara con el token de producto `CrawlForge` aunque el navegador sigiloso presente un User-Agent aleatorizado, de modo que una directiva `User-agent: CrawlForge` del propietario del sitio también vincula al tráfico sigiloso. Póngalo en `false` solo para destinos con los que tenga su propio acuerdo: la respuesta incluye entonces una entrada `warnings` y la anulación queda registrada en su API key. Example: true |
max_inline_chars | number | Optional | 40000 | Tamaño máximo del resultado que se devuelve en línea, en caracteres de su JSON (de 1.000 a 10.000.000). Por encima, la respuesta incluye `preview` (los primeros `max_inline_chars` caracteres del campo de texto principal del resultado), `result_handle`, `total_chars`, `truncated: true` y `expires_at`, y [read_result](/docs/api-reference/tools/read-result) lee el resto por 1 credit por llamada. Los resultados almacenados se conservan 1 hora. Se aplica a la operación `scrape`. Example: 40000 |
redact_pii | boolean | object | Optional | false | Elimine los datos personales del texto que devuelve esta llamada, antes de que el resultado se almacene o se envíe de vuelta. Se aplica a `operation: "scrape"`, la única operación que devuelve una página; las operaciones de gestión no tienen texto que redactar. `true` es la forma abreviada de `{ mode: "fast" }`: las cuatro clases de expresiones regulares, etiquetadas. Siempre que pida redacción, la respuesta lleva `redaction: { entities, count, mode }` dentro de `data`, incluso cuando no hubo coincidencias (`count: 0`), de modo que «no se encontró nada» nunca se confunde con «se ignoró el parámetro»; una clase sin coincidencias se omite en lugar de informarse como `0`. La redacción se ejecuta **antes** de almacenar el resultado, así que un resultado grande que se lea después con [read_result](/docs/api-reference/tools/read-result) ya viene redactado. Dos límites deliberados: las direcciones (`url`, `link`, `href`, `canonical_url`) nunca se redactan, y los contadores derivados del texto (`content_length`, `word_count`, `character_count`) lo describen tal como se extrajo, antes de la redacción. Example: true |
Operaciones y su costo
5 credits pagan el trabajo del navegador; las operaciones administrativas cuestan 1 credit cada una. Por tanto, un scrape de una sola llamada cuesta 5 credits, mientras que la ruta create_context → create_page → cleanup cuesta 11.
url, devuelve los formats solicitados junto con el título de la página y la URL final, y desmonta el contexto. Empiece por aquí.contextId. Úselo cuando varias páginas deban compartir una misma huella digital y el mismo almacén de cookies.urlToTest dentro de un contextId existente. La página se cierra cuando termina la llamada; el contexto permanece.stealthConfig y lo devuelve con los valores predeterminados completados, con una note que lo indica. No se guarda nada y ninguna llamada posterior lo recoge: pasa stealthConfig en cada llamada scrape o create_context. No hay navegación, así que se factura como operación administrativa.activeContexts, totalFingerprintsSaved, browserRunning, humanBehaviorActive y proxyStatus (enabled, currentProxy, totalProxies) del backend. Sin navegación.Lo que el modo sigiloso no hace
El modo sigiloso renderiza JavaScript con una huella de navegador aleatorizada. No resuelve CAPTCHAs, no falsifica tokens de desafío ni sortea un inicio de sesión o un muro de pago, y no sirve para eludir un bloqueo dirigido específicamente a CrawlForge. robots.txt sigue aplicándose en cada navegación, comparado con el token de producto CrawlForge. Si un destino continúa rechazando la petición, la solución es una API documentada o el permiso del propietario del sitio, no un nivel de sigilo más alto.
Por dónde sale el tráfico sigiloso
La API alojada ejecuta stealth_mode desde una dirección de centro de datos. CrawlForge no opera ningún pool de proxies residenciales, y los sitios que puntúan la red antes de ejecutar JavaScript (Cloudflare, DataDome) pueden seguir desafiando un renderizado alojado. Pasa tu propio proxy residencial o móvil en stealthConfig.proxyRotation y todos los contextos sigilosos lo usarán. Los proxies se aplican por contexto solo en el motor Chromium (playwright): un proxyRotation por llamada se rechaza en camoufox, que aplica su proxy al lanzar el navegador y comparte ese navegador entre llamadas; si alojas el servidor por tu cuenta, dale a Camoufox una salida con CRAWLFORGE_STEALTH_PROXIES. Si alojas el servidor MCP por tu cuenta, CRAWLFORGE_STEALTH_PROXIES fija una salida para todo el servidor, y CRAWLFORGE_BROWSER_BACKEND=browserbase entrega las sesiones sigilosas a una cuenta de Browserbase, que aporta sus propias salidas residenciales y resolución de CAPTCHA bajo las condiciones de esa cuenta.
Selección de motor
stealth_mode admite dos motores de navegador subyacentes. Elija según la dificultad de detección del sitio de destino.
Ejemplo de motor
curl -X POST https://crawlforge.dev/api/v1/tools/stealth_mode \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "create_context",
"engine": "camoufox",
"stealthConfig": {
"level": "advanced"
}
}'Niveles de sigilo
Ejemplos de solicitud
# 1. Create a stealth browser context
curl -X POST https://crawlforge.dev/api/v1/tools/stealth_mode \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "create_context",
"engine": "playwright",
"stealthConfig": {
"level": "advanced",
"randomizeFingerprint": true,
"blockWebRTC": true
}
}'
# 2. Open a page in that context (use the contextId from step 1)
curl -X POST https://crawlforge.dev/api/v1/tools/stealth_mode \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"operation": "create_page",
"contextId": "ctx_ab12cd34ef56",
"urlToTest": "https://protected-site.com"
}'Ejemplo de respuesta
{ "success": true, "data": { "operation": "create_context", "contextId": "ctx_ab12cd34ef56", "engine": "playwright", "stealthConfig": { "level": "advanced", "randomizeFingerprint": true, "hideWebDriver": true, "blockWebRTC": true, "spoofTimezone": true, "locale": "en-US" }, "message": "Stealth context created" }, "credits_used": 5, "credits_remaining": 995, "processing_time": 1200}data.contextIdPáselo a create_page para abrir una página dentro de este contexto sigilosodata.operationLa operación de sigilo que se realizódata.stealthConfigLa configuración de sigilo resuelta aplicada al contextocredits_used5 credits por trabajo del navegador (scrape, create_context, create_page); 1 credit por una operación administrativaprocessing_timeTiempo para iniciar el contexto sigiloso (ms)Manejo de errores
Runtime de navegador no configurado (503 TOOL_NOT_AVAILABLE)
El modo sigiloso necesita un runtime de navegador. Cuando el backend de ejecución alojado no está configurado, la llamada devuelve 503 de inmediato y no se cobran credits.
Límite de tasa superado (429 Too Many Requests)
Ha superado el límite de tasa de su plan. Espere un momento o mejore su plan para obtener límites más altos.
Operación no válida (400 Bad Request)
La operación debe ser una de: scrape, configure, create_context, create_page, get_stats o cleanup.
El backend de ejecución agotó el tiempo (504 MCP_UPSTREAM_TIMEOUT)
El destino no terminó de cargar dentro del presupuesto del backend de ejecución. Los sitios muy protegidos son la causa habitual. Los fallos no se cobran.
Bloqueado por robots.txt (502 TOOL_ERROR)
El robots.txt del destino no permite esta URL a CrawlForge, así que no se lanzó ningún navegador y no se cobró nada. Establezca respect_robots: false para anularlo si tiene su propio acuerdo con el destino: la anulación queda registrada en su API key. La anulación no alcanza a un host incluido en la lista de exclusión permanente de CrawlForge, que se rechaza sea cual sea el valor de respect_robots.
Comience con el nivel de sigilo "medium". Use "advanced" solo para sitios que bloqueen el nivel medio. Reutilice un contexto en varias llamadas create_page para amortizar el tiempo de configuración; planifique en consecuencia para las operaciones por lotes.
Costo en credits
scrape, create_context o create_page — sea cual sea el nivel de sigilo. Las operaciones administrativas configure, get_stats y cleanup no navegan y cuestan 1 credit cada una, por lo que un scrape de una sola llamada cuesta 5 credits en total.Qué incluye:
Aleatorización de huellas digitales (todos los niveles)
Simulación de comportamiento humano
Técnicas anti-detección
Evasión de detección de WebDriver (medium+)
Enmascaramiento Canvas/WebGL (medium+)
Huellas TLS avanzadas (advanced)
Recomendaciones de plan:
Plan Free: 1,000 credits de prueba por única vez = 200 solicitudes en modo sigiloso
Plan Hobby: 5,000 credits = 1,000 solicitudes en modo sigiloso ($19/mo)
Plan Professional: 100,000 credits = 20,000 solicitudes en modo sigiloso ($99/mo)
Herramientas relacionadas
¿Listo para probar stealth_mode? Regístrese gratis y obtenga 1,000 credits para empezar a desarrollar.