您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Access to full size content and download buttons
// ==UserScript== // @name AuntJudys Images & Videos // @namespace https://greasyfork.org/en/users/1384264-atman // @version 2024-11-24 // @description Access to full size content and download buttons // @author atman // @match *://*.auntjudys.com/tour/scenes/*highres.html // @match *://*.auntjudys.com/tour/scenes/*vids.html // @match *://*.auntjudysxxx.com/tour/scenes/*highres.html // @match *://*.auntjudysxxx.com/tour/scenes/*vids.html // @grant none // @license GPL-3.0 // ==/UserScript== (function() { 'use strict'; const galleryBlock = document.querySelector('.photo_gallery_block'); const movieBlock = document.querySelector('.movie_wrapper'); const photoHolders = document.querySelectorAll('.photo_gallery_thumbnail_wrapper img'); // Function to replace trailer with full video function updatePlayingVideo() { if (df_movie && df_movie.length > 0 && df_movie[0].path.includes("trailer")) { df_movie[0].path = df_movie[0].path.replace("trailer", "720p"); load_default_movie(); } else { // Retry after a short delay setTimeout(checkForTrailerpAvailability, 500); } } const updateImageLinks = () => { if (photoHolders) { photoHolders.forEach(img => { const originalSrc = img.src; const fullImageUrl = originalSrc.replace('thumbs', 'fullwatermarked'); // Set the link const link = img.parentNode; link.href = fullImageUrl; link.target = '_blank'; }); const match = photoHolders[1].src.match(/upload\/(\w+)\/(\w+)\/(\w+)(?=\/\/thumbs)/); const Letter = match[1]; const model = match[2]; const galleryNumber = match[3]; const downloadUrl = `content/upload/${Letter}/${model}/${galleryNumber}/${galleryNumber}_full.zip`; // Create a single download button if (downloadUrl) { const downloadButton = document.createElement('a'); downloadButton.href = downloadUrl; downloadButton.textContent = 'Download ZIP'; downloadButton.style.cssText = ` display: block; margin-bottom: 10px; padding: 10px 10px; background: linear-gradient(90deg, #00d478, #297d58); color: #FFFFFF; text-decoration: none; border-radius: 5px; text-align: center; font-weight: bold; transition: background 0.5s linear; `; galleryBlock.insertBefore(downloadButton, galleryBlock.firstChild); } } }; const updateVideo = () => { const playerOptions = document.querySelector('.player_options'); if (playerOptions) { playerOptions.style.display = 'none'; } const formatSelectMenu = document.querySelector('.format_select_menu'); if (formatSelectMenu) { formatSelectMenu.style.display = 'block'; const movieFormatSelect = document.getElementById('movieformat_select'); const downloadSelect = document.getElementById('download_select'); const updateOptions = (selectElement, setPath = true) => { Array.from(selectElement.options).forEach(option => { option.removeAttribute('data-trial'); const resolutionMatch = option.text.match(/(480p|720p|1080p)/); if (resolutionMatch) { const ident = df_movie[0].path; const extractedIdent = ident.split('trailer/')[1].split('.mp4')[0]; const resolution = resolutionMatch[0]; option.value = resolution; const originalPath = movie[resolution][extractedIdent].vtt_file; const path = originalPath.replace(/\.vtt$/, '').replace(/\/vtt\//, '/'); movie[resolution][extractedIdent].path = path; option.value = setPath ? path : resolution+":"+extractedIdent; } }); }; const filterOptions = (selectElement) => { Array.from(selectElement.options).forEach(option => { if (option.text.includes('HLS')) { option.remove(); } }); }; if (downloadSelect) { updateOptions(movieFormatSelect, false); updateOptions(downloadSelect, true); filterOptions(movieFormatSelect); filterOptions(downloadSelect); } } } const main = () => { if (galleryBlock) { updateImageLinks(); } if (movieBlock) { updateVideo(); updatePlayingVideo(); } }; main(); })();