Captura de página completa
Una captura de viewport se detiene donde termina la pantalla; esta sigue hasta que la página se acaba, uniendo cada sección en una sola imagen larga. Es la diferencia entre comprobar que una página cargó y comprobar que realmente se renderizó de principio a fin.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Lo visible nunca fue toda la página
La mayoría de las herramientas de captura por defecto solo registran lo que cabe en una ventana de navegador, lo cual sirve para un banner principal pero resulta inútil para verificar una landing page larga, un artículo extenso, o una ficha de producto de comercio electrónico con reseñas apiladas debajo del botón de compra. Una captura de página completa importa cada vez que lo que realmente hay que revisar (un pie de página, una tabla de precios tres secciones más abajo, un widget roto cerca del final) vive fuera de esa primera pantalla.
Cómo se construye la captura
Se envía POST /web/screenshot-full con una URL y la tarea carga la página en un entorno de navegador real, la desplaza hasta su altura renderizada completa (activando en el camino imágenes de carga diferida y animaciones ligadas al scroll) y une el resultado en una sola imagen continua. Es asíncrona por diseño: se recibe un task_id de inmediato y la imagen final llega por webhook firmado o mediante un enlace firmado válido por 24 horas, ya que las imágenes de página completa de sitios largos pueden pesar bastante.
Por qué la captura completa es más difícil de lo que parece
Las páginas web modernas rara vez se renderizan por completo al cargar: el scroll infinito, las imágenes de carga diferida y los encabezados fijos que reacomodan el contenido hacen que un enfoque ingenuo de 'tomar una foto' produzca resultados rotos o incompletos. La tarea resuelve esto desplazándose por la página en lugar de solo redimensionar el viewport, que es la única forma confiable de capturar contenido diseñado para aparecer solo cuando el usuario llega hasta ahí.
Quién lo usa en la práctica
Equipos de QA que archivan cómo se veía una página de marketing antes y después de un despliegue, equipos legales y de cumplimiento que registran el contenido completo de una página con fecha, herramientas de investigación competitiva que capturan la landing page entera de un competidor para revisión, y equipos de contenido que generan vistas previas visuales de artículos largos para aprobación interna.
Cómo encaja en la automatización
El precio es una base de $0.040 por solicitud más $0.001 por URL, lo cual facilita presupuestar un rastreo nocturno de cientos de páginas. Como solo se cobra si tiene éxito (tres reintentos antes de un error claro, nunca se cobra si falla), encaja bien en un pipeline de integración continua que captura cada despliegue en staging, o en un trabajo de monitoreo que revisa un conjunto de páginas según un calendario sin supervisión manual.
Qué puede hacer con ella
Registro visual antes y después de un despliegue
Un pipeline de QA captura el largo completo de páginas clave antes y después de cada lanzamiento para detectar regresiones de diseño que una captura de viewport no vería.
Registros de cumplimiento con fecha
Un equipo legal archiva el contenido completo de una página de términos y condiciones tal como lucía en una fecha determinada.
Investigación competitiva de landing pages
Un equipo de marketing captura la página de precios completa de un competidor, incluidas las secciones que solo aparecen al hacer scroll, para revisión interna.
Vistas previas de contenido extenso
Un equipo editorial genera una sola imagen desplazable de un artículo largo para que los interesados lo aprueben antes de publicarlo.
Preguntas frecuentes
¿Qué captura exactamente una API de captura de página completa?
Toda la altura renderizada de una página, no solo lo visible en una ventana de navegador, unida en una sola imagen continua.
¿Maneja imágenes de carga diferida?
Sí, la tarea se desplaza por la página para activar contenido de carga diferida y animaciones ligadas al scroll antes de capturar, en lugar de solo redimensionar el viewport.
¿Existe un plan gratuito?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cómo está estructurado el precio?
Una base de $0.040 por solicitud más $0.001 por URL, publicado y predecible para presupuestar trabajos de captura grandes.
¿Puedo capturar muchas URLs en volumen?
Sí, cada URL es una solicitud asíncrona independiente que se cobra por separado, lo cual se adapta bien a rastreos programados sobre conjuntos grandes de páginas.
¿En qué formato recibo la imagen?
Una sola imagen unida que representa todo el largo de scroll de la página, entregada por webhook o enlace firmado.
¿Cómo obtengo la captura?
Mediante un webhook firmado cuando la tarea termina, o un enlace firmado que se mantiene válido por 24 horas.
¿Qué pasa si la página no carga?
La tarea reintenta automáticamente hasta tres veces; si sigue fallando recibirá un error claro y nunca se le cobra.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/screenshot-full \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com"}'const res = await fetch("https://api.kit.forhosting.com/web/screenshot-full", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://ejemplo.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/screenshot-full",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://ejemplo.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/screenshot-full", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://ejemplo.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://ejemplo.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/screenshot-full", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"url": "https://ejemplo.com"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.screenshot_full",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
timeout_sec | 30 |
max_crawl_pages | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |