学生用SharePoint网课视频一键批量存本地(Electron桌面版,免服务器)
本文还有配套的精品资源点击获取简介这是一款专为大学生和研究生设计的SharePoint教学视频离线保存工具直接在本地电脑运行不上传、不中转、不依赖云端服务。支持Windows、macOS、Linux三大系统通过图形界面操作就能批量下载嵌入在SharePoint页面里的网课视频链接也兼容手动粘贴的yt-dlp可识别格式URL。使用前需自行安装Python 3、最新版yt-dlp和FFmpeg——装好后点几下就能开始下载。登录环节支持配置自动认证逻辑比如适配学校统一身份认证避免每次重复输账号密码每个视频都能单独设置分辨率、保存路径、文件命名规则如「课程名_第X讲_日期」。默认存到系统Downloads文件夹Linux用户若无该目录则自动回落到主目录。开发调试也很方便用yarn install装依赖yarn start直接跑开发版yarn dist打包成安装包。源码结构清晰核心模块分工明确——app.js管主流程sharedown.js处理业务逻辑downloadQue.js管理队列video.js解析视频地址timeoutMessage.js控制超时提示messageBoxType.js定义弹窗类型preload.js负责安全上下文隔离。所有资源文件图标、样式、启动页都已内置开箱即用。1. 项目概述为什么一个学生需要“SharePoint网课视频一键存本地”你有没有过这样的经历老师把一整学期的录播课都发在学校的SharePoint站点上页面里嵌着十几个PowerPoint摄像头画中画的视频每个点开都是全屏播放器右键“另存为”灰掉开发者工具里扒出来的video标签src是一串带临时token的长链接有效期只有两小时想批量保存得挨个复制URL、粘贴进yt-dlp命令行、手动加--format best[height1080]、再敲回车——一节课12个视频光敲命令就敲到手酸。更别提有些学校用的是Azure AD统一身份认证每次打开SharePoint都要跳转到校内SSO登录页浏览器Cookie还经常失效导致yt-dlp直接401报错。Sharedown就是为解决这个“真实痛点”而生的——它不是另一个“通用视频下载器”而是专为高校教学场景打磨的离线资源归档工具。关键词里的“SharePoint下载”“网课视频保存”“学生工具”不是包装话术而是功能锚点它只处理SharePoint页面中真实存在的教学视频流非OneDrive直链、非Teams会议录像所有逻辑围绕“学生视角下的最小可行操作闭环”设计。比如它不追求支持100种网站但确保能稳定解析https://contoso.sharepoint.com/sites/CS201/_layouts/15/embed.aspx?play1...这类嵌入式URL它不内置账号密码存储但提供loginModules/目录让你按自己学校SSO流程写3~5行JS就能接入自动登录它不强制你改系统环境变量但会在启动时主动检测yt-dlp --version和ffmpeg -version缺哪个就弹窗告诉你去哪下、下哪个版本、怎么验证装好了。我试过用它帮实验室三位研究生整理《机器学习导论》《生物信息学实践》《材料表征技术》三门课的全部视频资源。从第一次运行到最终打包成可执行文件全程没碰服务器、没开云服务、没上传任何视频片段——所有数据始终留在本地硬盘。Windows用户双击sharedown.exemacOS用户拖进ApplicationsLinux用户解压后点./sharedown三秒内进入主界面。这不是一个“技术极客玩具”而是一个像U盘一样即插即用的学术生产力配件你不需要懂OAuth2.0握手流程但能用上自动登录你不需要背yt-dlp参数手册但能用下拉菜单选“720p优先”或“仅音频”你甚至可以不写代码直接把老师发的SharePoint课程页URL粘贴进去点“开始下载”转身去泡杯咖啡回来时23个G的视频已按「课程名_第X讲_20240415」命名好静静躺在你的Downloads文件夹里。2. 整体架构与设计思路为什么是Electron yt-dlp Python而不是其他方案2.1 技术栈选择背后的现实权衡Sharedown的技术组合看似“复古”Electron Python 命令行工具实则是对学生使用场景的精准适配。我们来拆解三个核心组件的选择逻辑Electron作为桌面框架不是因为“时髦”而是因为“零部署门槛”很多学生电脑是学院统一分发的Windows 10教育版管理员权限被锁死没法装Docker、没法配Node.js全局环境、甚至Chrome浏览器都被策略限制升级。Electron打包后的.exe/.dmg/.AppImage是自包含的它把Chromium渲染引擎、Node.js运行时、所有JS依赖全塞进一个文件里。用户双击即用背后不依赖系统级Node版本也不怕Python路径冲突。对比之下用RustTauri虽然体积小但Windows用户得先装Visual C Redistributable用GoWebView2则要强求系统有Edge 92而很多机房电脑还卡在Edge 86。Electron的“重”恰恰成了学生场景的“轻”——它把复杂性封装掉了留给用户的只有图标和点击。yt-dlp而非ffmpeg直连是因为“协议兼容性”比“性能”更重要有人会问既然最终都是调ffmpeg为什么不直接解析m3u8或dash manifest然后用ffmpeg下载答案很实在SharePoint嵌入视频的分发方式五花八门。有的用HLS.m3u8有的用MPEG-DASH.mpd有的甚至用自定义的分段加密方案如AES-128 with custom key server。yt-dlp的核心价值在于它维护着一个持续更新的“网站提取器库”extractors其中sharepoint.py提取器专门处理/embed.aspx和/videoplayer.aspx这类路径。它能自动识别token过期机制、处理302重定向链、绕过简单的反爬UA检测。我实测过直接用ffmpeg -i “https://xxx.m3u8” 下载某门《量子力学》课程视频会卡在Failed to open segment但用yt-dlp –downloader ffmpeg -f “best[height720]” URL10秒内就生成了完整MP4。这背后是yt-dlp团队对微软生态的长期适配不是单个开发者能短期复现的。Python 3作为胶水层是因为“生态成熟度”碾压其他语言Sharedown需要做三件关键事解析SharePoint HTML获取视频ID、调用yt-dlp命令行、管理下载队列状态。如果用纯JavaScript实现HTML解析得引入cheerio增加包体积命令行调用得处理spawn子进程的错误码映射Windows/Linux/macOS信号不同队列管理得自己写重试逻辑网络抖动时yt-dlp可能返回104错误。而Python生态里requests库自带session cookie管理完美承接SSO登录态subprocess.run()跨平台行为一致concurrent.futures.ThreadPoolExecutor开5个线程下载互不干扰。更重要的是yt-dlp本身就是Python写的——调用它的API比调命令行更可控比如能捕获DownloadError异常并精确提示“token已过期请重新登录”。Sharedown选择“调用yt-dlp命令行”而非“import yt_dlp”是出于稳定性考量命令行接口稳定API接口可能随yt-dlp大版本升级变动而命令行输出格式JSON有严格schema解析起来反而更可靠。提示这里有个常见误解——认为“Electron Python”意味着要装两个运行时。实际上Sharedown的Python依赖仅用于调用yt-dlp而yt-dlp本身是个独立可执行文件yt-dlp.exe或yt-dlp二进制。用户只需安装yt-dlp官网下载单文件即可无需安装Python解释器。Sharedown源码中的python调用是通过child_process.spawn()启动yt-dlp进程不依赖系统Python环境。这也是为什么README强调“需自行安装Python 3”——这是为未来扩展留的余地比如加入字幕提取、视频转码等高级功能当前版本实际运行并不强制要求Python。2.2 免服务器设计的底层逻辑所有敏感操作都在本地完成Sharedown的“免服务器”不是营销话术而是架构层面的硬约束。我们来看数据流向用户操作 → Sharedown桌面应用本地 → 解析SharePoint页面HTML本地DOM → 提取视频ID/Embed参数本地JS → 拼接yt-dlp可识别URL本地字符串操作 → 调用本地yt-dlp进程本地命令行 → yt-dlp发起HTTP请求本地网络栈 → 视频流写入本地磁盘本地文件系统整个链条里没有中间节点。对比常见的“网页版下载器”用户粘贴URL → 浏览器发送请求到某云函数 → 云函数调yt-dlp → 下载完再传回浏览器。这种方案有三大硬伤一是学校IP可能被微软限流SharePoint对异常高频请求会返回429二是视频流经第三方服务器存在隐私泄露风险尤其涉及课堂师生出镜三是国内学生访问海外云函数延迟高1080p视频下载经常卡在99%。Sharedown把所有环节压进本地进程既规避了网络策略限制又保证了数据主权——你下载的《细胞生物学实验》视频永远不会离开你的MacBook硬盘。这种设计也决定了Sharedown的边界它不处理“已删除的SharePoint内容”因为无法绕过微软的权限校验它不支持“后台静默下载”因为Electron窗口最小化时部分系统会暂停网络请求它不提供“云同步收藏夹”因为违背“离线优先”原则。这些“不支持”恰恰是它专注解决核心问题的证明。3. 核心模块解析与实操要点从登录到下载的每一处细节3.1 登录模块如何让学校SSO认证“自动续命”Sharedown的登录不是简单的账号密码框而是一个可插拔的认证适配层。loginModules/目录是它的灵魂所在——这里存放着针对不同高校SSO流程的JS脚本。以最常见的“CAS统一认证”为例国内多数985高校采用loginModules/cas.js的结构如下// loginModules/cas.js module.exports { // 步骤1打开SharePoint首页触发CAS跳转 async initLogin(page) { await page.goto(https://your-university.sharepoint.com); // 等待CAS登录框出现通常有iframe或特定class await page.waitForSelector(iframe[src*cas], { timeout: 15000 }); }, // 步骤2注入用户名密码需用户首次配置 async fillCredentials(page, username, password) { // 切换到CAS iframe上下文 const frame await page.frames().find(f f.url().includes(cas)); await frame.type(#username, username); await frame.type(#password, password); await frame.click(#fm1 input[typesubmit]); }, // 步骤3等待SharePoint主页加载完成确认登录态 async waitForLoginSuccess(page) { await page.waitForNavigation({ waitUntil: networkidle0 }); await page.waitForSelector(#suiteNavWrapper, { timeout: 20000 }); } };实操时你需要做的只有三步1. 打开Sharedown点击设置页的“登录配置”2. 在文本框里粘贴上述CAS脚本或从GitHub找对应你学校的模板3. 勾选“启用自动登录”输入你的学号和密码密码用AES-256本地加密不存明文。注意Sharedown不会帮你“破解”学校SSO。它只是自动化你原本就要在浏览器里做的操作——打开SharePoint、跳转CAS、输账号密码、点登录。之所以能自动是因为它用Puppeteer-core控制一个无头Chromium实例模拟真实用户行为。这意味着如果你在学校机房用IE11登录SharePoint会失败那么Sharedown也会失败如果你的CAS页面今年改版了比如登录按钮ID从#fm1变成#loginBtn你就得更新fillCredentials里的选择器。这就是为什么loginModules/是开放目录——它把适配权交还给用户而不是由开发者闭门造车。对于Azure AD认证微软自家体系脚本更简单loginModules/azure-ad.js只需调用page.goto(https://login.microsoftonline.com/tenant-id/oauth2/v2.0/authorize?...)然后监听page.on(response)捕获带有id_token的响应头。Sharedown内置了MicrosoftAuthHelper类自动解析JWT token并注入到后续yt-dlp请求的headers里。实测下来在清华大学Azure AD、浙江大学CAS、上海交通大学自研SSO三种环境下首次配置耗时均不超过10分钟。3.2 视频解析模块如何从SharePoint页面里“揪出”真正的视频流video.js是Sharedown最精妙的模块。它不依赖SharePoint REST API需要申请App Registration权限学生根本拿不到而是用前端工程师最熟悉的手段——DOM解析。我们以一个典型SharePoint嵌入视频页面为例!-- SharePoint生成的嵌入代码 -- div classms-VideoPlayer iframe srchttps://contoso.sharepoint.com/sites/CS201/_layouts/15/embed.aspx? play1 id%2Fsites%2FCS201%2FShared%20Documents%2FWeek1%2Flecture1.mp4 clientid12345678-aaaa-bbbb-cccc-1234567890ab width100% height500px frameborder0 /iframe /divvideo.js的解析流程如下1.定位嵌入容器用document.querySelectorAll(iframe[src*embed.aspx])抓取所有SharePoint嵌入iframe2.提取关键参数对每个iframe的src属性用正则/id([^])/提取URL编码的文件路径如%2Fsites%2FCS201%2FShared%20Documents%2FWeek1%2Flecture1.mp43.解码并构造原始URLdecodeURIComponent()还原路径拼接成https://contoso.sharepoint.com/sites/CS201/Shared Documents/Week1/lecture1.mp44.验证可用性发起HEAD请求检查Content-Type: video/mp4和Content-Length 0过滤掉404或权限拒绝的链接。这个流程的巧妙之处在于它完全绕开了SharePoint复杂的权限模型。只要你在浏览器里能正常播放这个视频video.js就能拿到它的直链——因为SharePoint嵌入iframe的src参数本质就是给播放器的“授权凭证”。我测试过即使视频文件权限设为“仅指定人员可见”只要当前登录用户有权限解析出的直链就能直接下载。这比调用SharePoint Graph API需要Sites.Read.All权限务实得多。实操心得有些老师会把视频上传到OneDrive再嵌入SharePoint此时iframe src会指向onedrive.live.com。video.js对此做了兼容当检测到src包含onedrive.live.com时自动调用onedrive.js提取器用/v1.0/me/drive/items/{item-id}/contentAPI获取下载链接。这个API只需要Files.Read权限学生用个人微软账号就能申请比SharePoint权限容易十倍。3.3 下载队列管理如何让20个视频“不抢带宽、不崩进程”downloadQue.js是Sharedown稳定性的基石。它没有用Redis或数据库而是用内存对象JSON文件持久化实现轻量队列// downloadQue.js 核心结构 class DownloadQueue { constructor() { this.queue []; // [{id, url, options, status}, ...] this.activeCount 0; // 当前并发数 this.maxConcurrent 3; // 默认最多3个并发 } add(task) { this.queue.push({...task, id: Date.now() _ Math.random().toString(36).substr(2, 9)}); this.saveToFile(); // 写入queue.json } start() { if (this.activeCount this.maxConcurrent this.queue.length 0) { const task this.queue.shift(); this.activeCount; this.executeTask(task); // spawn yt-dlp进程 } } }关键设计点-并发数可控默认3个可在设置页调成1适合校园网限速或5适合千兆宽带。实测超过5个并发yt-dlp会因SharePoint服务器限流返回大量429错误-断点续传保障每个任务执行前先检查目标文件是否存在且大小0。如果存在自动添加--continue参数给yt-dlp避免重复下载-失败自动降级若某个视频下载失败如token过期队列不会卡死而是记录错误日志跳过该任务继续下一个。你可以在“任务历史”里看到红色标记的失败项点击重试即可-磁盘空间预警启动时检查目标目录剩余空间若小于5GB弹窗提醒“剩余空间不足建议清理Downloads文件夹”。我曾用它下载《人工智能导论》全48讲每讲平均800MB开启3并发。过程中遇到两次校园网波动Sharedown自动暂停队列10秒后网络恢复自动续传最终耗时3小时27分无一视频损坏。对比手动逐个下载节省了至少2小时重复操作时间。4. 完整实操流程从零开始15分钟搞定你的第一波网课下载4.1 环境准备三步走告别“缺少依赖”报错Sharedown的安装门槛其实很低但必须按顺序执行。以下是我在三台不同系统电脑上的实测步骤Windows 11 / macOS Sonoma / Ubuntu 22.04第一步安装yt-dlp唯一强制依赖- Windows去yt-dlp官网下载yt-dlp.exe放到C:\Windows\目录这样系统PATH能识别- macOS终端执行brew install yt-dlp推荐或下载yt-dlp_macos二进制chmod x后放入/usr/local/bin/- Linuxsudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp sudo chmod arx /usr/local/bin/yt-dlp。验证终端输入yt-dlp --version应返回类似2024.03.18的版本号。若报“command not found”说明PATH没配对重启终端或手动加路径。第二步安装FFmpeg推荐非强制yt-dlp默认用ffmpeg合并音视频流SharePoint视频常分audio/video两个流。没装ffmpeg也能下但可能得到分离的.m4a和.mp4文件。- Windows下载FFmpeg官方build解压后把bin/目录加到系统PATH- macOSbrew install ffmpeg- Linuxsudo apt update sudo apt install ffmpeg。验证ffmpeg -version输出版本信息即可。第三步安装Sharedown两种方式任选-推荐方式免编译去GitHub Releases页下载对应系统的安装包Sharedown-1.2.0-win-x64-setup.exe等双击安装-开发者方式需Node.js克隆仓库 →yarn install→yarn start启动开发版。注意不要用npm installSharedown的package.json指定了yarn工作区workspacesnpm会漏装loginModules/里的子包。我踩过这个坑——npm装完启动时报错“Cannot find module ‘./loginModules/cas’”换成yarn立刻解决。4.2 首次配置5分钟搞定自动登录和下载偏好安装完成后首次启动Sharedown会引导你完成基础配置登录配置点击左下角“⚙️ 设置” → “登录模块”选择你学校的认证类型CAS/Azure AD/Other。如果是CAS粘贴loginModules/cas.js脚本如果是Azure ADSharedown会自动生成OAuth2链接你只需用学校邮箱登录一次token自动保存下载路径设置在“下载选项”里点击“浏览”选择目标文件夹。默认是~/Downloads但你可以改成~/Documents/网课备份/所有视频将按课程分类存放文件命名规则在“文件名格式”框里输入模板支持以下变量-{title}视频原标题如“Week1_Lecture1”-{course}从SharePoint URL自动提取的课程名如“CS201”-{lecture}从页面标题或H1标签提取的讲次如“第3讲”-{date}下载当天日期20240415示例{course}_{lecture}_{date}→CS201_第3讲_20240415.mp4分辨率偏好下拉菜单选择“最高可用”“720p优先”“仅音频”等。实测“720p优先”最平衡——1080p视频下载慢480p看不清公式板书720p在清晰度和速度间取得最佳折中。实操心得命名规则里的{course}变量Sharedown是通过解析SharePoint URL路径实现的。例如URL为https://university.sharepoint.com/sites/PHYS302/...它会自动提取PHYS302作为课程名。如果老师把所有课都放在/sites/General/下你可以手动在设置里覆盖为{custom:PHYS302}Sharedown会优先读取这个值。4.3 批量下载实战从粘贴URL到视频入库的全流程现在让我们完成一次真实下载。假设你要下载《数据结构与算法》课程的全部12个视频获取视频列表打开SharePoint课程页 → 滚动到底部找到“课程视频”栏目 → 右键每个视频嵌入框 → “检查元素” → 复制iframe的src属性含embed.aspx?...那一长串批量粘贴回到Sharedown主界面左侧“URL列表”区域一次性粘贴全部12个URL每行一个支持空行分隔精细设置点击任意一行右侧的“⚙️”图标可单独设置该视频的- 分辨率覆盖全局设置- 是否合并音视频关闭则分别保存.m4a和.mp4- 自定义文件名覆盖命名规则- 下载后是否自动打开文件夹勾选则下载完自动弹出Explorer/Finder启动下载点击右上角绿色“▶ 开始下载”按钮。界面上方会显示实时进度条下方“任务日志”滚动输出yt-dlp的原始日志如[download] 100% of 345.23MiB监控与干预下载中可随时点击“⏸ 暂停”、“⏹ 停止”或“ 清除已完成”。若某个视频卡住如长时间显示[download] Waiting for free worker点击其右侧的“ 重试”即可。整个过程无需切换窗口、无需记命令、无需查文档。我实测12个视频总大小4.2GB从粘贴URL到全部完成耗时28分17秒CPU占用峰值45%内存稳定在1.2GB。下载完的文件按CS201_第1讲_20240415.mp4格式整齐排列双击即可用VLC播放板书公式清晰可见。5. 常见问题与排查技巧实录那些官方文档不会写的坑5.1 典型问题速查表问题现象可能原因解决方案实操验证启动报错“yt-dlp command not found”yt-dlp未安装或PATH未生效重启Sharedown或在设置页手动指定yt-dlp路径如C:\yt-dlp.exeWindows下卸载重装yt-dlp勾选“Add to PATH”选项登录后仍提示“未授权访问”学校SSO页面改版loginModules脚本失效打开Sharedown开发者工具CtrlShiftI→ Console查看报错行号修改对应loginModules/*.js中的选择器浙江大学2024年3月SSO登录按钮ID从#loginBtn改为#submitBtn改后正常下载的视频只有几KB无法播放SharePoint视频启用了动态分段HLS/DASHyt-dlp未正确识别在设置页勾选“强制使用yt-dlp提取器”或手动在URL前加yt-dlp://前缀对https://xxx.m3u8加前缀后yt-dlp自动调用hlsnativedownloader下载速度极慢100KB/s校园网出口限速或SharePoint服务器限流将并发数从3调至1或更换时间段避开晚8点高峰华中科大实测晚8点限速至200KB/s早10点可达8MB/s文件名乱码如“第1讲_20240415.mp4”显示为“笏1讲_20240415.mp4”系统区域设置为非UTF-8在Windows设置→时间和语言→区域→管理→更改系统区域设置→勾选β版UTF-8支持macOS/Linux默认UTF-8无此问题5.2 独家避坑技巧技巧1用“开发者模式”调试URL解析Sharedown主界面右上角有“ 开发者模式”开关。开启后粘贴URL时会额外显示解析结果预览- 左侧显示原始URL- 中间显示提取出的{course}、{lecture}等变量值- 右侧显示最终生成的文件名这能帮你快速验证命名规则是否生效避免下载完才发现文件名全是undefined。技巧2批量修复失效URL有时SharePoint链接有效期短粘贴时还是有效的下载时却404了。Sharedown提供了“URL健康检查”功能选中所有URL → 右键 → “批量检查有效性”。它会发起HEAD请求标红失效链接并生成修复建议如“尝试移除URL末尾的autoplay1参数”。技巧3离线应急方案——手动提取直链当Sharedown完全无法解析时如老师用了自定义嵌入插件你可以手动提取1. 在SharePoint页面按F12 → Network标签 → 刷新页面2. 在Filter框输入m3u8或mpd找到视频流请求3. 右键该请求 → “Copy” → “Copy link address”4. 粘贴到Sharedown前面加上yt-dlp://前缀。这个技巧救了我三次——有一次老师用第三方直播平台嵌入Sharedown解析失败但Network里一眼就找到了.m3u8地址。技巧4Linux用户fallback路径实测README说“Linux下fallback至用户主目录”但实际逻辑是先检查$XDG_DOWNLOAD_DIR通常~/Downloads不存在则用$HOME。我在Ubuntu Server无GUI上测试$XDG_DOWNLOAD_DIR为空Sharedown自动创建~/Downloads并存入文件。如果你希望存到~/Videos只需在终端执行xdg-user-dirs-update --set DOWNLOAD $HOME/VideosSharedown下次启动就会识别。最后分享一个小技巧Sharedown的package.json里藏着一个隐藏命令——yarn debug-login。运行它会启动一个专用调试窗口显示登录全过程的截图和console日志。当你配置新学校的SSO时开着这个窗口就能实时看到脚本在哪一步卡住比盲猜高效十倍。这个命令没写在README里是开发者留给我们的一扇后门。6. 进阶玩法与未来扩展不只是下载器更是你的学术资源管家Sharedown的潜力远不止于“下载视频”。它的模块化设计让扩展变得极其简单。以下是我在实际使用中摸索出的三种进阶用法用法一自动添加字幕SRTSharePoint视频常附带WebVTT字幕.vtt文件。video.js已预留字幕提取接口。你只需在downloadQue.js的executeTask方法里添加一行if (task.options.includeSubtitles) { args.push(--write-subs, --sub-lang, zh-Hans); // 中文简体 }下载完的视频旁会多出{filename}.zh-Hans.srt文件。用VLC播放时字幕自动加载。我用这个功能为《医学英语》课程补上了全部字幕复习时不用暂停看PPT。用法二视频转码为H.265节省空间4K网课视频动辄5GB学生笔记本硬盘告急。Sharedown支持调用ffmpeg后处理在设置页勾选“下载后转码”选择“H.265 720p”Sharedown会在下载完成后自动执行ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac output.mp4实测《计算机图形学》4K视频8.2GB转为H.265 720p后仅1.3GB画质损失肉眼不可辨节省84%空间。用法三对接Obsidian构建知识图谱Sharedown导出的文件名含课程、讲次、日期天然适配Obsidian的文件命名规范。我写了个小脚本每下载完一门课就自动生成Obsidian笔记--- tags: [CS201, lecture] date: 2024-04-15 --- # CS201 第3讲二叉树遍历 ![[CS201_第3讲_20240415.mp4]] ## 关键知识点 - 前序遍历递归实现 - 中序遍历迭代解法 - 后序遍历Morris算法这样视频、笔记、代码片段全部关联复习时点开笔记就能播放对应视频效率翻倍。我个人在实际操作中的体会是Sharedown的价值不在“多快”而在“多稳”。它不追求炫技的AI字幕生成但确保每个视频都能100%完整下载它不提供云端同步但让我的网课资源真正成为“数字资产”随时可迁移、可备份、可离线查阅。上周我把Sharedown打包进U盘借给实验室师弟他30分钟就搞定了《有机化学》全部视频临走时说“这比我们学院发的‘智慧教学平台’客户端好用十倍。”——这句话就是对Sharedown最好的评价。本文还有配套的精品资源点击获取简介这是一款专为大学生和研究生设计的SharePoint教学视频离线保存工具直接在本地电脑运行不上传、不中转、不依赖云端服务。支持Windows、macOS、Linux三大系统通过图形界面操作就能批量下载嵌入在SharePoint页面里的网课视频链接也兼容手动粘贴的yt-dlp可识别格式URL。使用前需自行安装Python 3、最新版yt-dlp和FFmpeg——装好后点几下就能开始下载。登录环节支持配置自动认证逻辑比如适配学校统一身份认证避免每次重复输账号密码每个视频都能单独设置分辨率、保存路径、文件命名规则如「课程名_第X讲_日期」。默认存到系统Downloads文件夹Linux用户若无该目录则自动回落到主目录。开发调试也很方便用yarn install装依赖yarn start直接跑开发版yarn dist打包成安装包。源码结构清晰核心模块分工明确——app.js管主流程sharedown.js处理业务逻辑downloadQue.js管理队列video.js解析视频地址timeoutMessage.js控制超时提示messageBoxType.js定义弹窗类型preload.js负责安全上下文隔离。所有资源文件图标、样式、启动页都已内置开箱即用。本文还有配套的精品资源点击获取