scrape_with_actions
Ejecute cadenas de acciones de navegador, incluidas clic, desplazamiento, escritura y autocompletado de formularios, con captura de capturas de pantalla. Ideal para flujos de inicio de sesión, desplazamiento infinito, diálogos modales y sitios complejos con uso intensivo de JavaScript.
Casos de uso
Flujos de inicio de sesión
Automatice formularios de inicio de sesión y acceda a contenido autenticado tras los muros de inicio de sesión
Desplazamiento infinito
Haga scraping de contenido de páginas con desplazamiento infinito, como feeds de redes sociales y listados de productos
Diálogos modales
Interactúe con ventanas emergentes, modales y superposiciones dinámicas
Sitios con uso intensivo de JavaScript
Maneje SPAs y sitios con carga de contenido dinámico mediante AJAX
Formularios de múltiples pasos
Navegue por asistentes de múltiples pasos y envíos de formularios complejos
Pruebas visuales
Capture capturas de pantalla en cada paso para depuración y pruebas de regresión visual
Endpoint
/api/v1/tools/scrape_with_actionsParameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Required | - | La URL a cargar antes de ejecutar la cadena de acciones Example: https://app.example.com/dashboard |
actions | array | Required | - | Lista ordenada de 1-20 acciones de navegador a ejecutar antes del scraping. Cada elemento es un objeto con un `type` de `wait`, `click`, `type`, `press`, `scroll`, `screenshot`, `executeJavaScript`, `select`, `hover` o `navigate`, además de campos específicos según el tipo: `selector` (destino CSS), `text` (para `type`), `key` (para `press`), `script` (para `executeJavaScript`), `duration`/`condition` (para `wait`), `button`/`clickCount`/`delay` (para `click`), `direction`/`distance`/`toElement` (para `scroll`) `fullPage`/`quality`/`format` (para `screenshot`), `value` o `values` (para `select`) y `url`/`waitUntil` (para `navigate`). `select` admite un único `value` o un arreglo `values`, y una cadena simple coincide con una opción por su valor o por su etiqueta visible; `hover` necesita `selector` y, opcionalmente, `force` y `position`. Opcionales en cualquier acción: `timeout` (por acción, predeterminado 10000ms; distinto de `browserOptions.timeout`, que presupuesta toda la cadena), `description`, `continueOnError` (predeterminado false), `retries` (0-5, predeterminado 1) y `captureAfter` (predeterminado false). Example: [{"type": "click", "selector": "#login"}, {"type": "type", "selector": "#email", "text": "user@example.com"}, {"type": "wait", "duration": 1000}, {"type": "screenshot"}] |
formats | array | Optional | ["json"] | Formatos de salida a devolver: `markdown`, `html`, `json`, `text` o `screenshots` Example: ["markdown", "screenshots"] |
captureScreenshots | boolean | Optional | true | Toma capturas de pantalla durante la ejecución de las acciones Example: true |
formAutoFill | object | Optional | - | Rellena y envía un formulario en un solo paso. Estructura: `{ fields: [{ selector, value, type: text|select|checkbox|radio|file, waitAfter }], submitSelector, waitAfterSubmit }` — `waitAfterSubmit` es 2000ms de forma predeterminada. Example: {"fields": [{"selector": "#email", "value": "user@example.com", "type": "text"}], "submitSelector": "#login"} |
browserOptions | object | Optional | - | Configuración del navegador: `headless` (predeterminado true), `userAgent`, `viewportWidth` (predeterminado 1280, rango 800-1920), `viewportHeight` (predeterminado 720, rango 600-1080), `timeout` (predeterminado 30000ms, rango 10000-120000) y `stealth` (predeterminado false). Mantenga `timeout` dentro de la ventana REST de ~25s. Ponga `stealth` en true para ejecutar la cadena de acciones en el motor sigiloso de Chromium con su perfil `medium` en lugar del grupo de navegadores estándar: el booleano es el único control, así que el nivel, la aleatorización de huellas y la elección de motor no se pueden ajustar desde aquí. Tarda más en arrancar y renderiza JavaScript, no resuelve desafíos. Example: {"viewportWidth": 1440, "viewportHeight": 900, "timeout": 20000} |
extractionOptions | object | Optional | - | Opciones de extracción de contenido: `selectors` (un mapa CSS clave→valor de los datos a extraer), `includeMetadata` (predeterminado true), `includeLinks` (predeterminado true) e `includeImages` (predeterminado true). Example: {"selectors": {"title": "h1", "price": ".price"}} |
continueOnActionError | boolean | Optional | false | Continúa ejecutando las acciones restantes cuando una falla, en lugar de abortar la cadena Example: false |
maxRetries | number | Optional | 1 | Número máximo de reintentos para la ejecución completa en caso de fallo (0-3) Example: 1 |
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 abrir el navegador y este endpoint no cobra nada por ello, y cada acción `navigate` se comprueba igual. Póngalo en `false` solo para destinos con los que tenga su propio acuerdo: la anulación queda registrada en su API key. Example: true |
Tipos de acción disponibles
{"type": "wait", "duration": 2000}{"type": "click", "selector": "#button"}{"type": "type", "selector": "#search", "text": "query"}{"type": "press", "key": "Enter"}{"type": "scroll", "toElement": "#content"}{"type": "screenshot"}{"type": "executeJavaScript", "script": "window.scrollTo(0, 0)"}<select>: selector indica el desplegable y luego value (una opción) o values (varias). Una cadena simple coincide con una opción por su valor o por su etiqueta visible.selector, para menús y descripciones emergentes que solo aparecen al pasar el ratón. force y position se comportan igual que en click.url en la misma sesión del navegador, de modo que las cookies, el localStorage y el estado de sesión de las acciones anteriores se conservan. El waitUntil opcional es load, domcontentloaded (el predeterminado), networkidle o commit. La nueva URL pasa las mismas comprobaciones de robots.txt y SSRF que la inicial, así que no sirve para eludir el control.Ejemplos de solicitud
curl -X POST https://crawlforge.dev/api/v1/tools/scrape_with_actions \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://app.example.com/dashboard",
"actions": [
{"type": "click", "selector": "#login"},
{"type": "type", "selector": "#email", "text": "user@example.com"},
{"type": "type", "selector": "#password", "text": "secret123"},
{"type": "wait", "duration": 1000},
{"type": "screenshot"}
],
"formats": ["markdown", "screenshots"]
}'Ejemplo de respuesta
{ "success": true, "data": { "url": "https://app.example.com/dashboard", "actionsExecuted": 4, "results": { "markdown": "# Dashboard\n\nWelcome back — you are now signed in...", "screenshots": [ "data:image/png;base64,iVBORw0KGgoAAAANS...(truncated)" ] }, "actionLog": [ { "type": "click", "selector": "#login", "success": true }, { "type": "type", "selector": "#email", "success": true }, { "type": "wait", "duration": 1000, "success": true }, { "type": "screenshot", "success": true } ] }, "credits_used": 5, "credits_remaining": 995, "processing_time": 9000}data.urlLa URL que se cargó antes de ejecutar la cadena de accionesdata.actionsExecutedNúmero de acciones que se ejecutaron correctamentedata.results.markdownContenido de la página en cada formato solicitado después de completar todas las accionesdata.results.screenshotsCapturas de pantalla codificadas en base64 capturadas durante la ejecución (data:image/png;base64,…)data.actionLogRegistro por acción con el tipo, el selector y el estado de éxitocredits_usedCredits descontados por esta solicitud (5 por scrape)processing_timeTiempo total en ms, incluidas todas las acciones y esperasManejo de errores
Runtime de navegador no configurado (503 TOOL_NOT_AVAILABLE)
Esta herramienta necesita un runtime de automatización de navegador. Cuando el backend de ejecución alojado no está configurado, la llamada devuelve 503 de inmediato y no se cobran credits.
El backend de ejecución agotó el tiempo (504 MCP_UPSTREAM_TIMEOUT)
La navegación más la cadena de acciones superó el presupuesto de tiempo del backend de ejecución. Acorte las esperas, reduzca el número de acciones o reintente. 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. Cada acción navigate se comprueba igual, no solo la URL inicial. Establezca respect_robots: false para anularlo si tiene su propio acuerdo con el destino: la anulación queda registrada en su API key.
Acción no válida (400 Bad Request)
Una o más acciones tienen parámetros no válidos. Verifique el tipo de acción y los campos obligatorios.
Credits insuficientes (402 Payment Required)
Su cuenta no tiene suficientes credits (se necesitan 5). Compre más credits o actualice su plan.
Límite de tasa excedido (429 Too Many Requests)
Ha superado el límite de tasa de su plan. Espere un momento o actualice su plan para obtener límites más altos.
Costo en credits
Plan Free: 1,000 credits de prueba por única vez = 200 cadenas de acciones
Plan Hobby: 5,000 credits/mes = 1,000 cadenas de acciones ($19/mo)
Plan Professional: 50,000 credits/mes = 10,000 cadenas de acciones ($99/mo)
Plan Business: 250,000 credits/mes = 50,000 cadenas de acciones ($399/mo)