XXQG_mp3_dl.user.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // ==UserScript==
  2. // @name XXQG_mp3_dl
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description try to take over the world!
  6. // @author You
  7. // @match https://article.xuexi.cn/articles/audio/share/index.html?*
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=xuexi.cn
  9. // @grant none
  10. // @require https://lib.baomitu.com/jquery/3.6.0/jquery.min.js
  11. // ==/UserScript==
  12. (function() {
  13. 'use strict';
  14. var list_len = 0;
  15. var str = "";
  16. function loop_click(index) {
  17. if (index >= list_len) {
  18. var filename = $.trim($(".header-title > .title").text());
  19. saveTxt("bash-" + filename, str);
  20. console.log("END");
  21. return;
  22. }
  23. var item = $(".playlist > .song:eq(" + index + ")");
  24. var title_index = $.trim(item.find(".song-index-num").text());
  25. var title = $.trim(item.find(".song-info-title").text());
  26. item.find(".song-info").click();
  27. general_wait(function() {
  28. return $("audio").length > 0;
  29. }, function() {
  30. var src = $("audio source").attr('src');
  31. str += "wget " + src + " -O '" + title_index + "-" + title + ".mp3'" + "\n";
  32. console.log(title_index + "-" + title + " " + src);
  33. $(".close-container .close").click();
  34. setTimeout(function() {
  35. loop_click(index + 1);
  36. }, 200);
  37. });
  38. }
  39. function general_wait(condition, callback) {
  40. let _tmp_interval = setInterval(function() {
  41. try {
  42. let result = condition();
  43. if (result) {
  44. clearInterval(_tmp_interval);
  45. callback(result);
  46. }
  47. } catch (e) {}
  48. }, 500);
  49. }
  50. function saveTxt(filename, content) {
  51. var a = document.createElement('a');
  52. var blob = new Blob([content]);
  53. a.download = filename + ".txt";
  54. a.href = URL.createObjectURL(blob);
  55. a.click();
  56. URL.revokeObjectURL(blob);
  57. }
  58. function initUI() {
  59. var html = "<div id='mybtn' style='width:50px;height:50px;text-align:center;line-height:50px;position:fixed;top:0;right:0;background:#000;color:#fff;'>开始</div>";
  60. $("body").append(html);
  61. $("#mybtn").click(function(){
  62. list_len = $(".playlist > .song").length;
  63. loop_click(0);
  64. });
  65. }
  66. initUI();
  67. /*
  68. setTimeout(function(){
  69. loop_click(0);
  70. }, 1000);
  71. */
  72. })();