FOLIO: AUD-20260923-001 Secuencia: Auditoría #001 del día 2026-09-23
📅 2026-09-23 · COT 👤 Auditor: Anderson Mares (AMR TECH) ● VIGENTE

Fix: Dropi Scraper — Descripción, Imágenes & Especificaciones

Diagnóstico y corrección de 6 problemas que impedían extraer y persistir datos enriquecidos de productos Dropi.

6 BUGS CORREGIDOS PHP SINTAXIS OK Extensión Chrome · API PHP

Archivos modificados

dropi-scraper/product-details-scraper.js 4 cambios
api-dropshipping.php 3 cambios

Problemas encontrados y correcciones

BUG 1 · ALTO Imágenes no capturadas — Selectores insuficientes

El scraper solo buscaba img[src*="/products/"] y similares. La galería Angular de Dropi usa app-gallery-product, .swiper-slide img, .slick-slide img y lazy-loading con data-src / data-lazy.

✓ Agregados 10 selectores de galería Angular ✓ Soporte lazy-load: data-src, data-lazy, data-original ✓ Fallback: todos los img ≥100×100px
BUG 2 · ALTO Descripción vacía — Selectores y límite de longitud

Solo buscaba [class*="description"]. Dropi usa clases como description-product, product-info, info-product, componentes app-description-product. Además rechazaba textos >700 chars cuando las descripciones reales pueden ser hasta 3500.

✓ 17 selectores de descripción ✓ Límite ampliado: 700 → 3500 chars ✓ Mejor detección post-label
BUG 3 · MEDIO Especificaciones no capturadas — Solo buscaba ul li

Dropi puede presentar specs en definición dl/dt/dd, tablas table tr td, o listas con clases characteristic, attribute. Se añadieron todos estos patrones.

✓ Soporte dl/dt/dd ✓ Soporte table tr td ✓ Nuevas clases Angular: characteristic, attribute, feature
BUG 4 · MEDIO Timing insuficiente — Angular necesita más de 2s

El auto-scan se ejecutaba a 2000ms. Angular SPA + lazy-loading de galería necesitan ~4s para renderizar todo el contenido.

✓ Primer scan: 2000 → 4000ms ✓ Reintento automático a 8000ms si faltan imágenes o descripción
BUG 5 · CRÍTICO MySQL — Faltan columnas images, details, seller_location, sku, has_details

La tabla MySQL solo tenía description y card_text. Las columnas de datos enriquecidos nunca se creaban → datos del scraper de detalles se perdían en DB.

✓ AUTO-ALTER: images (MEDIUMTEXT) ✓ AUTO-ALTER: details (TEXT) ✓ AUTO-ALTER: seller_location, sku, product_type, has_details
BUG 6 · CRÍTICO MySQL UPDATE incompleto — description, images, details ignorados al sincronizar

El ON DUPLICATE KEY UPDATE en syncDropiProducts no incluía description. El endpoint update_details no persistía seller_location, sku, has_details.

✓ description incluida en ON DUPLICATE UPDATE ✓ images/details con COALESCE (no sobreescribe datos ricos) ✓ update_details persiste seller_location, sku, has_details

Flujo correcto post-fix

  1. 1
    Escanear catálogo

    Botón SCAN en la extensión → captura título, precio, stock, imagen principal de cada tarjeta.

  2. 2
    Extraer detalles

    Botón Extraer Detalles en el viewer → abre cada URL de detalle, espera 4s (antes 2s), captura galería completa (≤20 imágenes), descripción y especificaciones.

  3. 3
    Sincronizar API

    Botón Sync API → envía todo a api-dropshipping.php. MySQL ahora guarda description, images, details, seller_location, sku y has_details correctamente.

Nota sobre selectores en producción

Si Dropi actualiza su Angular app y cambia los nombres de componentes, los selectores deberán actualizarse. Para diagnosticar: abre DevTools en la página de detalle Dropi → Inspector → busca el elemento que contiene la descripción → copia su clase y agrégala al array descSelectors en product-details-scraper.js.

⚡ AMR TECH™ · Desarrollado / Auditado por Anderson Mares