Skip to content

Instantly share code, notes, and snippets.

@jongalloway
Created November 9, 2025 19:24
Show Gist options
  • Select an option

  • Save jongalloway/821e88ebcd3ba53bc0a9f60455cae4d5 to your computer and use it in GitHub Desktop.

Select an option

Save jongalloway/821e88ebcd3ba53bc0a9f60455cae4d5 to your computer and use it in GitHub Desktop.
Adobe Podcast Bulk Downloader - run in devtools console
(async () => {
function simulateSliderDrag(sliderHandle, targetValue, defaultValue) {
const track = sliderHandle.closest('.rc-slider');
if (!track) return;
const trackRect = track.getBoundingClientRect();
const totalPixels = trackRect.width;
const deltaUnits = targetValue - defaultValue;
const deltaPixels = (deltaUnits / 100) * totalPixels;
const startX = trackRect.left + (defaultValue / 100) * totalPixels;
const endX = startX + deltaPixels;
sliderHandle.dispatchEvent(new MouseEvent('mousedown', { bubbles: true, clientX: startX }));
sliderHandle.dispatchEvent(new MouseEvent('mousemove', { bubbles: true, clientX: endX }));
sliderHandle.dispatchEvent(new MouseEvent('mouseup', { bubbles: true, clientX: endX }));
console.log(`🎛️ Slider moved from ${defaultValue}% to ${targetValue}%`);
}
const speechTarget = 60;
const backgroundTarget = 20;
const speechDefault = 90;
const backgroundDefault = 10;
const tracks = Array.from(document.querySelectorAll('[data-testid="track-list-container"] .track-item'));
for (let i = 0; i < tracks.length; i++) {
const track = tracks[i];
track.scrollIntoView({ behavior: 'smooth' });
track.click();
await new Promise(res => setTimeout(res, 1000));
const speechSlider = document.querySelector('[data-testid="speech-strength-container"] .rc-slider-handle');
const backgroundSlider = document.querySelector('[data-testid="background-strength-container"] .rc-slider-handle');
if (speechSlider && backgroundSlider) {
simulateSliderDrag(speechSlider, speechTarget, speechDefault);
simulateSliderDrag(backgroundSlider, backgroundTarget, backgroundDefault);
} else {
console.warn(`⚠️ Sliders not found for track ${i + 1}`);
continue;
}
await new Promise(res => setTimeout(res, 1000));
const downloadBtn = Array.from(document.querySelectorAll('button'))
.find(btn => btn.textContent.trim().toLowerCase().includes('download'));
if (downloadBtn) {
downloadBtn.click();
console.log(`📥 Download triggered for track ${i + 1}`);
} else {
console.warn(`⚠️ Download button not found for track ${i + 1}`);
}
await new Promise(res => setTimeout(res, 60000));
}
console.log("✅ All tracks processed and downloaded.");
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment