Renderizar página JavaScript
Obtenga el HTML de una página tal como lo termina el navegador de un visitante, con sus scripts ejecutados y el contenido cargado, no la cáscara casi vacía de una descarga simple. Útil para auditorías de buscadores, extracción de contenido y revisiones previas. Paga por uso, sin suscripción.
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.
La mayoría de los scrapers piden una URL y reciben una cáscara: un documento casi vacío que espera a que termine de cargar un bundle.
Por qué el código de muchas páginas llega casi vacío
Si abre el código fuente de muchos sitios modernos, encontrará poco más que etiquetas de script. La interfaz se construye dentro del navegador del visitante, así que el texto que una persona lee solo existe después de que esos scripts se ejecutan. Quien extrae, indexa, prueba o archiva la descarga en bruto trabaja con una página que nunca se terminó. Esta herramienta abre la dirección en un navegador real sin ventana, ejecuta los scripts, aplica los estilos y espera a que la página se asiente o a que se cumpla la condición que usted indique. Después devuelve el HTML tal como está la página en ese momento, con todo lo que añadieron los scripts.
Qué se hace con la página terminada
Los especialistas en buscadores comparan lo que ve un rastreador tras ejecutar los scripts con el marcado que pretendían, para detectar contenido que aparece tarde. Otros renderizan primero la página y luego pasan el resultado a un extractor de artículos o a un conversor a Markdown, porque ese contenido nunca aparece en la descarga en bruto. Los equipos de calidad comprueban antes de publicar que una redirección hecha por la propia página, un aviso de cookies o una variante de prueba salieron como se esperaba. Guardar un resultado y compararlo con el siguiente es también una forma sencilla de notar un cambio de diseño.
La brecha entre el código fuente y el DOM
Ver el código fuente y ver la página renderizada se volvieron dos cosas distintas. Los frameworks que arman la interfaz del lado del cliente entregan un documento que es casi puro script; el contenido que una persona realmente lee solo existe después de que ese script corre. Quien intente scrapear, indexar, probar o archivar esa página a partir de la respuesta HTML cruda está trabajando con una página inconclusa.
Qué ocurre realmente en cada solicitud
Una instancia de navegador headless abre la URL, ejecuta los scripts, aplica las hojas de estilo, y espera a que la red se estabilice o a la condición que indique, y luego serializa el modelo de objetos del documento en vivo de vuelta a HTML. Lo que recibe no es la respuesta del servidor — es la página tal como queda después de que el navegador terminó su trabajo, incluido el contenido inyectado por frameworks del lado del cliente, la hidratación y las peticiones diferidas.
Qué puede hacer con ella
Auditorías de SEO y renderizado
Compare lo que realmente ven los buscadores contra su marcado previsto, capturando el DOM posterior al JavaScript.
Entrada para extracción posterior
Renderice la página primero y pase el resultado al extractor de artículos o al conversor a Markdown para contenido que nunca carga en el HTML crudo.
QA contra el comportamiento en producción
Verifique que una redirección del lado del cliente, un aviso de cookies o una variante de A/B se renderizaron como debían antes de publicar.
Preguntas frecuentes
¿Ejecuta JavaScript?
Sí — un motor de navegador real ejecuta los scripts, aplica los estilos y espera a que la página se estabilice antes de capturar el DOM.
¿Puedo esperar a un elemento específico antes de capturar?
Sí, puede indicar un selector o una condición de carga para que el contenido de hidratación lenta quede incluido y no capturado a medio construir.
¿Hay periodo de prueba gratuito?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Qué pasa si la página no renderiza?
La tarea reintenta automáticamente hasta tres veces; una corrida que sigue fallando devuelve un error claro y nunca se cobra.
¿Puedo renderizar páginas que requieren inicio de sesión?
Puede pasar las cookies o encabezados necesarios para llegar a la vista autenticada, siempre que esté autorizado a acceder a esa página.
Herramientas relacionadas
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, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/web/render \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com"}'const res = await fetch("https://api.kit.forhosting.com/web/render", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://example.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/render",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://example.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/render", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://example.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://example.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/render", 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://example.com"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.render",
"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. |
Notas técnicas
Esta API de HTML renderizado ejecuta ese bundle primero: un navegador real corre el JavaScript de la página, espera a que se estabilice, y devuelve el DOM tal como lo construiría el navegador de una persona.
Por qué esto es distinto de un simple HTTP
Una solicitud HTTP básica nunca ejecuta un script; solo devuelve bytes. Eso funciona para un blog estático y no sirve de nada para una aplicación de una sola página, un panel detrás de enrutamiento del lado del cliente, o cualquier página que decide qué mostrar según cookies, el viewport o una llamada a una API hecha después de cargar. El renderizado cierra esa brecha sin que tenga que mantener su propia granja de navegadores.
De dónde viene el renderizado headless
Los navegadores headless empezaron como herramientas de prueba, pensadas para manejar motores reales sin una ventana visible para que la integración continua pudiera recorrer una interfaz sin supervisión. Usar esa misma maquinaria para capturar un DOM terminado con fines de scraping y archivo es una extensión natural — el navegador ya hacía el trabajo de renderizar, solo necesitaba un endpoint que pidiera el resultado en lugar del veredicto de una prueba.
Cómo encaja en un flujo automatizado
El HTML renderizado se convierte en la entrada de lo que sigue: analizarlo, pasarlo al extractor de artículos, o compararlo con el renderizado de ayer para detectar un cambio de maqueta. Como la respuesta es asíncrona con un task_id y un webhook, un paso de renderizado encaja en un flujo basado en colas igual que cualquier otra tarea — sin sesión de navegador síncrona que mantener abierta de su lado.
Casos de integración
Scraping de aplicaciones de una sola página
Extraiga datos estructurados de un panel en React o Vue que solo llena sus tablas después de una llamada a una API del lado del cliente.
Preguntas técnicas
¿En qué se diferencia de una captura de pantalla?
Una captura devuelve una imagen; este endpoint devuelve el documento renderizado como texto HTML, así puede analizarlo, compararlo o pasarlo a otra herramienta.
¿Cómo se cobra?
$0.040 por solicitud más $0.001 por URL, publicado en esta página, sin cargos ocultos por segundo de navegador.
¿Cómo recibo el resultado?
Por webhook firmado en cuanto termina el renderizado, o por un enlace firmado válido por 24 horas si prefiere ir a buscarlo usted mismo.