# Método de Scraping 2: Deep Scan Interactivo (Playwright) 🕵️
Cuando una página web moderna utiliza frameworks como React, Vue, Angular o Svelte, los enlaces de descarga directa de documentos suelen estar ocultos. El documento solo se genera o descarga tras realizar una acción física en la interfaz, como pulsar un botón que invoca una API de fondo. Para este escenario, `bgustscraper` activa automáticamente el **Deep Scan Interactivo**.
---
## ⚙️ Principio de Funcionamiento
El Deep Scan se ejecuta dentro del subproceso controlado por **Stealth Playwright** en Node.js:
1. **Escaneo del DOM Activo:** Se ejecuta una función selectora avanzada en el navegador renderizado.
2. **Detección de Botones e Interactivos:** Identifica elementos clickables (como `<button>`, `<span role="button">`, `<input type="submit">`, `<a class="download">`) que contengan palabras clave asociadas a descargas:
* `"descargar"`, `"descarga"`, `"descargas"`
* `"download"`, `"export"`, `"obtener"`, `"pdf"`, `"csv"`, `"xls"`
3. **Simulación de Clic Secuencial:** El motor simula de forma realista el movimiento del mouse y pulsa secuencialmente cada uno de los botones identificados.
4. **Interceptación de Eventos de Descarga:** Playwright captura el evento `page.waitForEvent('download')` de forma paralela para evitar bloqueos:
* Intercepta la descarga entrante.
* Guarda el archivo temporalmente.
* Extrae la URL de descarga original, la ruta del archivo y los metadatos.
5. **Propagación:** Retorna los documentos capturados "en caliente" al orquestador de Rust.
---
## 🛠️ Código y Archivos Relacionados
* **Implementación Node.js (Worker):** [worker/index.js](file:///home/august/code/bgust-nlp-ecosystem/bgustscraper/worker/index.js)
* Contiene la lógica asíncrona de interacción, simulación de clics y escucha de eventos de descarga bajo la bandera `deep_scan: true`.
* **Orquestación en Rust:** [src/main.rs](file:///home/august/code/bgust-nlp-ecosystem/bgustscraper/src/main.rs)
* Invoca `worker.scrape(&url, Some(ScrapeOptions { deep_scan: true, ... }))` si el escaneo sintáctico inicial resulta en cero documentos detectados.
---
## ⚡ Flujo de Entrada y Salida
* **Entrada:**
* Petición JSON con parámetro `"deep_scan": true` e `"url"` de navegación.
* **Salida:**
* Estructura JSON que detalla los archivos descargados:
```json
{
"status": "success",
"downloaded_files": [
{
"filename": "reporte_2026.pdf",
"url": "https://example.com/api/v1/generate-report?id=123",
"path": "downloads/reporte_2026.pdf"
}
]
}
```
---
## ⚖️ Ventajas y Desventajas
### Ventajas:
* **Rompe Single Page Applications (SPAs):** Capaz de descargar informes en portales interactivos que no listan archivos de forma estática.
* **Evasión de CAPTCHAs:** Al interactuar físicamente como un humano, reduce los perfiles de comportamiento que delatan a un scraper básico.
* **Automatización Extrema:** Resuelve el proceso laborioso de hacer clics repetitivos manualmente.
### Desventajas:
* **Mayor Consumo:** Requiere un navegador Chromium completo activo en segundo plano, consumiendo significativamente más memoria RAM y CPU.
* **Tiempo de Ejecución:** Es mucho más lento al requerir esperas explícitas de eventos de red y descargas del navegador.