JavLibrary Video Fetcher

这个脚本在浏览 javlibrary.com 网站时抓取视频链接,并在页面上显示这些链接。每个页面只显示一个视频链接,从而提高页面的可读性和使用体验。

  1. // ==UserScript==
  2. // @name JavLibrary Video Fetcher
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2
  5. // @description 这个脚本在浏览 javlibrary.com 网站时抓取视频链接,并在页面上显示这些链接。每个页面只显示一个视频链接,从而提高页面的可读性和使用体验。
  6. // @author TT
  7. // @match www.javlibrary.com/*
  8. // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
  9. // ==/UserScript==
  10.  
  11. (async function () {
  12. 'use strict';
  13.  
  14. var links = Array.from(document.links);
  15. var addedLinks = [];
  16.  
  17. for (let link of links) {
  18. var videoAdded = false; // 新增标志,在每个链接的循环开始时重置
  19. var url = link.href;
  20. if (url.includes('?v=j')) {
  21. url = url.replace("/?v=", "/videocomments.php?mode=&v=").concat("&page=");
  22.  
  23. // 从localStorage中获取数据
  24. var cachedVideo = localStorage.getItem(url);
  25. if (cachedVideo) {
  26. var video = document.createElement('video');
  27. video.src = cachedVideo;
  28. video.width = 320;
  29. video.height = 240;
  30. video.controls = true;
  31. link.parentElement.parentElement.insertBefore(video, link.parentElement);
  32. addedLinks.push(cachedVideo);
  33. continue;
  34. }
  35.  
  36. var fetchPage = async function(index) {
  37. if (index > 5 || videoAdded) return Promise.resolve(); // 检查标志
  38. try {
  39. var response = await fetch(url + index);
  40. var html = await response.text();
  41. var regex = /(http(s?):)([/|.|\w|\s|-])*\.(?:mp4)/g;
  42. var matches = html.match(regex);
  43. if (matches) {
  44. for (var k = 0; k < matches.length; k++) {
  45. if (!addedLinks.includes(matches[k])) {
  46. var video = document.createElement('video');
  47. video.src = matches[k];
  48. video.width = 320;
  49. video.height = 240;
  50. video.controls = true;
  51. link.parentElement.parentElement.insertBefore(video, link.parentElement);
  52. addedLinks.push(matches[k]);
  53. videoAdded = true; // 设置标志
  54. localStorage.setItem(url, matches[k]); // 将视频链接存储在localStorage中
  55. return Promise.resolve();
  56. }
  57. }
  58. }
  59. return fetchPage(index + 1); // 如果没有找到视频链接,继续获取下一页
  60. } catch (err) {
  61. console.warn('Something went wrong.', err);
  62. }
  63. };
  64.  
  65. await fetchPage(1); // 开始获取第一页
  66. }
  67. }
  68. })();