建E网黑名单

2024/5/22 10:00:35

目前為 2024-06-17 提交的版本,檢視 最新版本

// ==UserScript==
// @name        建E网黑名单
// @namespace   Violentmonkey Scripts
// @match       https://www.justeasy.cn/3dmodels/search*
// @match       https://club.justeasy.cn/designer/work/*
// @grant       none
// @version     0.0.3
// @author      YeSilin
// @license     GPL-3.0-or-later
// @description 2024/5/22 10:00:35
// @run-at      document-end
// @grant       GM_addStyle
// @grant       GM_setValue
// @grant       GM_getValue
// ==/UserScript==

(function () {
  'use strict';

  // 通过链接查找作者id
  function getId(url) {
    const found = url.match(/(?<=\/)\w{32}(?=\.?)/)
    if (found) {
      return found[0]
    } else {
      return ''
    }
  }

  // 数组去重
  function unique(arr) {
    return Array.from(new Set(arr))
  }

  // 数组删除指定元素
  function delElement(arr, element) {
    let new_set = new Set(arr)
    new_set.delete(element)
    return [...new_set]
  }

  console.log("黑名单开始执行")

  // 设置默认黑名单列表
  const defaultBlacklist = ['eXY4WmV1cjB1ajF4bzBXNFFTR2hjZz09',
    'K2dYd1hTekNEdlZKcjVDVE1WVkxmUT09',
    'eVJ3cy9IaUF4TkhjT2pHVklXUjdzdz09',
    'U0FFSHFtYTUyOTc5RDd3NlQ2MDVGQT09',
    'Sk9qQ3kreG1wVU1Ic3RaVVprOXhCdz09',
    'YzNVTUx0T2Mwa0JVTlFCNk1rQWRTQT09']


  // 获取黑名单列表
  let blacklist = GM_getValue("blacklist")
  // 如果没有就加载默认黑名单列表
  if (!blacklist) {
    blacklist = defaultBlacklist
  } else {
    // 拆开数组,追加多个值
    blacklist = blacklist.concat(defaultBlacklist)
    blacklist = unique(blacklist)
    GM_setValue("blacklist", blacklist)
  }

  // 计算一下本次搜索拦截了多少个
  let conust = 0

  // 如果是作者主页就加个黑名单按钮
  if (document.URL.indexOf('https://club.justeasy.cn/designer/work/') !== -1) {
    const id = getId(document.URL)
    if (!id) {
      alert('获取作者 id 失败!')
      return
    }

    const homepage = document.querySelector('.homepage_right')
    const css = `
    #add-blacklist{
      width: 120px;
      height: 46px;
      margin-left: 20px;
      border-radius: 10px;
      color: #fff;
      font-size: 16px;
    }
    `
    GM_addStyle(css)
    if (blacklist.includes(id)) {
      homepage.innerHTML += `<button id='add-blacklist' data-blacklist='true' >已加黑</button>`
      homepage.querySelector('#add-blacklist').style.background = '#b1b1b1'
    } else {
      homepage.innerHTML += `<button id='add-blacklist' data-blacklist='false' >加黑</button>`
      homepage.querySelector('#add-blacklist').style.background = 'rgb(222 0 0)'
    }


    // 监听点击事件
    document.querySelector('#add-blacklist').addEventListener('click', function () {
      // 已加黑的点击可以取消加黑
      if (this.getAttribute('data-blacklist') === 'true') {
        this.setAttribute('data-blacklist', 'false')
        this.style.background = 'rgb(222 0 0)'
        this.innerText = '加黑'
        // 同步数据
        blacklist = delElement(blacklist, id)
        GM_setValue("blacklist", blacklist)
      } else {
        this.setAttribute('data-blacklist', 'true')
        this.style.background = '#b1b1b1'
        this.innerText = '已加黑'
        // 同步数据
        blacklist.push(id)
        GM_setValue("blacklist", blacklist)
      }
    })
    return
  }



  // 每个元素需要执行的回调函数
  function eachHandler(element) {
    let href = element.querySelector("div.userInfo_footer > div.userInfo_info > a").href
    // 去除后缀 .html
    href = href.substring(0, href.lastIndexOf("."))
    // 去掉多余前缀
    let arr = href.split('/')
    href = arr[arr.length - 1]

    // 黑名单列表是否包含
    if (blacklist.includes(href)) {
      conust++
      const name = element.querySelector("div.userInfo_footer > div.userInfo_info > a > div.name").innerText
      // console.log("找到了一个黑名单用户:"  element.querySelector("div.userInfo_footer > div.userInfo_info > a > div.name").innerText + " " + href)
      console.log(`${conust} 黑名单:[${href}] ${name}`)
      // 直接删除
      element.remove()
    }
  }



  // 当观察到变动时执行的回调函数
  function observerHandler(mutationsList, observer) {
    // 元素变化
    // console.log("页面变化了重新执行")
    // console.log(mutationsList)

    mutationsList[0].addedNodes.forEach(eachHandler)

  }

  // 定时器回调函数
  function timerHandler() {
    // 选择要观察的元素列表
    const targetNode = document.querySelector("#grid")
    // console.log("开始寻找父元素")
    // console.log(targetNode)
    // 如果找到元素就清除定时器
    if (targetNode) {
      // console.log("找到了父元素")
      clearInterval(intervalId) // 清除定时器

      const observerOptions = {
        childList: true, // 观察目标子节点的变化,是否有添加或者删除
        // attributes: true, // 观察属性变动
        // subtree: true, // 观察后代节点,默认为 false
      }
      // 实例化一个观察器
      let observer = new MutationObserver(observerHandler)
      // 开始观察目标节点
      observer.observe(targetNode, observerOptions);
    }
  }


  // 设置一个定时器
  const intervalId = setInterval(timerHandler, 1000)
  // 立刻执行一次
  timerHandler()

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址