6/21/2023, 11:18:54 PM
Versione datata
// ==UserScript==
// @name Filter Videos
// @namespace Violentmonkey Scripts
// @match https://coomer.party/onlyfans/user/*
// @grant none
// @version 1.0
// @author -
// @description 6/21/2023, 11:18:54 PM
// @license MIT
// ==/UserScript==
async function querySelectorAsync(element, selector) {
return await new Promise(resolve => {
let elm = element.querySelector(selector);
if(elm) return resolve(elm);
const observer = new MutationObserver(_ => {
elm = element.querySelector(selector);
if(elm) {
resolve(elm);
observer.disconnect();
}
})
observer.observe(document.body, {
childList: true,
subtree: true
})
})
}
async function hasVideo(postUrl) {
return new Promise(resolve => {
let request = new XMLHttpRequest();
request.open("GET", postUrl, true);
request.send(null);
request.onreadystatechange = function() {
if(request.readyState === 4) {
let elm = document.createElement("html");
elm.innerHTML = request.responseText;
return resolve(elm.querySelector("video") !== null);
}
}
})
}
async function filterVideos(e) {
// Prevent redirection
e.preventDefault()
// For every post, check the html and if there is no video, then remove post
let postList = await querySelectorAsync(document, ".card-list__items");
for(let post of postList.children) {
let postUrl = (await querySelectorAsync(post, "a")).href;
hasVideo(postUrl).then(val => {
if(!val) post.remove();
})
}
}
(async() => {
let filterBtn = document.createElement("button")
filterBtn.textContent = "Filter Videos"
filterBtn.onclick = filterVideos
let searchInputForm = await querySelectorAsync(document, "form")
searchInputForm.appendChild(filterBtn)
})()