Bilibili List Download Extention
可以访问Github进行插件下载
或者直接复制下面的片段粘贴在console, 可以自动下载课程信息:
markdown文件
// 获取所有小节
const items = document.querySelectorAll('.video-pod__item');
let rows = [];
let totalSeconds = 0;
// 时间字符串转秒数
function timeStrToSec(timeStr) {
const arr = timeStr.split(':').map(Number);
if (arr.length === 2) return arr[0] * 60 + arr[1];
if (arr.length === 3) return arr[0] * 3600 + arr[1] * 60 + arr[2];
return 0;
}
// 主循环,生成表格内容并累计总时长
items.forEach((item, idx) => {
const titleDiv = item.querySelector('.title-txt');
const title = titleDiv ? titleDiv.textContent.trim() : '无标题';
const durationDiv = item.querySelector('.stat-item.duration');
const duration = durationDiv ? durationDiv.textContent.trim() : '无时长';
rows.push(`| ${idx + 1} | ${title} | ${duration} |`);
totalSeconds += timeStrToSec(duration);
});
// 计算总时长(hh:mm:ss格式)
function secToTime(sec) {
const h = Math.floor(sec / 3600);
const m = Math.floor((sec % 3600) / 60);
const s = sec % 60;
return [h, m, s].map(x=>x.toString().padStart(2, '0')).join(':');
}
const totalTime = secToTime(totalSeconds);
// 构造md内容
let mdContent = `# 课程视频列表
| 序号 | 标题 | 时长 |
|---|---|---|
${rows.join('\n')}
**课程总时长:${totalTime}**
`;
const blob = new Blob([mdContent], {type: 'text/markdown'});
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'list.md';
a.click();
// 控制台输出总时长
console.log(`课程总时长:${totalTime}`);
txt文件
// 获取所有小节
const items = document.querySelectorAll('.video-pod__item');
let textList = [];
let totalSeconds = 0;
// 时间字符串转秒数
function timeStrToSec(timeStr) {
const arr = timeStr.split(':').map(Number);
if (arr.length === 2) return arr[0] * 60 + arr[1];
if (arr.length === 3) return arr[0] * 3600 + arr[1] * 60 + arr[2];
return 0;
}
// 主循环,生成文本内容并累计总时长
items.forEach((item, idx) => {
const titleDiv = item.querySelector('.title-txt');
const title = titleDiv ? titleDiv.textContent.trim() : '无标题';
const durationDiv = item.querySelector('.stat-item.duration');
const duration = durationDiv ? durationDiv.textContent.trim() : '无时长';
textList.push(`${idx + 1}. ${title} —— ${duration}`);
totalSeconds += timeStrToSec(duration);
});
// 计算总时长(hh:mm:ss格式)
function secToTime(sec) {
const h = Math.floor(sec / 3600);
const m = Math.floor((sec % 3600) / 60);
const s = sec % 60;
return [h, m, s].map(x=>x.toString().padStart(2, '0')).join(':');
}
const totalTime = secToTime(totalSeconds);
// 把总时长也写进结尾
textList.push(`\n课程总时长:${totalTime}`);
const blob = new Blob([textList.join('\n')], {type: 'text/plain'});
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'list.txt';
a.click();
// 控制台输出总时长
console.log(`课程总时长:${totalTime}`);
769

被折叠的 条评论
为什么被折叠?



