Execute this in the browser console while visiting a playlist page like https://www.beatport.com/genre/techno-raw-deep-hypnotic/92/top-100
// Find all .container elements
const containers = document.querySelectorAll('.container');
// Collect details (song, artist, and additional info) from each container
const details = Array.from(containers).map(container => {
// Find the first and second <a> elements with a title attribute inside the container
const titleLinks = container.querySelectorAll('a[title]');
const titles = Array.from(titleLinks).map(link => link.title);
// Find the additional info in <span>
const additionalSpan = container.querySelector('span span'); // Adjust selector if needed
const additionalInfo = additionalSpan ? additionalSpan.textContent.trim() : null;
// Ensure there are at least two titles and include the additional info
return titles.length >= 2 ? { song: titles[0], artist: titles[1], additionalInfo } : null;
}).filter(detail => detail); // Remove null entries in case some containers are incomplete
// Create the output in "artist - song (additional info)" format
const output = details.map(detail => {
return `${detail.artist} - ${detail.song}${detail.additionalInfo ? ` (${detail.additionalInfo})` : ''}`;
}).join('\n');
// Copy the output to the clipboard
function copyToClipboard(text) {
const textarea = document.createElement('textarea');
textarea.value = text;
document.body.appendChild(textarea);
textarea.select();
try {
document.execCommand('copy');
console.log('Copied to clipboard:');
console.log(text);
} catch (err) {
console.error('Failed to copy:', err);
}
document.body.removeChild(textarea);
}
// Use the fallback method
copyToClipboard(output);
A bookmarklet can be used as well.
javascript: (function () {
const containers = document.querySelectorAll('.container');
const details = Array.from(containers).map(container => {
const titleLinks = container.querySelectorAll('a[title]');
const titles = Array.from(titleLinks).map(link => link.title);
const additionalSpan = container.querySelector('span span');
const additionalInfo = additionalSpan ? additionalSpan.textContent.trim() : null;
return titles.length >= 2 ? { song: titles[0], artist: titles[1], additionalInfo } : null;
}).filter(detail => detail);
const output = details.map(detail => {
return `${detail.artist} - ${detail.song}${detail.additionalInfo ? ` (${detail.additionalInfo})` : ''}`;
}).join('\n');
function copyToClipboard(text) {
const textarea = document.createElement('textarea');
textarea.value = text;
document.body.appendChild(textarea);
textarea.select();
try {
document.execCommand('copy');
console.log('Copied to clipboard:');
console.log(text);
} catch (err) {
console.error('Failed to copy:', err);
}
document.body.removeChild(textarea);
}
copyToClipboard(output);
})();