洛谷系统生成犇犇的自动删除脚本 发布

技术
编辑文章

这标题好拗口啊

Github | Greasy Fork

这篇文章主要想讲一下实现的思路,毕竟这是我第一次写油猴脚本,先把完整代码放上:

(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-delid ,并给自动删除的函数绑定点击事件。

自动删除

这当然是整个程序的主体啦~,分成三部分来讲。

获取所有犇犇数据

在控制台里查看个人中心的请求,可以发现有个 /feed/user/{uid}?page={pageNum}API ,既然是要所有数据,所以我把后面页码给删了。

判断是否是系统生成的犇犇

可以发现系统生成的比手动发的内容的 div 少了一层,所以思路就明确了:到某一层如果已经是 Text 了就是系统生成的,否则为手动发的。

剩下的就是控制台手动寻找了。

删除犇犇

可以发现删除也是用的 API ,为 POST 请求 /api/feed/delete/{id}{id} 就写在旁边,在控制台里找一通也就找到了。

新评论

称呼不能为空
邮箱格式不合法
网站格式不合法
内容不能为空