QQ空间自动删除说说

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

  1. // ==UserScript==
  2. // @name QQ空间自动删除说说
  3. // @description 一键删除QQ空间所有说说。不可恢复,慎用!
  4. // @namespace https://greasyfork.org/users/197529
  5. // @version 0.7.12
  6. // @author kkocdko
  7. // @license Unlicense
  8. // @match *://user.qzone.qq.com/*
  9. // @noframes
  10. // ==/UserScript==
  11. 'use strict'
  12.  
  13. addFloatButton('删除所有说说', async function () {
  14. this.loop = !this.loop
  15. const appIframe = document.querySelector('.app_canvas_frame')
  16. if (!appIframe) {
  17. const switchToTag = window.confirm('未切换到“说说”标签,是否立即切换?')
  18. if (switchToTag) {
  19. document.querySelector('.head-nav-menu>.menu_item_311>a').click()
  20. } else {
  21. return
  22. }
  23. }
  24. const iframeDocument = appIframe.contentWindow.document
  25. while (this.loop) {
  26. clickAllEl('.del_btn', iframeDocument)
  27. await sleepAsync(2000)
  28. clickAllEl('.qz_dialog_layer_sub')
  29. await sleepAsync(1500)
  30. nextPage()
  31. await sleepAsync(3000)
  32. }
  33.  
  34. function nextPage () {
  35. iframeDocument.querySelectorAll('.mod_pagenav_main>a').forEach(el => {
  36. if (el.innerText === '下一页') {
  37. el.click()
  38. }
  39. })
  40. }
  41. })
  42.  
  43. function clickAllEl (selector, parentNode = document) {
  44. parentNode.querySelectorAll(selector).forEach(el => el.click())
  45. }
  46.  
  47. async function sleepAsync (time) {
  48. return new Promise(resolve => setTimeout(resolve, time))
  49. }
  50.  
  51. function addFloatButton (text, onclick) {
  52. if (!document.addFloatButton) {
  53. const buttonContainer = document.body.appendChild(document.createElement('div')).attachShadow({ mode: 'open' })
  54. buttonContainer.innerHTML = '<style>:host{position:fixed;top:3px;left:3px;z-index:2147483647;height:0}#i{display:none}*{float:left;margin:4px;padding:1em;outline:0;border:0;border-radius:5px;background:#1e88e5;box-shadow:0 1px 4px rgba(0,0,0,.1);color:#fff;font-size:14px;line-height:0;transition:.3s}:active{background:#42a5f5;box-shadow:0 2px 5px rgba(0,0,0,.2)}button:active{transition:0s}:checked~button{visibility:hidden;opacity:0;transform:translateY(-3em)}label{border-radius:50%}:checked~label{opacity:.3;transform:translateY(3em)}</style><input id=i type=checkbox><label for=i></label>'
  55. document.addFloatButton = (text, onclick) => {
  56. const button = document.createElement('button')
  57. button.textContent = text
  58. button.addEventListener('click', onclick)
  59. return buttonContainer.appendChild(button)
  60. }
  61. }
  62. return document.addFloatButton(text, onclick)
  63. }