这标题好拗口啊
这篇文章主要想讲一下实现的思路,毕竟这是我第一次写油猴脚本,先把完整代码放上:
(function () {
'use strict';
let uid = window._feInjection.currentUser.uid; //获取当前用户uid
$('.popup-button').click(function () {
$('.apps').append('<a id="bb-del" data-v-1f4667be="" data-v-1758e89a="" href="javascript:void 0" class="color-none">清理犇犇</a>'); //生成按钮
$('#bb-del').click(function () { //绑定点击事件
$.get('https://www.luogu.org/feed/user/' + uid, function (data) { //获取数据
for (let i = 0; ; i += 2) {
let cur = $(data)[i];
if (cur.children[1] === undefined) {
break; //遍历完则退出
}
if (cur.children[1].children[1].children[0].firstChild.toString() !== "[object Text]") {
continue; //手动打的则跳过
}
let id = cur.children[1].children[0].children[0].children[1].dataset.feedId; //获取id
$.post("/api/feed/delete/" + id); //删除
}
});
});
})
})();
获取uid
在洛谷首页查看源代码,可以发现 22
行有个把 URI
编码转成 JSON
赋值给 window._feInjection
的语句。然后在控制台里可以发现 window._feInjection.currentUser.uid
就是当前用户的 uid
。
至于我是怎么找到的,那当然是 Ctrl+F
大法好啊!
生成按钮
纠结了半天还是选择放在左侧菜单栏中 应用
的展开栏中,感觉这样既方便又不影响美观。唯一的bug是在题库等新页面中会失效,可能是因为 Vue
的生命周期问题。(我对 Vue
只知点皮毛所以如果口胡错了当我没说)
任意找一个按钮,依瓢画葫芦给 append
上去就行了。为了方便我加了个 #bb-del
的 id
,并给自动删除的函数绑定点击事件。
自动删除
这当然是整个程序的主体啦~,分成三部分来讲。
获取所有犇犇数据
在控制台里查看个人中心的请求,可以发现有个 /feed/user/{uid}?page={pageNum}
的 API
,既然是要所有数据,所以我把后面页码给删了。
判断是否是系统生成的犇犇
可以发现系统生成的比手动发的内容的 div
少了一层,所以思路就明确了:到某一层如果已经是 Text
了就是系统生成的,否则为手动发的。
剩下的就是控制台手动寻找了。
删除犇犇
可以发现删除也是用的 API
,为 POST
请求 /api/feed/delete/{id}
。{id}
就写在旁边,在控制台里找一通也就找到了。