// ==UserScript==
// @name QQ空间说说删除脚本
// @namespace none
// @version 1.0.1
// @description 用于一键删除QQ空间的说说,大概700毫秒左右删除一条
// @author gogofishman
// @license MIT
// @include *://user.qzone.qq.com/*
// @downloadURL none
// ==/UserScript==
var isStart = false;
var delayTime = 500;
var completed = 0;
(function () {
'use strict';
window.onload = AddDiv;
})();
//添加控制面板
function AddDiv() {
let newDiv = document.createElement('div');
newDiv.id = 'ShuoShuoDelete';
//样式
let style = newDiv.style;
style.width = '200px';
style.height = '200px';
style.position = 'fixed';
style.top = '41px';
style.right = '0';
style.zIndex = '99999';
style.padding = '10px';
style.backgroundColor = 'white';
style.backgroundImage = 'url(https://p.sda1.dev/13/3f9eb408f25616eb024b972f7fd1a70d/忍野忍.png)'
style.backgroundRepeat = 'no-repeat';
style.backgroundSize = 'cover';
style.boxShadow = '0px 2px 5px rgba(0, 0, 0, 0.5)';
//内容
newDiv.innerHTML = '' +
' ' +
'
\n' +
'
QQ空间说说删除脚本
\n' +
'
删除顺序:
\n' +
'
正序\n' +
'
倒序\n' +
'
\n' +
'
\n' +
' \n' +
' \n' +
'
\n' +
'
未运行
' +
'
'
let div = document.getElementById('layBackground');
if (div !== null) {
div.appendChild(newDiv);
//添加启动停止
document.getElementById('shuoshuoDelete_start').addEventListener('click', start);
document.getElementById('shuoshuoDelete_end').addEventListener('click', end);
}
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function Print(text) {
console.log(`[说说脚本] - ${text}`)
}
/**
* 等待直到条件成立
* @param {function} control 控制条件
* @param {number} step 每次验证间隔时间 ms
* @param {number} timeOut 超时时间 ms
* @returns {Promise}
* @constructor
*/
async function WaitUntil(control, step = 500, timeOut = 10000) {
let count = 0;
let outCount = timeOut / step;
while (count <= outCount) {
count++;
await sleep(step);
let _c = control();
if (_c) {
return;
}
}
}
//启动
function start() {
if (isStart) return;
if (confirm("是否开始删除说说?")) {
isStart = true;
ChangeStateText('正在删除', 'green')
Print("开始删除...");
completed = 0;
DeleteRun().then(() => Print('删除完成'));
}
}
//停止
function end() {
if (!isStart) return;
isStart = false;
Print("停止删除!")
}
//改变状态文字
function ChangeStateText(text, color) {
let p = document.getElementById('shuoshuoDelete_state');
p.innerText = text;
p.style.color = color;
}
//删除程序
async function DeleteRun() {
//删除顺序
let order = document.querySelector('input[name="order"]:checked').value;
//转到说说页面
let shushuo = document.querySelector('a[title="说说"]');
if (shushuo == null) return;
shushuo.click();
//等待跳转成功,10秒超时
await WaitUntil(
() => document.querySelector('.app_canvas_frame') != null
)
if (document.querySelector('.app_canvas_frame') == null) {
Print('跳转超时!')
return;
}
Print('跳转到说说界面')
//如果倒序,跳转到最后一页
if (order === '倒序') {
Print('倒序')
await WaitUntil(
() => document.querySelector('.app_canvas_frame').contentDocument.querySelector('a[title="末页"]') != null
)
let last = document.querySelector('.app_canvas_frame').contentDocument.querySelector('a[title="末页"]');
if (last != null) {
last.click()
await sleep(3000);
Print("跳转到末页...")
Print("开始删除当前页说说...")
}
}
//开始删除
DeleteCurrentPage(order);
}
//删除当前页中所有的说说
async function DeleteCurrentPage(order) {
if (!isStart) {
alert("已停止删除说说功能!")
ChangeStateText(`已停止 ${completed}`,'red')
return
}
//等待页面加载完成
if (order !== '倒序') {
await WaitUntil(() => document.querySelector('.app_canvas_frame').contentDocument.querySelector('a[title="末页"]') != null)
}else{
await WaitUntil(() => document.querySelector('.app_canvas_frame').contentDocument.querySelector('a[title="首页"]') != null)
}
//获取第一个说说
let li = document.querySelector('.app_canvas_frame').contentDocument.querySelector('.feed');
if (li == null) {
Print('当前页删除完成!')
NextPage(order);
} else {
//删除
let button = li.querySelector('.del_btn');
if (button != null) {
button.click();
await WaitUntil(() => document.querySelector('.qz_dialog_layer_btn') != null)
document.querySelector('.qz_dialog_layer_btn').click();
Print('删除说说+1');
completed++;
ChangeStateText(`正在删除 ${completed}` , 'green')
await sleep(delayTime);
}
//往下循环执行
DeleteCurrentPage(order);
}
}
async function NextPage(order) {
let html = document.querySelector('.app_canvas_frame').contentDocument;
let next = order !== '倒序' ? html.querySelector('a[title="下一页"]') : html.querySelector('a[title="上一页"]');
if (next != null) {
next.click()
Print("点击下一页")
await WaitUntil(() => document.querySelector('.app_canvas_frame').contentDocument.getElementById('msgList').childElementCount > 0)
DeleteCurrentPage(order);
}else {
//全部完成
ChangeStateText('未运行','red')
}
}