Volver al blog

Cómo encontrar y raspar APIs ocultas con las herramientas de desarrollo del navegador

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

12-Aug-2026

TL;DR:

  • Una API oculta es una solicitud que la página utiliza pero no anuncia como una API pública para desarrolladores. Puede devolver JSON, datos de GraphQL, fragmentos HTML o un flujo consumido por el frontend.
  • Las herramientas para desarrolladores del navegador revelan el contrato de solicitud. Registra la acción de la página, filtra Fetch/XHR, inspecciona la URL, el método, la consulta, la carga, la respuesta, el iniciador y el comportamiento de paginación.
  • Reproduce solo solicitudes públicas o autorizadas. Detente cuando la solicitud dependa de inicio de sesión, datos privados, tokens de control de acceso o un uso prohibido por los términos del sitio.
  • Mantén el navegador como una capa de descubrimiento y respaldo. Un endpoint interno puede cambiar sin previo aviso, y algunas solicitudes requieren cookies o estado establecido en la misma sesión de navegador.
  • Valida campos e identidad de página. Un estado exitoso no es suficiente; verifica el esquema esperado, la configuración regional, el cursor de paginación y los registros públicos requeridos.

Muchas páginas de JavaScript obtienen su contenido real después de que se carga el documento. Las tarjetas renderizadas son solo una presentación de una respuesta estructurada ya visible en el panel de Red del navegador.

Raspar APIs ocultas significa observar esas solicitudes iniciadas por el navegador y, donde los datos son públicos o explícitamente autorizados, reproducir el contrato de solicitud más pequeño y estable. No significa descubrir endpoints privados, eludir la autenticación o extender los privilegios de una página.

¿Qué es una API Oculta?

Una API oculta es una interfaz interna HTTP o WebSocket utilizada por el frontend propio de un sitio sin ser presentada como una API pública soportada. El endpoint puede no estar documentado y puede cambiar cada vez que el frontend cambia.

Las formas de respuesta comunes incluyen:

  • Objetos o matrices JSON;
  • Sobres de respuesta de GraphQL;
  • Fragmentos HTML insertados en la página;
  • Flujos de eventos delimitados por nuevas líneas;
  • Formatos binarios que requieren el decodificador propio del sitio.

La frase describe la descubribilidad, no el permiso. Una solicitud visible en un navegador aún puede transportar estado de cuenta, datos personales, contenido licenciado o restricciones contractuales. Mantén el flujo de trabajo dentro de superficies públicas o autorizadas.

Raspeo del DOM vs Solicitudes JSON Internas

La fuente correcta es la que devuelve los campos aprobados con el contrato más pequeño y estable.

Pregunta Extracción del DOM Extracción de solicitud interna
Formato de datos Elementos HTML y atributos A menudo JSON o GraphQL estructurado
Descubrimiento Inspeccionar página renderizada Inspeccionar actividad de Red
Sensibilidad al rediseño Cambios en CSS y DOM Cambios en endpoint y esquema
Requisito del navegador Requerido para renderizado del cliente A menudo requerido para descubrimiento o estado de sesión
Paginación Clics, desplazamiento, enlaces siguientes Página, desplazamiento, cursor o carga de solicitud
Mejor uso Los datos existen solo en presentación Campos públicos estables aparecen en una respuesta estructurada

Utiliza el DOM cuando la presentación propia de la página es la fuente autorizada o cuando el contrato de solicitud es demasiado frágil. Utiliza una respuesta interna cuando expone los campos públicos requeridos de manera clara y el flujo de trabajo puede honrar los mismos límites de acceso.

Paso 1 — Abre DevTools Antes de la Acción de la Página

El panel de Red solo registra solicitudes realizadas mientras está abierto. Abre DevTools, selecciona Red, habilita Preservar registro cuando la navegación está involucrada, y limpia la lista existente.

La documentación de referencia de la Red de Chrome DevTools documenta Preservar registro, filtros de tipo de solicitud, inspección de carga, vistas previas de respuesta, iniciadores, exportación HAR y Copiar como fetch o cURL.

Ahora realiza una acción que cargue los datos:

  • enviar una búsqueda pública;
  • cambiar una categoría;
  • cargar la siguiente página de resultados;
  • expandir un panel de detalle público;
  • desplazarte hasta que aparezca el siguiente lote.

Una acción crea una diferencia de solicitud más pequeña y auditable que interactuar con toda la página primero.

Paso 2 — Filtra Fetch/XHR y Encuentra la Respuesta que Contiene Datos

Selecciona Fetch/XHR, luego inspecciona las solicitudes cuyo tiempo se alinea con la acción de la página. Busca en los cuerpos de respuesta un valor público estable visible en la página, como un ID de ítem, título exacto o código de categoría.

Verifica estos campos:

