【Mod】PHDownloader

Pornhub 视频一键下载 | pornhub.com 【Mod】1、调整样式减少版面占用,2、增加对手机网页的支持

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
  1. // ==UserScript==
  2. // @name 【Mod】PHDownloader
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.0.2-Mod-20240408.02
  5. // @description Pornhub 视频一键下载 | pornhub.com 【Mod】1、调整样式减少版面占用,2、增加对手机网页的支持
  6. // @author Hmhm【Mod】by heckles
  7. // @match *://*.pornhub.com/view_video.php?viewkey=*
  8. // @match *://*.pornhubpremium.com/view_video.php?viewkey=*
  9. // @icon https://ci.phncdn.com/www-static/favicon.ico
  10. // @grant unsafeWindow
  11. // @require https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js
  12. // @license MIT
  13. // ==/UserScript==
  14.  
  15. /**
  16. * 一个异步函数,用于检索并显示远程视频地址的下载列表。
  17. * 该函数会遍历`unsafeWindow`对象,寻找以`flashvars_`开头的属性,
  18. * 然后从这些属性中提取视频信息,并通过AJAX请求获取视频下载列表,
  19. * 最后将下载列表插入到页面指定的位置。
  20. *
  21. * @returns {void} 该函数没有返回值。
  22. */
  23.  
  24. (async function () {
  25. "use strict";
  26. let playerdiv; //let可以先不赋值,用在这里
  27. if (document.querySelector("#player")) {
  28. playerdiv = document.querySelector("#player");
  29. } else {
  30. console.log("安卓");
  31. playerdiv = document.querySelector(".playerWrapper");
  32. }
  33. alert(playerdiv);
  34.  
  35. // 获取视频容器元素和标题容器元素
  36. const videoWrap = document.querySelector(".video-wrapper");
  37. const signDom = document.querySelector(".video-wrapper .title-container");
  38. let remoteAddress;
  39.  
  40. // 遍历unsafeWindow对象,寻找可能的视频源信息
  41. for (let key in unsafeWindow) {
  42. // 查找以'flashvars_'开头的属性,提取视频地址
  43. if (key.startsWith("flashvars_")) {
  44. console.log(unsafeWindow[key]);
  45. let flashvars = unsafeWindow[key];
  46. let mediaDefinitions = flashvars.mediaDefinitions;
  47. // 从mediaDefinitions中寻找远程视频地址
  48. mediaDefinitions.some((item) => {
  49. if (item.remote) {
  50. remoteAddress = item.videoUrl;
  51. }
  52. });
  53. }
  54. }
  55.  
  56. // 使用获取到的远程地址通过AJAX请求下载列表
  57. const list = await $.ajax(remoteAddress).then((data) => {
  58. return data;
  59. });
  60.  
  61. // 创建一个DOM元素,用于装载下载列表
  62. const dom = document.createElement("div");
  63. dom.style = "display:inline-flex;"; //调成一行
  64. let str =
  65. '<div style="font-size:17px;">DOWNLOAD LIST</div><ul class="Download_List" style="display:inline-flex;">'; //调字号和调成一行
  66. // 构建下载列表的HTML字符串
  67. list.forEach((item) => {
  68. const { videoUrl, quality } = item;
  69. console.log(item);
  70. str += `<li style='padding-inline:16px; font-size:17px;'><a href="${videoUrl}" target="_blank">${quality}P</a></li>`; //调字号
  71. });
  72. str += "</ul>";
  73. dom.innerHTML = str;
  74.  
  75. // 创建文档片段,并将下载列表DOM插入其中
  76. const fragment = document.createDocumentFragment();
  77. fragment.appendChild(dom);
  78. // 将下载列表插入到页面指定位置
  79. videoWrap.insertBefore(fragment, signDom);
  80. })();