
作为国内最大的二次元内容社区,Bilibili(B 站)汇聚了海量的优质视频。然而,官方并未提供批量下载的功能,这对于想要离线观看或者收藏的用户来说,无疑是一个痛点。
今天,我们将化繁为简,手把手教你编写你的第一款油猴(Tampermonkey)脚本,实现在 B 站视频页面一键添加“批量下载”按钮的功能。通过本教程,你不仅能解决实际问题,还能初步了解用户脚本的基础知识,为未来更高级的脚本开发打下坚实的基础。
本教程将由浅入深,依次讲解用户脚本的基础概念、B 站视频下载相关的 API 分析、完整的脚本代码实现、以及最终的打包和发布(可选)流程。即使你没有任何编程经验,只要跟着步骤一步步操作,也能成功打造出这款实用的小工具。
一、用户脚本基础:赋予浏览器新的能力
在开始编写脚本之前,我们需要了解什么是用户脚本以及油猴(Tampermonkey)的作用。
用户脚本(User Script): 简单来说,用户脚本是一段使用 JavaScript 编写的代码,它可以扩展浏览器的功能,修改网页的行为和外观。当你访问一个网页时,浏览器会加载并执行这些脚本,从而实现各种自定义功能,例如:
- 移除网页广告: 屏蔽烦人的弹窗和横幅广告。
- 增强网站功能: 添加缺失的功能,例如批量下载、自动点赞等。
- 修改页面样式: 自定义网页的主题、字体、布局等。
- 自动化操作: 自动填写表单、刷新页面、执行特定操作等。
Tampermonkey(油猴): Tampermonkey 是一款免费的浏览器扩展,它是一个用户脚本管理器。你可以把它想象成一个“容器”,用来安装、管理和运行各种用户脚本。它支持 Chrome、Microsoft Edge、Firefox、Safari 等主流浏览器。
安装 Tampermonkey:
首先,你需要在你的浏览器中安装 Tampermonkey 扩展。你可以在浏览器的扩展商店(例如 Chrome 网上应用店、Edge 附加组件商店、Firefox 附加组件)中搜索 “Tampermonkey” 并安装。
安装完成后,浏览器工具栏中会出现 Tampermonkey 的图标,点击它可以打开管理面板,查看已安装的脚本、添加新脚本、配置设置等。
二、B 站视频下载原理与 API 初探
要实现批量下载 B 站视频,我们需要了解其背后的下载原理,以及可能涉及的 API 接口。
B 站视频下载原理(简化版):
B 站视频的播放和下载涉及到多个步骤和不同的 API 接口。简单来说,当我们点击“下载”按钮时,浏览器会向 B 站的服务器发送请求,获取视频的真实下载地址(通常是 .mp4 或 .flv 格式)。这个过程可能涉及到身份验证、参数校验等环节。
API 初探:
为了编写油猴脚本,我们需要找到 B 站提供的与视频信息获取和下载相关的 API 接口。通常,这些接口会返回 JSON 格式的数据,其中包含了视频的标题、分P列表、下载地址等信息。
如何找到 API?
查找 API 接口通常需要一定的 Web 开发基础和耐心。常用的方法包括:
- 开发者工具(DevTools): 现代浏览器都内置了开发者工具(通常按 F12 键打开)。你可以通过 “Network”(网络)选项卡监控网页加载过程中发送和接收的所有请求,从中找到与视频信息获取相关的 API 接口。
- 分析网页源代码: 有些网站会将 API 的调用逻辑或相关信息直接写在网页的 JavaScript 代码中。你可以查看网页源代码(右键点击页面空白处,选择“查看页面源代码”),搜索关键词(例如 “api”, “download”, “videoUrl” 等)来寻找线索。
- 查阅第三方文档或社区分享: 有些热心的开发者可能会分享他们对 B 站 API 的分析和研究成果。你可以在相关的技术社区或论坛上搜索相关信息。
本教程简化处理:
由于 B 站的 API 可能会经常变动,为了让本教程更易于理解和实现,我们将假设你已经找到了获取视频分P列表和下载地址的 API 接口(在实际开发中,你需要自行探索或参考已有的开源项目)。我们假设存在一个 API 接口,当你提供视频的 aid
(AV 号)或 bvid
(BV 号)时,它会返回一个 JSON 数据,其中包含了该视频所有分P的标题和下载地址。
假设的 API 响应结构:
假设 API 返回的数据结构如下:
“`json { “code”: 0, “message”: “success”, “data”: [ { “part”: “P1 视频标题1”, “downloadUrl”: “https://example.bilibili.com/download/video1.mp4” }, { “part”: “P2 视频标题2”, “downloadUrl”: “https://example.bilibili.com/download/video2.mp4” }, // … 更多分P ] } “`
跨域问题(CORS):
在油猴脚本中直接调用其他域名的 API(例如 B 站的 API)可能会遇到跨域资源共享(CORS)的限制。浏览器为了安全起见,通常不允许来自一个域名的网页脚本直接请求另一个域名的资源。解决跨域问题的方法有很多,例如:
- 服务器端代理: 你的脚本请求你自己的服务器,然后你的服务器再去请求 B 站的 API。
- 使用 Tampermonkey 提供的
GM_xmlhttpRequest
API:GM_xmlhttpRequest
允许用户脚本发起跨域请求,绕过浏览器的同源策略限制。
在本教程中,我们将使用 GM_xmlhttpRequest
来处理跨域请求。
三、完整代码实现:批量下载按钮的诞生
现在,让我们开始编写油猴脚本的完整代码。
- 打开 Tampermonkey 管理面板: 点击浏览器工具栏中的 Tampermonkey 图标,选择 “管理面板”。
- 添加新脚本: 在管理面板中,点击 “+” 号按钮,创建一个新的用户脚本。
- 编辑脚本元数据: 在代码编辑器的顶部,你会看到一些以
// ==UserScript==
和// ==/UserScript==
包裹的注释,这些是脚本的元数据,用于描述脚本的基本信息和匹配规则。你需要修改这些元数据,让脚本在 B 站的视频页面生效。 “`javascript // ==UserScript== // @name Bilibili Batch Downloader // @namespace your_namespace // @version 0.1.0 // @description Add a batch download button to Bilibili video pages. // @author Your Name // @match https://www.bilibili.com/video/* // @grant GM_xmlhttpRequest // @grant GM_download // ==/UserScript== “`@name
: 脚本的名称。@namespace
: 脚本的命名空间,用于区分不同的脚本。@version
: 脚本的版本号。@description
: 脚本的描述信息。@author
: 脚本的作者。@match
: 指定脚本在哪些 URL 上生效。https://www.bilibili.com/video/*
表示在所有以https://www.bilibili.com/video/
开头的 URL 上生效(即 B 站的视频播放页)。@grant
: 声明脚本需要使用的 Tampermonkey API 权限。GM_xmlhttpRequest
用于发起跨域请求,GM_download
用于触发浏览器下载。
- 编写脚本代码: 在元数据下方,开始编写脚本的核心逻辑。 “`javascript (function() { ‘use strict’;
// 获取视频的 aid 或 bvid function getVideoId() { const pathname = window.location.pathname; const match = pathname.match(/\/video\/(av\d+|BV\w+)/); return match ? match()[1] : null; } // 创建批量下载按钮 function createBatchDownloadButton() { const downloadButtonContainer = document.querySelector('.video-toolbar'); // 根据实际页面结构选择合适的容器 if (downloadButtonContainer && !document.getElementById('batchDownloadBtn')) { const batchDownloadBtn = document.createElement('button'); batchDownloadBtn.id = 'batchDownloadBtn'; batchDownloadBtn.classList.add('video-toolbar-left-item'); // 模仿 B 站按钮样式 batchDownloadBtn.textContent = '批量下载'; batchDownloadBtn.addEventListener('click', handleBatchDownload); downloadButtonContainer.appendChild(batchDownloadBtn); } } // 处理批量下载逻辑 function handleBatchDownload() { const videoId = getVideoId(); if (!videoId) { alert('无法获取视频 ID。'); return; } // 替换为实际的 API 接口地址 const apiUrl = `https://your-api-endpoint.com/bilibili/downloadInfo?videoId=${videoId}`; GM_xmlhttpRequest({ method: 'GET', url: apiUrl, onload: function(response) { if (response.status === 200) { try { const data = JSON.parse(response.responseText); if (data.code === 0 && data.data && data.data.length > 0) { data.data.forEach(item => { GM_download({ url: item.downloadUrl, name: `${videoId}_${item.part}.mp4` // 自定义下载文件名 }); }); alert(`已开始批量下载 ${data.data.length} 个视频分P,请检查浏览器下载管理器。`); } else { alert(`获取下载信息失败:${data.message || 'API 返回错误'}`); } } catch (error) { console.error('解析 API 响应失败:', error); alert('解析下载信息失败,请检查控制台。'); } } else { alert(`请求下载信息失败:${response.statusText}`); } }, onerror: function(error) { console.error('请求 API 失败:', error); alert('请求下载信息失败,请检查控制台。'); } }); } // 监听页面加载完成事件 window.addEventListener('load', createBatchDownloadButton); // 监听 URL 变化事件 (用于处理 AJAX 加载的页面) let previousUrl = ''; const urlObserver = new MutationObserver(() => { const currentUrl = window.location.href; if (currentUrl !== previousUrl) { previousUrl = currentUrl; // 延迟执行,确保页面元素加载完成 setTimeout(createBatchDownloadButton, 500); } }); urlObserver.observe(document.body, { subtree: true, childList: true });
})(); “` 代码解释:getVideoId()
: 该函数用于从当前页面的 URL 中提取视频的 AV 号或 BV 号。createBatchDownloadButton()
: 该函数用于在 B 站视频工具栏中创建一个新的 “批量下载” 按钮。它首先检查按钮是否已经存在,避免重复创建。handleBatchDownload()
: 这是按钮点击事件的处理函数。- 它首先获取视频 ID。
- 然后构建请求下载信息的 API 地址(你需要将
https://your-api-endpoint.com/bilibili/downloadInfo
替换为实际的 API 接口地址)。 - 使用
GM_xmlhttpRequest
发起跨域 GET 请求。 - 在
onload
回调函数中,处理 API 的响应:- 检查响应状态码是否为 200 (成功)。
- 解析 JSON 响应。
- 检查
code
是否为 0,以及data
是否包含有效的下载信息。 - 遍历
data
数组,对每个分P 调用GM_download
触发浏览器下载。 - 显示下载开始或失败的提示信息。
onerror
回调函数用于处理 API 请求失败的情况。
window.addEventListener('load', createBatchDownloadButton);
: 在页面加载完成后创建批量下载按钮。MutationObserver
: 用于监听页面 URL 的变化,当用户切换到新的视频页面时,重新创建批量下载按钮(因为 B 站的页面可能是通过 AJAX 动态加载的)。
- 保存脚本: 点击编辑器左上角的 “文件” -> “保存”,保存你的脚本。
四、使用脚本:一键批量下载
- 打开 B 站视频页面: 访问你想要下载的 B 站视频页面。
- 查看批量下载按钮: 如果脚本生效,你应该能在视频工具栏中看到一个名为 “批量下载” 的按钮。
- 点击按钮: 点击 “批量下载” 按钮,脚本将向你假设的 API 接口发起请求,获取该视频所有分P的下载地址,并自动触发浏览器的下载管理器开始下载。
- 检查下载管理器: 你可以在浏览器的下载管理器中查看下载进度。下载的文件名将以视频 ID 和分P标题命名。
重要提示:
- 实际 API 地址: 本教程中的
https://your-api-endpoint.com/bilibili/downloadInfo
只是一个占位符。你需要自行研究或查找 B 站的实际 API 接口地址才能使脚本真正工作。 - API 变动: B 站可能会随时更改其 API 接口,导致脚本失效。你需要定期维护和更新你的脚本。
- 下载限制: B 站可能对视频下载有一定的限制。请遵守 B 站的服务条款,合理使用下载功能,切勿用于商业用途或侵犯版权的行为。
- 错误处理: 代码中包含了一些基本的错误处理,但在实际使用中,你可能需要根据具体情况添加更完善的错误处理机制。
五、打包和发布(可选):分享你的成果
如果你希望将你编写的油猴脚本分享给其他人使用,你可以将其打包并发布到用户脚本分享平台,例如 Greasy Fork(greasyfork.org)。
打包:
Tampermonkey 本身提供了导出脚本的功能。在管理面板中,找到你的脚本,点击右侧的 “导出” 按钮,即可将脚本导出为一个 .user.js
文件。
发布到 Greasy Fork:
- 注册账号: 访问 Greasy Fork 网站并注册一个账号。
- 上传脚本: 登录后,点击 “发布新脚本” 按钮,上传你的
.user.js
文件。 - 填写脚本信息: 填写脚本的名称、描述、适用网站、版本号等信息。务必提供清晰准确的说明,方便其他用户了解和使用你的脚本。
- 发布: 仔细检查所有信息后,点击 “发布” 按钮即可将你的脚本发布到 Greasy Fork 平台。
其他用户可以在 Greasy Fork 上搜索到你的脚本并进行安装。
六、总结:你的第一次油猴脚本之旅
恭喜你!通过本教程,你已经成功编写了你的第一款油猴脚本,并了解了用户脚本的基本概念、API 调用、跨域处理和脚本发布流程。虽然本教程中的 API 地址是假设的,但核心的编程思路和方法是通用的。
油猴脚本的世界是充满无限可能的。你可以利用它来定制各种网站的功能,提升你的网络浏览体验。希望这个给 B 站添加批量下载按钮的例子能够激发你对用户脚本开发的兴趣,并鼓励你继续探索和创造更多实用的脚本,让你的浏览器更加智能和强大!记住,持续学习和实践是成为一名优秀脚本开发者的关键。祝你在油猴脚本的世界里玩得开心!
“还在为一个个点击 B 站视频的‘下载’按钮而烦恼吗?想一次性下载喜欢的系列教程或 UP 主的全部作品却束手无策吗?”
作为国内最大的二次元内容社区,Bilibili(B 站)汇聚了海量的优质视频。然而,官方并未提供批量下载的功能,这对于想要离线观看或者收藏的用户来说,无疑是一个痛点。
今天,我们将化繁为简,手把手教你编写你的第一款油猴(Tampermonkey)脚本,实现在 B 站视频页面一键添加“批量下载”按钮的功能。通过本教程,你不仅能解决实际问题,还能初步了解用户脚本的基础知识,为未来更高级的脚本开发打下坚实的基础。
本教程将由浅入深,依次讲解用户脚本的基础概念、B 站视频下载相关的 API 分析、完整的脚本代码实现、以及最终的打包和发布(可选)流程。即使你没有任何编程经验,只要跟着步骤一步步操作,也能成功打造出这款实用的小工具。
一、用户脚本基础:赋予浏览器新的能力
在开始编写脚本之前,我们需要了解什么是用户脚本以及油猴(Tampermonkey)的作用。
用户脚本(User Script): 简单来说,用户脚本是一段使用 JavaScript 编写的代码,它可以扩展浏览器的功能,修改网页的行为和外观。当你访问一个网页时,浏览器会加载并执行这些脚本,从而实现各种自定义功能,例如:
- 移除网页广告: 屏蔽烦人的弹窗和横幅广告。
- 增强网站功能: 添加缺失的功能,例如批量下载、自动点赞等。
- 修改页面样式: 自定义网页的主题、字体、布局等。
- 自动化操作: 自动填写表单、刷新页面、执行特定操作等。
Tampermonkey(油猴): Tampermonkey 是一款免费的浏览器扩展,它是一个用户脚本管理器。你可以把它想象成一个“容器”,用来安装、管理和运行各种用户脚本。它支持 Chrome、Microsoft Edge、Firefox、Safari 等主流浏览器。
安装 Tampermonkey:
首先,你需要在你的浏览器中安装 Tampermonkey 扩展。你可以在浏览器的扩展商店(例如 Chrome 网上应用店、Edge 附加组件商店、Firefox 附加组件)中搜索 “Tampermonkey” 并安装。
安装完成后,浏览器工具栏中会出现 Tampermonkey 的图标,点击它可以打开管理面板,查看已安装的脚本、添加新脚本、配置设置等。
二、B 站视频下载原理与 API 初探
要实现批量下载 B 站视频,我们需要了解其背后的下载原理,以及可能涉及的 API 接口。
B 站视频下载原理(简化版):
B 站视频的播放和下载涉及到多个步骤和不同的 API 接口。简单来说,当我们点击“下载”按钮时,浏览器会向 B 站的服务器发送请求,获取视频的真实下载地址(通常是 .mp4 或 .flv 格式)。这个过程可能涉及到身份验证、参数校验等环节。
API 初探:
为了编写油猴脚本,我们需要找到 B 站提供的与视频信息获取和下载相关的 API 接口。通常,这些接口会返回 JSON 格式的数据,其中包含了视频的标题、分P列表、下载地址等信息。
如何找到 API?
查找 API 接口通常需要一定的 Web 开发基础和耐心。常用的方法包括:
- 开发者工具(DevTools): 现代浏览器都内置了开发者工具(通常按 F12 键打开)。你可以通过 “Network”(网络)选项卡监控网页加载过程中发送和接收的所有请求,从中找到与视频信息获取相关的 API 接口。
- 分析网页源代码: 有些网站会将 API 的调用逻辑或相关信息直接写在网页的 JavaScript 代码中。你可以查看网页源代码(右键点击页面空白处,选择“查看页面源代码”),搜索关键词(例如 “api”, “download”, “videoUrl” 等)来寻找线索。
- 查阅第三方文档或社区分享: 有些热心的开发者可能会分享他们对 B 站 API 的分析和研究成果。你可以在相关的技术社区或论坛上搜索相关信息。
本教程简化处理:
由于 B 站的 API 可能会经常变动,为了让本教程更易于理解和实现,我们将假设你已经找到了获取视频分P列表和下载地址的 API 接口(在实际开发中,你需要自行探索或参考已有的开源项目)。我们假设存在一个 API 接口,当你提供视频的 aid
(AV 号)或 bvid
(BV 号)时,它会返回一个 JSON 数据,其中包含了该视频所有分P的标题和下载地址。
假设的 API 响应结构:
假设 API 返回的数据结构如下:
“`json { “code”: 0, “message”: “success”, “data”: [ { “part”: “P1 视频标题1”, “downloadUrl”: “https://example.bilibili.com/download/video1.mp4” }, { “part”: “P2 视频标题2”, “downloadUrl”: “https://example.bilibili.com/download/video2.mp4” }, // … 更多分P ] } “`
跨域问题(CORS):
在油猴脚本中直接调用其他域名的 API(例如 B 站的 API)可能会遇到跨域资源共享(CORS)的限制。浏览器为了安全起见,通常不允许来自一个域名的网页脚本直接请求另一个域名的资源。解决跨域问题的方法有很多,例如:
- 服务器端代理: 你的脚本请求你自己的服务器,然后你的服务器再去请求 B 站的 API。
- 使用 Tampermonkey 提供的
GM_xmlhttpRequest
API:GM_xmlhttpRequest
允许用户脚本发起跨域请求,绕过浏览器的同源策略限制。
在本教程中,我们将使用 GM_xmlhttpRequest
来处理跨域请求。
三、完整代码实现:批量下载按钮的诞生
现在,让我们开始编写油猴脚本的完整代码。
- 打开 Tampermonkey 管理面板: 点击浏览器工具栏中的 Tampermonkey 图标,选择 “管理面板”。
- 添加新脚本: 在管理面板中,点击 “+” 号按钮,创建一个新的用户脚本。
- 编辑脚本元数据: 在代码编辑器的顶部,你会看到一些以
// ==UserScript==
和// ==/UserScript==
包裹的注释,这些是脚本的元数据,用于描述脚本的基本信息和匹配规则。你需要修改这些元数据,让脚本在 B 站的视频页面生效。 “`javascript // ==UserScript== // @name Bilibili Batch Downloader // @namespace your_namespace // @version 0.1.0 // @description Add a batch download button to Bilibili video pages. // @author Your Name // @match https://www.bilibili.com/video/* // @grant GM_xmlhttpRequest // @grant GM_download // ==/UserScript== “`@name
: 脚本的名称。@namespace
: 脚本的命名空间,用于区分不同的脚本。@version
: 脚本的版本号。@description
: 脚本的描述信息。@author
: 脚本的作者。@match
: 指定脚本在哪些 URL 上生效。https://www.bilibili.com/video/*
表示在所有以https://www.bilibili.com/video/
开头的 URL 上生效(即 B 站的视频播放页)。@grant
: 声明脚本需要使用的 Tampermonkey API 权限。GM_xmlhttpRequest
用于发起跨域请求,GM_download
用于触发浏览器下载。
- 编写脚本代码: 在元数据下方,开始编写脚本的核心逻辑。 “`javascript (function() { ‘use strict’;
// 获取视频的 aid 或 bvid function getVideoId() { const pathname = window.location.pathname; const match = pathname.match(/\/video\/(av\d+|BV\w+)/); return match ? match()[1] : null; } // 创建批量下载按钮 function createBatchDownloadButton() { const downloadButtonContainer = document.querySelector('.video-toolbar'); // 根据实际页面结构选择合适的容器 if (downloadButtonContainer && !document.getElementById('batchDownloadBtn')) { const batchDownloadBtn = document.createElement('button'); batchDownloadBtn.id = 'batchDownloadBtn'; batchDownloadBtn.classList.add('video-toolbar-left-item'); // 模仿 B 站按钮样式 batchDownloadBtn.textContent = '批量下载'; batchDownloadBtn.addEventListener('click', handleBatchDownload); downloadButtonContainer.appendChild(batchDownloadBtn); } } // 处理批量下载逻辑 function handleBatchDownload() { const videoId = getVideoId(); if (!videoId) { alert('无法获取视频 ID。'); return; } // 替换为实际的 API 接口地址 const apiUrl = `https://your-api-endpoint.com/bilibili/downloadInfo?videoId=${videoId}`; GM_xmlhttpRequest({ method: 'GET', url: apiUrl, onload: function(response) { if (response.status === 200) { try { const data = JSON.parse(response.responseText); if (data.code === 0 && data.data && data.data.length > 0) { data.data.forEach(item => { GM_download({ url: item.downloadUrl, name: `${videoId}_${item.part}.mp4` // 自定义下载文件名 }); }); alert(`已开始批量下载 ${data.data.length} 个视频分P,请检查浏览器下载管理器。`); } else { alert(`获取下载信息失败:${data.message || 'API 返回错误'}`); } } catch (error) { console.error('解析 API 响应失败:', error); alert('解析下载信息失败,请检查控制台。'); } } else { alert(`请求下载信息失败:${response.statusText}`); } }, onerror: function(error) { console.error('请求 API 失败:', error); alert('请求下载信息失败,请检查控制台。'); } }); } // 监听页面加载完成事件 window.addEventListener('load', createBatchDownloadButton); // 监听 URL 变化事件 (用于处理 AJAX 加载的页面) let previousUrl = ''; const urlObserver = new MutationObserver(() => { const currentUrl = window.location.href; if (currentUrl !== previousUrl) { previousUrl = currentUrl; // 延迟执行,确保页面元素加载完成 setTimeout(createBatchDownloadButton, 500); } }); urlObserver.observe(document.body, { subtree: true, childList: true });
})(); “` 代码解释:getVideoId()
: 该函数用于从当前页面的 URL 中提取视频的 AV 号或 BV 号。createBatchDownloadButton()
: 该函数用于在 B 站视频工具栏中创建一个新的 “批量下载” 按钮。它首先检查按钮是否已经存在,避免重复创建。handleBatchDownload()
: 这是按钮点击事件的处理函数。- 它首先获取视频 ID。
- 然后构建请求下载信息的 API 地址(你需要将
https://your-api-endpoint.com/bilibili/downloadInfo
替换为实际的 API 接口地址)。 - 使用
GM_xmlhttpRequest
发起跨域 GET 请求。 - 在
onload
回调函数中,处理 API 的响应:- 检查响应状态码是否为 200 (成功)。
- 解析 JSON 响应。
- 检查
code
是否为 0,以及data
是否包含有效的下载信息。 - 遍历
data
数组,对每个分P 调用GM_download
触发浏览器下载。 - 显示下载开始或失败的提示信息。
onerror
回调函数用于处理 API 请求失败的情况。
window.addEventListener('load', createBatchDownloadButton);
: 在页面加载完成后创建批量下载按钮。MutationObserver
: 用于监听页面 URL 的变化,当用户切换到新的视频页面时,重新创建批量下载按钮(因为 B 站的页面可能是通过 AJAX 动态加载的)。
- 保存脚本: 点击编辑器左上角的 “文件” -> “保存”,保存你的脚本。
四、使用脚本:一键批量下载
- 打开 B 站视频页面: 访问你想要下载的 B 站视频页面。
- 查看批量下载按钮: 如果脚本生效,你应该能在视频工具栏中看到一个名为 “批量下载” 的按钮。
- 点击按钮: 点击 “批量下载” 按钮,脚本将向你假设的 API 接口发起请求,获取该视频所有分P的下载地址,并自动触发浏览器的下载管理器开始下载。
- 检查下载管理器: 你可以在浏览器的下载管理器中查看下载进度。下载的文件名将以视频 ID 和分P标题命名。
重要提示:
- 实际 API 地址: 本教程中的
https://your-api-endpoint.com/bilibili/downloadInfo
只是一个占位符。你需要自行研究或查找 B 站的实际 API 接口地址才能使脚本真正工作。 - API 变动: B 站可能会随时更改其 API 接口,导致脚本失效。你需要定期维护和更新你的脚本。
- 下载限制: B 站可能对视频下载有一定的限制。请遵守 B 站的服务条款,合理使用下载功能,切勿用于商业用途或侵犯版权的行为。
- 错误处理: 代码中包含了一些基本的错误处理,但在实际使用中,你可能需要根据具体情况添加更完善的错误处理机制。
五、打包和发布(可选):分享你的成果
如果你希望将你编写的油猴脚本分享给其他人使用,你可以将其打包并发布到用户脚本分享平台,例如 Greasy Fork(greasyfork.org)。
打包:
Tampermonkey 本身提供了导出脚本的功能。在管理面板中,找到你的脚本,点击右侧的 “导出” 按钮,即可将脚本导出为一个 .user.js
文件。
发布到 Greasy Fork:
- 注册账号: 访问 Greasy Fork 网站并注册一个账号。
- 上传脚本: 登录后,点击 “发布新脚本” 按钮,上传你的
.user.js
文件。 - 填写脚本信息: 填写脚本的名称、描述、适用网站、版本号等信息。务必提供清晰准确的说明,方便其他用户了解和使用你的脚本。
- 发布: 仔细检查所有信息后,点击 “发布” 按钮即可将你的脚本发布到 Greasy Fork 平台。
其他用户可以在 Greasy Fork 上搜索到你的脚本并进行安装。
六、总结:你的第一次油猴脚本之旅
恭喜你!通过本教程,你已经成功编写了你的第一款油猴脚本,并了解了用户脚本的基本概念、API 调用、跨域处理和脚本发布流程。虽然本教程中的 API 地址是假设的,但核心的编程思路和方法是通用的。
油猴脚本的世界是充满无限可能的。你可以利用它来定制各种网站的功能,提升你的网络浏览体验。希望这个给 B 站添加批量下载按钮的例子能够激发你对用户脚本开发的兴趣,并鼓励你继续探索和创造更多实用的脚本,让你的浏览器更加智能和强大!记住,持续学习和实践是成为一名优秀脚本开发者的关键。祝你在油猴脚本的世界里玩得开心!