快速导出 B 站收藏夹、合集、个人关注列表
使用方法
打开一个对应网址 然后在控制台执行(F12 - console - 粘贴 - 回车)下面对应的代码 , 新版edge浏览器需要先输入 “允许粘贴” 回车,先解除粘贴执行代码的限制。
剩下慢慢等 5秒钟处理一页,处理完成后,写入到原来页面 然后保存网页即可。
收藏列表
例如 https://space.bilibili.com/232495155/favlist?fid=1097406455&ftype=create
实现代码
function 获取列表 ()
{
var result = '';
const nodeList = document.querySelectorAll("#app > main > div.space-favlist > div.favlist-main > div.fav-list-main > div.items a:not([class])");
Array.from(nodeList).forEach(node => {
//console.log(node.getAttribute('href').match(/[^?]+/)[0]); //调试用
result += [
node.innerText ,
'<br><a href="' ,
node.getAttribute('href').match(/[^?]+/)[0] ,
'" target=_blank >',
node.getAttribute('href').match(/[^?]+/)[0],
'</a><br>'
].join('');
});
return result;
}
function 判断下一页是否存在(){
var btns = document.querySelectorAll('button.vui_pagenation--btn-side'); //查找上一页和下一页按钮
var d_btns = document.querySelectorAll('button.vui_pagenation--btn-side[disabled]'); // 查找被禁用的按钮
if(btns.length === 0){ //无分页
return '';
}
if(d_btns.length === 1){
if (d_btns[0].textContent.trim() === '上一页') {
//第一页 (因为上一页被禁用)返回下一页
return btns[1];
}
if (d_btns[0].textContent.trim() === '下一页') {
//最后一页(因为下一页被禁用)
return '';
}
}
//中间页
return btns[1];
}
var 最终html = "";
function 启动 (){
最终html += 获取列表();
下一页 = 判断下一页是否存在();
if(下一页 === '')
{
document.write(最终html);
return ;
}else{
下一页.click();
setTimeout("启动()",5000);
}
}
启动();
合集列表
例如 https://space.bilibili.com/326251695/lists/480959?type=season
function 获取列表 ()
{
var result = '';
const nodeList = document.querySelectorAll("#app > main > div.space-list-details > div.list-content a:not([class])");
Array.from(nodeList).forEach(node => {
//console.log(node.getAttribute('href').match(/[^?]+/)[0]); //调试用
result += [
node.innerText ,
'<br><a href="' ,
node.getAttribute('href').match(/[^?]+/)[0] ,
'" target=_blank >',
node.getAttribute('href').match(/[^?]+/)[0],
'</a><br>'
].join('');
});
return result;
}
function 判断下一页是否存在(){
var btns = document.querySelectorAll('button.vui_pagenation--btn-side'); //查找上一页和下一页按钮
var d_btns = document.querySelectorAll('button.vui_pagenation--btn-side[disabled]'); // 查找被禁用的按钮
if(btns.length === 0){ //无分页
return '';
}
if(d_btns.length === 1){
if (d_btns[0].textContent.trim() === '上一页') {
//第一页 (因为上一页被禁用)返回下一页
return btns[1];
}
if (d_btns[0].textContent.trim() === '下一页') {
//最后一页(因为下一页被禁用)
return '';
}
}
//中间页
return btns[1];
}
var 最终html = "";
function 启动 (){
最终html += 获取列表();
下一页 = 判断下一页是否存在();
if(下一页 === '')
{
document.write(最终html);
return ;
}else{
下一页.click();
setTimeout("启动()",5000);
}
}
启动();
个人关注列表
例如 https://space.bilibili.com/232495155/fans/follow B站限制只能访问其他人关注列表的前5页 所以其实这个代码是导出自己关注的列表,而不能处理其他人的
function 获取列表 ()
{
var result = '';
const nodeList = document.querySelectorAll("a.relation-card-info__uname");
Array.from(nodeList).forEach(node => {
//console.log(node.getAttribute('href').match(/[^?]+/)[0]); //调试用
result += [
node.innerText ,
'<br><a href="' ,
node.getAttribute('href').match(/[^?]+/)[0] ,
'" target=_blank >',
node.getAttribute('href').match(/[^?]+/)[0],
'</a><br>'
].join('');
});
return result;
}
function 判断下一页是否存在(){
var btns = document.querySelectorAll('button.vui_pagenation--btn-side'); //查找上一页和下一页按钮
var d_btns = document.querySelectorAll('button.vui_pagenation--btn-side[disabled]'); // 查找被禁用的按钮
if(btns.length === 0){ //无分页
return '';
}
if(d_btns.length === 1){
if (d_btns[0].textContent.trim() === '上一页') {
//第一页 (因为上一页被禁用)返回下一页
return btns[1];
}
if (d_btns[0].textContent.trim() === '下一页') {
//最后一页(因为下一页被禁用)
return '';
}
}
//中间页
return btns[1];
}
var 最终html = "";
function 启动 (){
最终html += 获取列表();
下一页 = 判断下一页是否存在();
if(下一页 === '')
{
document.write(最终html);
return ;
}else{
下一页.click();
setTimeout("启动()",5000);
}
}
启动();