Campo de DevTools Qué capturar Por qué es importante
URL de solicitud Origen, ruta y consulta Define la ruta y los parámetros de la página
Método GET o POST Determina dónde residen los parámetros
Carga Cadena de consulta, datos de formulario o JSON Transporta filtros y cursores
Respuesta Esquema de nivel superior y campos requeridos Confirma que la solicitud contiene los datos objetivo
Iniciador Script o pila de llamadas Muestra qué acción de página lo creó
Encabezados Tipo de contenido y contexto público necesario Distingue representación y configuración regional
Tiempo Inicio y duración Ayuda a correlacionar la solicitud con la acción

No copies cada encabezado del navegador. Comienza desde el método, URL, carga y contexto público documentado. Añade un encabezado solo cuando una prueba controlada demuestre que el contrato de solicitud lo necesita.

Paso 3 — Decidir si la Solicitud es Segura para Reproducir

Una solicitud reproducible debe permanecer dentro del mismo límite de autorización que la página.

Proceda cuando:

  • la respuesta contiene datos públicos a los que el usuario puede acceder sin una cuenta;
  • la solicitud es parte de una integración o prueba explícitamente autorizada;
  • el volumen previsto es proporcional;
  • los campos son necesarios para el conjunto de datos declarado.

Deténgase cuando:

  • la respuesta expone datos privados o restringidos a la cuenta;
  • la reproducción cruzaría un inicio de sesión, un muro de pago o un límite de control de acceso;
  • la solicitud depende de un secreto que no es suyo para usar;
  • los términos del sitio o la aprobación del proyecto no permiten la actividad.

La guía de exportación HAR de Chrome señala que las exportaciones saneadas omiten encabezados sensibles como Cookie, Set-Cookie y Authorization. Utilice capturas saneadas para la documentación a menos que la tarea de depuración aprobada requiera específicamente valores protegidos.

Paso 4 — Copie la Solicitud, Luego Redúzcala

DevTools puede copiar una solicitud como cURL o como una llamada fetch de Node.js. Trate esa salida como una instantánea de diagnóstico, no como código de producción.

Elimine en este orden:

  1. encabezados de seguimiento y generados por el navegador;
  2. cookies no relacionadas con la representación pública;
  3. valores de correlación únicos;
  4. parámetros que no cambian el resultado requerido;
  5. encabezados de negociación de contenido redundantes.

Después de cada cambio, valide el esquema de respuesta y los registros requeridos. El objetivo es un contrato de solicitud mínimo que pueda ser explicado campo por campo.

La API Fetch del navegador trata las cookies y los encabezados de autenticación como credenciales. La guía MDN de la API Fetch explica cómo el manejo de credenciales interactúa con solicitudes de origen cruzado. No transporte credenciales a un script independiente a menos que el trabajo esté explícitamente autorizado y el modelo de almacenamiento y acceso haya sido revisado.

Paso 5 — Mapee la Respuesta en un Esquema Estable

Las respuestas internas a menudo exponen más campos de los que el conjunto de datos necesita. Defina un contrato de salida estrecho.

json Copy
{
  "source_url": "https://example.com/public-search?q=notebook",
  "query": "notebook",
  "page": {
    "cursor": "next-public-cursor",
    "has_more": true
  },
  "items": [
    {
      "id": "item-123",
      "title": "Illustrative public result",
      "url": "https://example.com/public/items/item-123",
      "price": null
    }
  ]
}

El esquema anterior es una muestra ilustrativa. Mantenga los campos anulables como anulables, retenga la URL de origen y preserve un identificador estable cuando la respuesta proporcione uno.

Inicie una sesión gratuita de Scrapeless Scraping Browser cuando el descubrimiento requiera JavaScript y estado del navegador.

Paso 6 — Comprender la Paginación Antes de Escalar

La paginación generalmente aparece en uno de cuatro lugares:

  • un número page en la consulta;
  • un offset más un límite fijo;
  • un cursor opaco en la respuesta;
  • una variable GraphQL en el cuerpo de la solicitud.

Active exactamente una acción de siguiente página y compare las dos solicitudes. Registre qué valor cambió y qué campo de respuesta proporciona el siguiente valor. No invente ni decodifique cursores opacos.

Utilice una regla de detención vinculada al contrato: has_more se vuelve falso, el siguiente cursor está ausente, el arreglo de resultados está vacío o se alcanza el recuento máximo de páginas aprobado. Deduplique en un ID público estable en lugar de texto de título.

Paso 7 — Mantener el Estado de Sesión Cuando la Solicitud lo Necesita

Algunas solicitudes internas solo funcionan después de que la página establece cookies, consentimiento, ubicación u otro estado permitido. En ese caso, mantenga el descubrimiento y la extracción en una sesión de navegador delimitada.

