您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Checks some sites for OF "leaks"
// ==UserScript== // @name Onlyfans "leak" finder // @namespace http://tampermonkey.net/ // @version 0.8.1.1 // @description Checks some sites for OF "leaks" // @author You // @match https://onlyfans.com/* // @match *://*.coomer.su/* // @match *://*.fapello.com/* // @match https://fansly.com/* // @match https://fantrie.com/* // @match *://*.topfapgirls1.com/* // @grant GM.xmlHttpRequest // @license Unlicense // ==/UserScript== (function () { 'use strict'; const MAX_RETRIES = 5; function getUsernameFromUrl() { const hostname = window.location.hostname; const pathname = window.location.pathname; if (hostname === 'onlyfans.com' || hostname === 'fantrie.com') { return pathname.split('/')[1]; } if (hostname === 'fansly.com') { const matches = pathname.match(/^\/([^/]+)/); return matches ? matches[1] : ''; } return ''; } function createRequest(url, onSuccess, onError, retryCount = 0) { GM.xmlHttpRequest({ method: 'GET', url: url, onload(response) { if (response.status === 200) { onSuccess(response); } else if (retryCount < MAX_RETRIES) { console.log(`Retrying... Attempt ${retryCount + 1}`); setTimeout(() => createRequest(url, onSuccess, onError, retryCount + 1), 1000); } else { console.error('Max retry attempts reached'); onError(response); } }, onerror: onError, }); } function fetchUserProfileFansly(username) { const apiUrl = `https://apiv3.fansly.com/api/v1/account?usernames=${username}`; createRequest( apiUrl, (response) => { const data = JSON.parse(response.responseText); if (data.success && data.response.length > 0) { const id = data.response[0].id; fetchUserProfileCoomer(id, 'fansly'); } else { console.log(`User ${username} not found`); } }, (error) => console.error('Error fetching Fansly profile:', error) ); } function fetchUserProfileCoomer(username, service) { const apiUrl = `https://coomer.su/api/v1/${service}/user/${username}/profile`; createRequest( apiUrl, () => { const profileUrl = `https://coomer.su/${service}/user/${username}`; addLinkToMenu(profileUrl, 'Coomer.su'); }, (error) => console.error('Error fetching Coomer profile:', error) ); } function fetchUserProfileFapello(username) { const apiUrl = `https://fapello.com/${username}/`; createRequest( apiUrl, (response) => { if (response.finalUrl === apiUrl) { addLinkToMenu(apiUrl, 'Fapello'); } else { console.log('Request was redirected'); } }, (error) => console.error('Error fetching Fapello profile:', error) ); } function fetchUserProfileLeakNudes(username) { const apiUrl = `https://leaknudes.com/model/${username}`; createRequest( apiUrl, (response) => { if (response.finalUrl === apiUrl) { addLinkToMenu(apiUrl, 'LeakNudes'); } else { console.log('Request was redirected'); } }, (error) => console.error('Error fetching LeakNudes profile:', error) ); } function fetchUserProfileTopFapGirls(username) { const searchUrl = `https://www.topfapgirls1.com/search/?q=${username}`; createRequest( searchUrl, (response) => { console.log(response.status) console.log(searchUrl) if (response.status === 200 && !response.finalUrl.includes("?q=")) { console.log(response.finalUrl) addLinkToMenu(response.finalUrl, 'TopFapGirls1'); } else { console.log('User not found on TopFapGirls1'); } }, (error) => console.error('Error fetching TopFapGirls1 profile:', error) ); } function addLinkToMenu(link, displayText) { const hostname = window.location.hostname; const createAnchorElement = (link, text) => { const aElement = document.createElement('a'); aElement.href = link; aElement.textContent = text; aElement.style.cssText = ` display: inline-block; padding: 8px 12px; margin: 4px 0; height: 1.8em; margin: 3.5em 0.25em 0 0.25em; background-color: #007bff; color: white; text-align: center; border-radius: 4px; text-decoration: none; font-size: 14px; `; return aElement; }; if (hostname === 'fansly.com') { const followButton = document.querySelector('.follow-profile'); if (followButton) { const newMenuElement = followButton.cloneNode(false); newMenuElement.textContent = displayText; const aElement = createAnchorElement(link, ''); aElement.appendChild(newMenuElement); followButton.after(aElement); } else { console.error('Follow button not found'); } } else if (hostname === 'fantrie.com') { const menuElement = document.querySelectorAll('.left-menus')[1]; if (menuElement) { menuElement.appendChild(createAnchorElement(link, displayText)); } else { console.error('Left menus element not found'); } } else { const menuElement = document.querySelector('.l-header__menu.m-native-custom-scrollbar.m-scrollbar-y.m-invisible-scrollbar'); if (menuElement) { const aElement = createAnchorElement(link, displayText); aElement.style.marginRight = '10px'; if (menuElement.querySelectorAll('a').length > 0) { menuElement.appendChild(document.createElement('br')); } menuElement.appendChild(aElement); } else { console.error('Menu element not found'); } } } function waitForElement(selector, callback) { const observer = new MutationObserver(() => { const element = document.querySelector(selector); if (element) { observer.disconnect(); callback(element); } }); observer.observe(document.body, { childList: true, subtree: true }); } const username = getUsernameFromUrl(); if (username) { const hostname = window.location.hostname; if (hostname === 'fansly.com') { waitForElement('.profile-details', () => { fetchUserProfileFansly(username); fetchUserProfileFapello(username); fetchUserProfileLeakNudes(username); fetchUserProfileTopFapGirls(username); if (username.includes('_')) { fetchUserProfileFapello(username.replace(/_/g, '-')); } const instaElement = document.querySelector(".icon-container.instagram").parentNode if(instaElement){ const instaHandle = instaElement.href.match(/https:\/\/instagram\.com\/(.+)/)[1]; fetchUserProfileTopFapGirls(instaHandle); fetchUserProfileFapello(instaHandle); } }); } else if (hostname === 'fantrie.com') { waitForElement('.left-menus', () => { fetchUserProfileFapello(username); fetchUserProfileLeakNudes(username); fetchUserProfileTopFapGirls(username); }); } else { waitForElement('.l-header__menu.m-native-custom-scrollbar.m-scrollbar-y.m-invisible-scrollbar', () => { fetchUserProfileCoomer(username, 'onlyfans'); fetchUserProfileFapello(username); fetchUserProfileLeakNudes(username); fetchUserProfileTopFapGirls(username); if (username.includes('_')) { fetchUserProfileFapello(username.replace(/_/g, '-')); } }); } } })();