ForHosting KIT · Web: scraping y monitoreo

Renderizar página JavaScript

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. 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.

● EstablePor solicitud + por URL$0.040
Úselo desde WebAPIEmailApp prontoTelegram pronto

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 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.

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.

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.

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.

¿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.

¿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. 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 se cobra?

$0.040 por solicitud más $0.001 por URL, publicado en esta página, sin cargos ocultos por segundo de navegador.

¿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.

¿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.

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.

POSThttps://api.kit.forhosting.com/web/render

¿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.

curl -X POST https://api.kit.forhosting.com/web/render \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://ejemplo.com"}'
{
  "url": "https://ejemplo.com"
}
{
  "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.

Por solicitud$0.040
Por URL$0.001

Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.

timeout_sec30
max_crawl_pages25
HTTPCódigoSignificado
401unauthorizedAPI key ausente o inválida.
402insufficient_balanceEl saldo no cubre el precio de la tarea.
404unknown_typeEl tipo de tarea no existe.
429rate_limitedDemasiadas peticiones. Use el webhook en vez de sondear.
422task_failedLa tarea falló tras 3 reintentos. No se cobra.

Ver la documentación completa del KIT →