Greasy Fork is available in English.

QQ空间自动删除说说

一键删除QQ空间所有说说。无法恢复,慎用!

ของเมื่อวันที่ 10-08-2019 ดู เวอร์ชันล่าสุด

// ==UserScript==
// @name         QQ空间自动删除说说
// @description  一键删除QQ空间所有说说。无法恢复,慎用!
// @namespace    https://greasyfork.org/users/197529
// @homepage     https://greasyfork.org/scripts/370936
// @supportURL   https://greasyfork.org/scripts/370936/feedback
// @version      0.7.11
// @author       kkocdko
// @license      Unlicense
// @match        *://user.qzone.qq.com/*
// @noframes
// ==/UserScript==
'use strict'

const addFloatButton = initFloatButton()

addFloatButton('删除所有说说', async function () {
  this.loop = !this.loop
  const appIframe = document.querySelector('.app_canvas_frame')
  if (!appIframe) {
    const switchToTag = window.confirm('未切换到“说说”标签,是否立即切换?')
    if (switchToTag) {
      document.querySelector('.head-nav-menu>.menu_item_311>a').click()
    } else {
      return
    }
  }
  const iframeDocument = appIframe.contentWindow.document
  while (this.loop) {
    clickAllEl('.del_btn', iframeDocument)
    await sleepAsync(2000)
    clickAllEl('.qz_dialog_layer_sub')
    await sleepAsync(1500)
    nextPage()
    await sleepAsync(3000)
  }

  function nextPage () {
    iframeDocument.querySelectorAll('.mod_pagenav_main>a').forEach(el => {
      if (el.innerText === '下一页') {
        el.click()
      }
    })
  }
})

function clickAllEl (selector, parentNode = document) {
  parentNode.querySelectorAll(selector).forEach(el => el.click())
}

async function sleepAsync (time) {
  return new Promise(resolve => setTimeout(resolve, time))
}

function initFloatButton () {
  return (document.addFloatButton = document.addFloatButton || (() => {
    const buttonBarShadow = document.createElement('div').attachShadow({ mode: 'open' })
    buttonBarShadow.innerHTML = '<style>:host{position:fixed;top:3px;left:3px;z-index:9999999999;height:0}input{display:none}input~*{float:left;margin:3px;padding:1em;outline:0;border:0;border-radius:4px;background:#2196f3;box-shadow:0 1px 3px 0 #00000022;color:#fff;font-size:14px;line-height:0;transition:.3s}:active{background:#63b5f7;box-shadow:0 2px 5px 0 #00000033}label{border-radius:50%}input:checked~label{opacity:.3;transform:translateY(3em)}button:active{transition:0s}input:checked~button{visibility:hidden;opacity:0;transform:translateY(-3em)}</style><input id=hidebtns type=checkbox><label for=hidebtns></label>'
    document.body.appendChild(buttonBarShadow.host)
    return (text, onclick) => {
      const button = document.createElement('button')
      button.textContent = text
      button.addEventListener('click', onclick)
      return buttonBarShadow.appendChild(button)
    }
  })())
}