Sleazy Fork is available in English.

Pornhub Blacklister +

使用列入黑名单的关键字列表(视频名称、模特名称)删除不需要的pornhub.com视频(请参阅列表代码)

  1. // ==UserScript==
  2. // @name Pornhub Blacklister +
  3. // @version 0.9.2
  4. // @description 使用列入黑名单的关键字列表(视频名称、模特名称)删除不需要的pornhub.com视频(请参阅列表代码)
  5. // @author ack20
  6. // @include *pornhub.com*
  7. // @icon https://www.google.com/s2/favicons?sz=64&domain=pornhub.com
  8. // @grant none
  9. // @license MIT
  10. // @run-at document-end
  11. // @namespace https://greasyfork.org/users/1067016
  12. // ==/UserScript==
  13. const debug_info = true;
  14. const blackList = ["trap ", "futa", "trans ", "transgender", "shemale", "trann", "cuck", "fatboy", "sissy", "femboy", "femboi", "tgirl ", "travest", "crossdresser", "pegging", "t-girl", "ladyboy", " tgirl", "transgirl", "tbabe ", "ts ", "tgirls ", " tgirls", "prostate"];
  15. const blacklistedModels = ["Trevor Wong", "wuwur_0217", "kurofucs", "nina_loveu", "Amaya Lumina", "momoko taozi", "superlittlemonk", "KashimaMasayuki", "JinWanXuan1999", "Abby Kitty", "snow_nainai"];
  16. const colorPrint = (videoTitle, ...args) => {
  17. args = args.filter(arg => arg !== 0);
  18. console.log('%c[Pornhub Blacklister +]:%c ' + videoTitle + ' %c[removed]', "color: #f90", "color: white", ...args, "color: green");
  19. };
  20. const divs = document.querySelectorAll(".videoBox").length > 0 ? document.querySelectorAll(".videoBox") : document.querySelectorAll(".videoWrapper");
  21. divs.forEach((div) => {
  22. let videoTitle = div.querySelector("a").getAttribute("data-title") !== null ? div.querySelector("a").getAttribute("data-title") : div?.querySelector("img")?.getAttribute("alt") ?? null;
  23. let modelName = div.querySelector("a[href^='/model/']")?.title;
  24. let removeByTitle = false;
  25. if (videoTitle) {
  26. blackList.forEach((blackWord) => {
  27. if (videoTitle.toLowerCase().includes(blackWord)) {
  28. const start = videoTitle.toLowerCase().indexOf(blackWord), end = start + blackWord.length;
  29. if (blackWord[blackWord.length - 1] == " " && videoTitle.toLowerCase().substring(start - 1, end + 1)[0] != " " && !videoTitle.toLowerCase().substring(start - 1, end + 1).startsWith(blackWord)) {
  30. return;
  31. }
  32. removeByTitle = true;
  33. if (debug_info) {
  34. videoTitle = videoTitle.substring(0, start) + "%c" + videoTitle.substring(start, end) + "%c" + videoTitle.substring(end);
  35. }
  36. }
  37. });
  38. }
  39. let removeByModel = false;
  40. if (modelName) {
  41. blacklistedModels.forEach((blacklistedModel) => {
  42. if (modelName.toLowerCase() === blacklistedModel.toLowerCase()) {
  43. removeByModel = true;
  44. }
  45. });
  46. }
  47. if (removeByTitle || removeByModel) {
  48. div.remove();
  49. }
  50. if (debug_info) {
  51. const count = (videoTitle?.match(/%c/g) || []).length / 2;
  52. if (count > 0 || removeByModel) {
  53. let debugMsg = videoTitle || "";
  54. if(removeByModel){
  55. debugMsg += `[Model: ${modelName}]`;
  56. }
  57. colorPrint(debugMsg,
  58. count > 0 ? "color: red" : 0, count > 0 ? "color: white" : 0, count > 1 ? "color: red" : 0, count > 1 ? "color: white" : 0, count > 2 ? "color: red" : 0, count > 2 ? "color: white" : 0,
  59. count > 3 ? "color: red" : 0, count > 3 ? "color: white" : 0, count > 4 ? "color: red" : 0, count > 4 ? "color: white" : 0, count > 5 ? "color: red" : 0, count > 5 ? "color: white" : 0
  60. );
  61. }
  62. }
  63. });