Volver al inicio

Script de Exportación de Lista de Reproducción de Yandex Music en JS

El artículo describe script JavaScript para exportar listas de reproducción de Yandex Music vía DevTools. Considera lista virtualizada, recopila pistas al hacer scroll a TXT/CSV. Código completo, ejemplos y mejoras para desarrolladores.

Exportación de Pistas de Yandex Music: script JS en 10 seg
Advertisement 728x90

Exportar una lista de reproducción de Yandex Music mediante JavaScript en DevTools

Los desarrolladores a menudo necesitan extraer una lista de canciones de Yandex Music para transferirla a otros servicios, hacer copias de seguridad o analizarla. No hay una función oficial de exportación, pero un script de JavaScript resuelve el problema simulando el desplazamiento. Se ejecuta en la consola del navegador, teniendo en cuenta la lista virtualizada: las canciones se cargan dinámicamente, y el DOM solo contiene la parte visible.

El script recopila datos de artista, título y duración, exportando a TXT o CSV. El proceso toma segundos para listas de reproducción con hasta miles de canciones.

Preparación y ejecución

  • Abre la lista de reproducción deseada en Yandex Music.
  • Inicia DevTools (F12) y ve a la pestaña Consola.
  • Pega el script en la consola y ejecútalo.
  • Desplaza la lista de reproducción hasta el final—el script capturará todas las canciones.
  • Ejecuta el comando finalizeCapture() para finalizar.
  • Descarga el archivo mediante el enlace proporcionado.
// Pega este código en la Consola
let tracks = [];
const observer = new MutationObserver(() => {
  const items = document.querySelectorAll('[data-testid="track-row"]');
  items.forEach(item => {
    if (!item.dataset.captured) {
      const artist = item.querySelector('[data-testid="artist-name"]')?.textContent.trim();
      const title = item.querySelector('[data-testid="track-title"]')?.textContent.trim();
      const duration = item.querySelector('[data-testid="track-duration"]')?.textContent.trim();
      if (artist && title) {
        tracks.push({artist, title, duration});
        item.dataset.captured = 'true';
      }
    }
  });
});
observer.observe(document.body, {childList: true, subtree: true});

window.finalizeCapture = () => {
  observer.disconnect();
  const data = tracks.map(t => `${t.artist} - ${t.title}${t.duration ? ` (${t.duration})` : ''}`).join('\n');
  const blob = new Blob([data], {type: 'text/plain'});
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = 'playlist.txt';
  a.click();
  console.log(`Captured ${tracks.length} tracks`);
};

Este código usa MutationObserver para rastrear nuevos elementos en el DOM. Los selectores están adaptados a la estructura actual de Yandex Music—verifícalos si ocurren cambios.

Google AdInline article slot

Formatos de salida y ejemplos

  • TXT: Una lista simple de cadenas Artista - Título o con duración.
  • CSV: Columnas Artista,Título,Duración para importar en hojas de cálculo.

Ejemplo TXT para una lista de música electrónica:

Daft Punk - One More Time
The Weeknd - Blinding Lights
Justice - D.A.N.C.E.

Versión CSV:

Daft Punk,One More Time,4:02
The Weeknd,Blinding Lights,3:20
Justice,D.A.N.C.E.,4:00

La lista virtualizada requiere desplazamiento manual: el script no automatiza el desplazamiento para evitar bloqueos. Para listas grandes, usa el evento de rueda o Page Down.

Google AdInline article slot

Detalles de implementación técnica

La lista virtualizada (por ejemplo, basada en react-window o similar) renderiza solo las filas visibles, ahorrando memoria. Un querySelectorAll estándar capturará 20–50 canciones, con el resto oculto.

Componentes clave del script:

  • MutationObserver: Responde a adiciones de nodos DOM durante el desplazamiento.
  • Bandera Dataset: Evita duplicados (item.dataset.captured).
  • Blob y URL.createObjectURL: Genera un archivo descargable sin servidor.
  • Selectores data-testid: Estables, menos propensos a cambiar en SPAs.

Para CSV, añade conversión:

Google AdInline article slot
const csv = tracks.map(t => `${t.artist},"${t.title}",${t.duration || ''}`).join('\n');

Maneja el escape de comillas en títulos para CSV correcto.

Posibles mejoras para producción

  • Desplazamiento automático: setInterval(() => window.scrollBy(0, 500), 100) con pausas.
  • Exportación JSON: JSON.stringify(tracks, null, 2).
  • Soporte de álbum: Selectores similares para /artist/ y /album/.
  • Filtros: Excluir duplicados por ID de canción.
  • Extensión de navegador: Script de contenido con UI para botones.

Prueba en diferentes listas de reproducción—la estructura puede variar para podcasts o grabaciones en vivo.

Puntos clave

  • El script funciona exclusivamente en el navegador, sin APIs o extensiones.
  • Tiene en cuenta la lista virtualizada—recopila canciones solo durante el desplazamiento.
  • La exportación TXT/CSV está lista para importar en Spotify, Apple Music.
  • Fácil de modificar: añade ID de canción o portada.
  • Útil para análisis: estadísticas por género, duración.

— Editorial Team

Advertisement 728x90

Leer después