Storyblocks Downloader

Add download link to Storyblocks previews.

  1. // ==UserScript==
  2. // @name Storyblocks Downloader
  3. // @namespace https://github.com/Enchoseon/enchos-assorted-userscripts/raw/main/storyblocks-downloader.user.js
  4. // @version 1.1
  5. // @description Add download link to Storyblocks previews.
  6. // @author Enchoseon
  7. // @match https://www.storyblocks.com/audio/search/*
  8. // @grant GM_download
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. "use strict";
  13. // =================
  14. // Mutation Observer
  15. // =================
  16. const observer = new MutationObserver(function(mutations_list) {
  17. mutations_list.forEach(function(mutation) {
  18. mutation.addedNodes.forEach(function(added_node) {
  19. console.log(added_node);
  20. if (added_node.nodeName === "SECTION" && added_node.classList.contains("audio")) { // Intercept every track element as it's created and modify its download button
  21. processTrack(added_node);
  22. }
  23. });
  24. });
  25. });
  26. observer.observe(document.querySelector("main#search"), { subtree: true, childList: true });
  27. // =======================
  28. // Intercept Track Element
  29. // =======================
  30. function processTrack(track) {
  31. const downloadButton = track.querySelector("a.download-button"); // Get the built-in download button...
  32. downloadButton.removeAttribute("href"); // ... and remove its ability to redirect us to a "Sign Up to Download" page
  33. downloadButton.addEventListener("click", () => { // Start playing the song
  34. var event = new MouseEvent("click", {
  35. "bubbles": true,
  36. "cancelable": true
  37. });
  38. track.querySelector("button.audioPlayButton-button").dispatchEvent(event);
  39. downloadTrack(document.querySelector("audio#audio").src, downloadButton.getAttribute("aria-label").split("Download audio track ")[1]);
  40. });
  41. }
  42. // =================
  43. // Download Function
  44. // =================
  45. function downloadTrack(url, name) {
  46. console.log("Downloading: " + name + " (" + url + ")");
  47. const filename = name.replace(/[<>:"/\|?*]/, "_"); // Strip illegal filename characters
  48. const extension = url.split(".").slice(-1); // Get the file extension
  49. GM_download(url, filename + "." + extension);
  50. }
  51. })();
  52.  

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址