【Mod】PHDownloader

Pornhub 视频一键下载 | pornhub.com 【Mod包括:1.Pc和安卓都可以,2.调整布局,减少面积】

À partir de 2024-03-31. Voir la dernière version.

  1. // ==UserScript==
  2. // @name 【Mod】PHDownloader
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.0.2【2024.03.31】
  5. // @description Pornhub 视频一键下载 | pornhub.com 【Mod包括:1.Pc和安卓都可以,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.  
  25. (async function () {
  26. 'use strict';
  27. let videoWrapTarget;//let可以先不赋值,用在这里
  28. let signDomTarget;//let可以先不赋值,用在这里
  29. let fontstyle;
  30. if (document.querySelector('.video-wrapper')) {
  31. videoWrapTarget = document.querySelector('.video-wrapper');
  32. signDomTarget = document.querySelector('.video-wrapper .title-container');
  33. fontstyle= "font-size:120%; font-wieght:400;";
  34. }
  35. else {
  36. console.log("安卓");
  37. videoWrapTarget = document.querySelector('#videoShow');
  38. signDomTarget = document.querySelector('#videoShow .categoryTags');
  39. fontstyle= "font-size:100%; font-wieght:400;";
  40. }
  41.  
  42.  
  43. // 获取视频容器元素和标题容器元素
  44. const videoWrap = videoWrapTarget
  45. const signDom = signDomTarget
  46. const style = fontstyle
  47. let remoteAddress
  48.  
  49. // 遍历unsafeWindow对象,寻找可能的视频源信息
  50. for (let key in unsafeWindow) {
  51. // 查找以'flashvars_'开头的属性,提取视频地址
  52. if (key.startsWith('flashvars_')) {
  53. console.log(unsafeWindow[key])
  54. let flashvars = unsafeWindow[key]
  55. let mediaDefinitions = flashvars.mediaDefinitions
  56. // 从mediaDefinitions中寻找远程视频地址
  57. mediaDefinitions.some(item => {
  58. if (item.remote) {
  59. remoteAddress = item.videoUrl
  60. }
  61. })
  62. }
  63. }
  64.  
  65. // 使用获取到的远程地址通过AJAX请求下载列表
  66. const list = await $.ajax(remoteAddress).then(data => {
  67. return data
  68. })
  69.  
  70. // 创建一个DOM元素,用于装载下载列表
  71. const dom = document.createElement("div");
  72. dom.style = "display:inline-flex;"//调成一行
  73. let str = '<div style=' + style + '>DOWNLOAD LIST</div><ul class="Download_List" style="display:inline-flex;">';
  74. // 构建下载列表的HTML字符串
  75. list.forEach(item => {
  76. const { videoUrl, quality } = item
  77. console.log(item)
  78. str += `<li style= 'padding-inline:12px;${style}'><a href="${videoUrl}" target="_blank">${quality}P</a></li>`
  79. })
  80. str += '</ul>';
  81. dom.innerHTML = str
  82.  
  83. // 创建文档片段,并将下载列表DOM插入其中
  84. const fragment = document.createDocumentFragment();
  85. fragment.appendChild(dom)
  86. // 将下载列表插入到页面指定位置
  87. videoWrap.insertBefore(fragment, signDom)
  88. })();
  89.