Exporter une playlist Yandex Music via JavaScript dans DevTools
Les développeurs ont souvent besoin d'extraire une liste de titres de Yandex Music pour les transférer vers d'autres services, les sauvegarder ou les analyser. Il n'existe pas de fonction d'export officielle, mais un script JavaScript résout le problème en simulant le défilement. Il s'exécute dans la console du navigateur, en tenant compte de la liste virtualisée : les titres se chargent dynamiquement, le DOM ne contenant que la partie visible.
Le script collecte les données d'artiste, de titre et de durée, et les exporte en TXT ou CSV. Le processus prend quelques secondes pour des playlists allant jusqu'à des milliers de titres.
Préparation et exécution
- Ouvrez la playlist souhaitée dans Yandex Music.
- Lancez DevTools (F12) et allez dans l'onglet Console.
- Collez le script dans la console et exécutez-le.
- Défilez la playlist jusqu'à la fin — le script capturera tous les titres.
- Exécutez la commande
finalizeCapture()pour terminer. - Téléchargez le fichier via le lien fourni.
// Collez ce code dans la Console
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(`Capturé ${tracks.length} titres`);
};
Ce code utilise MutationObserver pour suivre les nouveaux éléments dans le DOM. Les sélecteurs sont adaptés à la structure actuelle de Yandex Music — vérifiez-les en cas de modifications.
Formats de sortie et exemples
- TXT : Une simple liste de chaînes
Artiste - Titreou avec durée. - CSV : Colonnes
Artiste,Titre,Duréepour importation dans des tableurs.
Exemple TXT pour une playlist électronique :
Daft Punk - One More Time
The Weeknd - Blinding Lights
Justice - D.A.N.C.E.
Version CSV :
Daft Punk,One More Time,4:02
The Weeknd,Blinding Lights,3:20
Justice,D.A.N.C.E.,4:00
La liste virtualisée nécessite un défilement manuel : le script n'automatise pas le défilement pour éviter les blocages. Pour les grandes playlists, utilisez l'événement de molette ou Page Down.
Détails techniques d'implémentation
La liste virtualisée (par exemple, basée sur react-window ou similaire) affiche uniquement les lignes visibles, économisant la mémoire. Un querySelectorAll standard capturera 20 à 50 titres, le reste étant masqué.
Composants clés du script :
- MutationObserver : Répond aux ajouts de nœuds DOM pendant le défilement.
- Indicateur Dataset : Empêche les doublons (
item.dataset.captured). - Blob et URL.createObjectURL : Génère un fichier téléchargeable sans serveur.
- Sélecteurs data-testid : Stables, moins susceptibles de changer dans les SPAs.
Pour le CSV, ajoutez la conversion :
const csv = tracks.map(t => `${t.artist},"${t.title}",${t.duration || ''}`).join('\n');
Gérez l'échappement des guillemets dans les titres pour un CSV correct.
Améliorations possibles pour la production
- Défilement automatique :
setInterval(() => window.scrollBy(0, 500), 100)avec pauses. - Export JSON :
JSON.stringify(tracks, null, 2). - Prise en charge d'album : Sélecteurs similaires pour /artist/ et /album/.
- Filtres : Exclure les doublons par ID de titre.
- Extension navigateur : Script de contenu avec interface pour boutons.
Testez sur différentes playlists — la structure peut varier pour les podcasts ou enregistrements live.
Points clés
- Le script fonctionne exclusivement dans le navigateur, sans API ni extensions.
- Tient compte de la liste virtualisée — collecte les titres uniquement pendant le défilement.
- L'export TXT/CSV est prêt pour importation dans Spotify, Apple Music.
- Facile à modifier : ajoutez ID de titre ou pochette.
- Utile pour l'analyse : statistiques par genre, durée.
— Editorial Team
Aucun commentaire pour le moment.