Scrapeless Scraping Browser ejecuta JavaScript en un navegador en la nube y mantiene el estado de sesión a través de la navegación aprobada. Úselo para observar la solicitud y extraer la respuesta del mismo contexto en lugar de exportar un estado opaco a un cliente no relacionado.

La documentación de Scrapeless Scraping Browser documenta las duraciones de sesión delimitadas y los parámetros de enrutamiento geográfico. Mantenga la geografía, el idioma, las cookies y la secuencia de la página fijos mientras valida la solicitud.

El navegador sigue siendo el respaldo seguro cuando el endpoint interno es inestable, restringido a la cuenta, fuertemente acoplado a un estado efímero o carece de campos dependientes de la presentación.

Elija la extracción DOM renderizada cuando:

  • el esquema de respuesta cambia más a menudo que los elementos semánticos de la página;
  • un campo público se calcula solo después del renderizado del cliente;
  • el modelo de autorización del endpoint no está claro;
  • reproducir la solicitud requeriría copiar credenciales sensibles;
  • la representación visible de la página es el conjunto de datos de registro.
    La guía de renderizado JavaScript explica la diferencia entre el HTML inicial, el contenido renderizado por el cliente y las solicitudes asíncronas.

Solución de problemas de raspado de API ocultas

Observación Explicación probable Verificación
La respuesta es HTML, no JSON Redirección, desafío, consentimiento o representación de error URL final, tipo de contenido, título, marcador de cuerpo
JSON tiene elementos vacíos Configuración regional incorrecta, falta un parámetro público o fin de paginación Comparar la solicitud del navegador en funcionamiento y el estado de la página
Los campos desaparecen Deriva de esquema o tipo de resultado condicional Preservar campos anulables y validar cada tipo de elemento
El cursor se repite Fuente de cursor incorrecta o solicitud en caché Leer el siguiente cursor de la respuesta aceptada actual
La solicitud independiente es rechazada Se requiere el estado de sesión del navegador Mantener la extracción dentro del contexto autorizado del navegador
Las cuentas de DOM y JSON difieren Filtrado de UI, personalización o registros de respuesta adicionales Definir qué representación es autoritativa

Cambia una variable a la vez y guarda un ejemplo sanitizado de la forma de respuesta aceptada. Si la solicitud cruza un límite de acceso, detente en lugar de ajustar al cliente.

Conclusión: Trata el contrato de solicitud como una dependencia

Raspar APIs ocultas puede reemplazar el frágil análisis de DOM con datos públicos estructurados, pero el punto final es una dependencia interna en lugar de un contrato público compatible. Descúbrelo a través de una acción de página, reduce la solicitud copiada, mapea solo los campos requeridos y documenta la paginación y el estado.

Mantén un respaldo del navegador para cambios de esquema y flujos vinculados a sesiones. Vuelve a verificar la autorización siempre que cambie la página, el punto final o el alcance del conjunto de datos.


Únete a la comunidad de Scrapeless para discutir el descubrimiento de datos públicos y el diseño de esquemas: Discord · Telegram.

Revisa los precios de Scrapeless, luego regístrate en app.scrapeless.com para obtener el runtime de Scraping Browser gratis.


FAQ

Q: ¿Es legal raspar una API oculta?

Raspar una solicitud interna puede ser legal cuando accede a datos públicos o autorizados, pero las leyes, contratos y hechos varían, así que revisa los términos del sitio y obtén asesoría legal para el proyecto.

Q: ¿Es una API oculta lo mismo que una API pública?

Una API oculta se utiliza internamente por un frontend y no ofrece promesas de documentación, estabilidad o acceso de terceros, mientras que una API pública está intencionalmente expuesta bajo un contrato soportado.

Q: ¿Necesitas un proxy para inspeccionar APIs ocultas?

Un proxy no es necesario para la inspección de DevTools local, pero puede ser requerido para un conjunto de datos específico de ubicación aprobado o un flujo de colección proporcional.

Q: ¿Qué debes hacer cuando una solicitud interna devuelve una página de acceso denegado?

Detente e inspecciona la representación devuelta, el límite de autorización y el alcance del proyecto; no trates un encabezado o token diferente como permiso.

Q: ¿Cómo manejas cambios en el DOM o el esquema?

Vuelve a ejecutar una acción de página conocida, compara el contrato de solicitud y respuesta, actualiza los mapeos anulables y mantén un respaldo de DOM renderizado para campos que la respuesta interna ya no suministra.

Q: ¿Cuánta concurrencia debe usar un raspador de API oculta?

Mantén la concurrencia en tres o menos trabajadores por host hasta que las reglas publicadas del sitio, la autorización y la estabilidad observada soporten un nivel más alto.

Q: ¿Puede funcionar este flujo sin un agente de IA?

Sí, el descubrimiento de DevTools, la reproducción de solicitudes sanitizadas, la validación de esquema y el respaldo del navegador son pasos de ingeniería determinísticos que no requieren un agente de IA.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar