GetImageFrombilibiliComments

便捷地从b站评论区下载图片

  1. // ==UserScript==
  2. // @name GetImageFrombilibiliComments
  3. // @namespace https://gf.qytechs.cn/zh-CN/scripts/502548-getimagefrombilibilicomments
  4. // @version 1.0.0
  5. // @description 便捷地从b站评论区下载图片
  6. // @author ouyu69
  7. // @include *://www.bilibili.com/video/*
  8. // @include *bilibili.com/video/*
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14. setInterval(getImageElements,5000) ;
  15. })(); //(function(){})() 表示该函数立即执行
  16.  
  17. function getImageElements() {//寻找目标函数
  18. const biliComments = document.querySelector("bili-comments");
  19. if (biliComments) {
  20. // console.log("biliComments OK");
  21. const shadowRoot1 = biliComments.shadowRoot;
  22. if (shadowRoot1) {
  23. const biliCommentThreadRenderers = shadowRoot1.querySelectorAll("bili-comment-thread-renderer");
  24. Array.from(biliCommentThreadRenderers).forEach(biliCommentThreadRenderer => {
  25. const shadowRoot2 = biliCommentThreadRenderer.shadowRoot;
  26. if (shadowRoot2) {
  27. const comments = shadowRoot2.querySelectorAll("#comment");
  28. Array.from(comments).forEach(comment => {
  29. const shadowRoot3 = comment.shadowRoot;
  30. if (shadowRoot3) {
  31. const pics = shadowRoot3.querySelectorAll("#pic > bili-comment-pictures-renderer");
  32. Array.from(pics).forEach(pic => {
  33. const shadowRoot4 = pic.shadowRoot;
  34. if (shadowRoot4) {
  35. const imgs = shadowRoot4.querySelectorAll("#content > img");
  36. // console.log("All OK");
  37. Array.from(imgs).forEach(img => {
  38. // console.log("找到了目标元素" + img.getAttribute("src"));
  39. const existButton = img.nextElementSibling;
  40. if(!existButton || !existButton.classList.contains('download-button-class'))addDownloadButton(img);
  41. });
  42. }
  43. });
  44. }
  45. });
  46. }
  47. });
  48. }
  49. }else{
  50. // console.log("biliComments cant find") ;
  51. }
  52. }
  53. function addDownloadButton(img) {
  54. const button = document.createElement("button");
  55. button.classList.add('download-button-class'); // 添加一个类以便后续检查
  56. button.textContent = "download";
  57. button.style.backgroundColor = "skyblue"
  58. button.style.color= "white" ;
  59. button.style.height= "20px" ;
  60. button.style.borderRadius= "10px" ;
  61. button.style.marginLeft = "10px";
  62. button.onclick = () => {
  63. const url = "https:" + img.getAttribute('src').split('@')[0];
  64. const fileName = url.split("//")[1].split("/")[3] ;
  65. console.log(url) ;
  66. console.log(fileName) ;
  67. downloadFile(url,fileName) ;
  68. };
  69. img.parentNode.insertBefore(button, img.nextSibling);
  70. }
  71. function downloadFile(url, fileName) {
  72. fetch(url)
  73. .then(response => response.blob())
  74. .then(blob => {
  75. const link = document.createElement('a');
  76. link.href = URL.createObjectURL(blob);
  77. link.download = fileName || 'download';
  78. document.body.appendChild(link);
  79. link.click();
  80. document.body.removeChild(link);
  81. URL.revokeObjectURL(link.href);
  82. })
  83. .catch(console.error);
  84. }
  85.  

QingJ © 2025

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