Pornhub 视频一键下载 | pornhub.com 【Mod包括:1.Pc和安卓都可以,2.调整布局,减少面积】 原作者链接https://update.sleazyfork.org/scripts/483386/PHDownloader.meta.js
当前为
// ==UserScript==
// @name 【Mod】PHDownloader
// @namespace http://tampermonkey.net/
// @version 0.0.2-2024.03.31
// @description Pornhub 视频一键下载 | pornhub.com 【Mod包括:1.Pc和安卓都可以,2.调整布局,减少面积】 原作者链接https://update.sleazyfork.org/scripts/483386/PHDownloader.meta.js
// @author Hmhm 【mod by heckles】
// @match *://*.pornhub.com/view_video.php?viewkey=*
// @match *://*.pornhubpremium.com/view_video.php?viewkey=*
// @icon https://ci.phncdn.com/www-static/favicon.ico
// @grant unsafeWindow
// @require https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js
// @license MIT
// ==/UserScript==
/**
* 一个异步函数,用于检索并显示远程视频地址的下载列表。
* 该函数会遍历`unsafeWindow`对象,寻找以`flashvars_`开头的属性,
* 然后从这些属性中提取视频信息,并通过AJAX请求获取视频下载列表,
* 最后将下载列表插入到页面指定的位置。
*
* @returns {void} 该函数没有返回值。
*/
(async function () {
'use strict';
let videoWrapTarget;//let可以先不赋值,用在这里
if (document.querySelector('.video-wrapper')) {
videoWrapTarget = document.querySelector('.video-wrapper');
}
else {
console.log("安卓");
videoWrapTarget = document.querySelector('#videoShow');
}
let signDomTarget;//let可以先不赋值,用在这里
if (document.querySelector('.video-wrapper')) {
signDomTarget = document.querySelector('.video-wrapper .title-container');
}
else {
console.log("安卓");
signDomTarget = document.querySelector('#videoShow .categoryTags');
}
// 获取视频容器元素和标题容器元素
const videoWrap = videoWrapTarget
const signDom = signDomTarget
let remoteAddress
// 遍历unsafeWindow对象,寻找可能的视频源信息
for (let key in unsafeWindow) {
// 查找以'flashvars_'开头的属性,提取视频地址
if (key.startsWith('flashvars_')) {
console.log(unsafeWindow[key])
let flashvars = unsafeWindow[key]
let mediaDefinitions = flashvars.mediaDefinitions
// 从mediaDefinitions中寻找远程视频地址
mediaDefinitions.some(item => {
if (item.remote) {
remoteAddress = item.videoUrl
}
})
}
}
// 使用获取到的远程地址通过AJAX请求下载列表
const list = await $.ajax(remoteAddress).then(data => {
return data
})
// 创建一个DOM元素,用于装载下载列表
const dom = document.createElement("div");
dom.style = "display:inline-flex;"//调成一行
let str = '<div style="font-size:17px;">DOWNLOAD LIST</div><ul class="Download_List" style="display:inline-flex;">';
// 构建下载列表的HTML字符串
list.forEach(item => {
const { videoUrl, quality } = item
console.log(item)
str += `<li style='padding-inline:16px; font-size:17px;'><a href="${videoUrl}" target="_blank">${quality}P</a></li>`
})
str += '</ul>';
dom.innerHTML = str
// 创建文档片段,并将下载列表DOM插入其中
const fragment = document.createDocumentFragment();
fragment.appendChild(dom)
// 将下载列表插入到页面指定位置
videoWrap.insertBefore(fragment, signDom)
})();