Diagnóstico y corrección de 6 problemas que impedían extraer y persistir datos enriquecidos de productos Dropi.
dropi-scraper/product-details-scraper.js
4 cambios
api-dropshipping.php
3 cambios
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.
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.
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.
El auto-scan se ejecutaba a 2000ms. Angular SPA + lazy-loading de galería necesitan ~4s para renderizar todo el contenido.
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.
El ON DUPLICATE KEY UPDATE en syncDropiProducts no incluía description. El endpoint update_details no persistía seller_location, sku, has_details.
Botón SCAN en la extensión → captura título, precio, stock, imagen principal de cada tarjeta.
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.
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.