网易云音乐 模拟真实操作 一键清除每天 99+ 的私信角标

强迫症患者受不了每天 99+ 的角标,然而网易云音乐迟迟不做一键全部标为已读按钮,所以决定自己实现这个功能。本文将讲述:通过模拟真实操作,在云音乐网页版私信页面(使用 iframe 局部刷新的页面)连续查看私信并返回列表来实现一键清除角标的功能。

首先,来到云音乐网页版私信页面:https://music.163.com/#/msg/m/private

打开 Console,JavaScript context 需要选择 contentFrame 以切换到 私信列表的 <iframe>。因为网易音乐用了 <iframe>(为了保持音乐播放不断),所以我们的 JS 代码需要执行于 <iframe> 中。

注:本文所说的 item 意为 私信列表 中的 其中一个私信

为了让 JS 能够方便地在 <iframe> 中执行,可以用 Chrome 的扩展程序 Violentmonkey (暴力猴),将代码注入其中。

大概的流程是这样的:

  1. 得到 私信列表 所有的 item
  2. 处理第 n 个 item var item = document.querySelectorAll('.item.f-cb')[n]
  3. 判断这个 item 是否有角标 Number(item.attributes['data-count'].value)!== 0 则说明有角标,反之则否
  4. 执行打开这个 item item.click() (即发送请求给网易云音乐服务器,告知已读)
  5. 私信内容页 开始加载 -> 加载完毕
  6. 执行 返回到私信列表 window.history.back()
  7. 私信列表页 开始加载 -> 加载完毕
  8. n++ 之后再次执行第一步(处理下一个 item)

具体实现,暴力猴插件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// ==UserScript==
// @name 网易云音乐 私信一键全部标为已读 按钮
// @namespace qwqaq.com
// @version 1.0
// @match *://music.163.com/*
// @description 网易云音乐 模拟真实操作 一键清除每天 99+ 的私信角标
// @grant none
// @run-at document-end
// ==/UserScript==
(function() {
'use strict';

if (document.querySelector('.v-hd3 .tit').innerText !== "私信") return;

function setOnLoadingEnd(onLoadingEnd) {
var isLoading = false;
var id = setInterval(function() {
if (document.querySelector('.u-load') !== null) {
if (isLoading === true) return;
isLoading = true;
} else {
if (isLoading === false) return;
isLoading = false;
onLoadingEnd();
clearInterval(id);
}
}, 30);
}

var lock = false; // 用于判断是否可执行处理下一个 item
var i = 0;
var pageNum = 1;
var inid = null;

function actionStart() {
// 执行直到全部角标清除为止
inid = setInterval(function() {
if (lock === false) {
lock = true;
var item = document.querySelectorAll('.item.f-cb')[i];
if (Number(item.attributes['data-count'].value) !== 0) {
// 需要角标清零:
item.click();
console.log(item);
setOnLoadingEnd(function() { // 结束加载后执行
setTimeout(function() {
window.history.back(); // 返回列表
setOnLoadingEnd(function() {
setTimeout(function() {
lock = false; // 解除锁定
i++;
}, 500);
});
}, 500);
});
} else {
lock = false;
i++;
}

if (i >= document.querySelectorAll('.item.f-cb').length) {
clearInterval(inid);
}
}
}, 30);
}

setOnLoadingEnd(function () {
// 创建按钮
var btn = document.createElement('button');
var btn = document.createElement('button');
btn.setAttribute('class', 'mail u-btn2 u-btn2-1');
btn.setAttribute('style', 'margin-right: 10px');
btn.innerHTML = '<i>一键清除角标</i>';
btn.onclick = function () {
if (inid !== null)
clearInterval(inid);
actionStart();
};
document.querySelector('.v-hd3').appendChild(btn);
});

})();
本站文章除注明转载外均为原创,未经允许不要转载哇. ヾ(゚ー゚ヾ) http://qwqaq.com/fe2cece5.html
分享到