简介百度网盘直接下载助手是一款用户脚本主要面向经常使用百度网盘且希望摆脱官方客户端与非会员限速困扰的用户。它基于JavaScript编写需配合Tampermonkey等用户脚本管理器运行能够在打开网盘页面时解析文件真实直链并触发浏览器直接下载有效规避网页端速度限制与客户端安装要求。压缩包仅含1个js文件整体约15KB轻量简洁解压后导入脚本管理器即可使用。目前该资源已有10512人学习/下载适合有一定浏览器扩展操作经验、熟悉基础网页交互的用户。通过该脚本可快速获取文件直链支持批量文件或大文件的下载场景减少等待时间同时需留意脚本权限与来源避免泄露登录信息并知晓使用直链下载可能违反平台服务条款建议在合规前提下合理使用。其核心价值在于将百度网盘繁琐的下载流程简化为一步直达兼顾效率与可操作性。1. 百度网盘直接下载助手是什么一个 user.js 如何让浏览器自己拿到直链很多人第一次接触“百度网盘直接下载助手”都是同一个场景朋友甩来一个pan.baidu.com链接文件不大但却是压缩包分卷网页端“下载”按钮点下去客户端要装、要登录、要限速浏览器直接下载又只有几百 KB 的龟速。这时候你可能会去搜“百度网盘直链”“直链解析”然后搜到一个叫“网盘直链下载助手”的.user.js脚本。这个脚本不是一个软件也不是破解工具它是一个运行在浏览器用户脚本管理器里的脚本作用是把百度网盘网页端原本隐藏的“真实下载地址”找出来然后交给你常用的下载器去拉文件。这个标题背后的技术点其实很朴素百度网盘网页端本身就有下载能力只是在网页交互里被藏了起来。user.js做的事情是解析页面上的文件信息、调用网盘自己的接口去换一个短效下载链接。这篇文章会从接口原理讲到脚本怎么写、参数怎么调、踩了哪些坑最后给你一个通用的直链验证思路。适合两类人一类是只想把脚本用明白、下载时不翻车的普通用户另一类是打算自己维护脚本、适配其他网盘的开发者。2. 直链是怎么来的看懂百度网盘的签名接口这一步不能跳2.1 直链不是“加密链接”是服务端按凭证签发的一段短效下载地址很多人以为“直链”是从某个数据库里抠出来的隐藏链接其实不是。百度网盘网页端在你知道文件 ID 和所属目录的前提下会向服务端请求一个下载地址。服务端校验你的登录态、文件权限、请求参数然后返回一段带签名、带时间戳、带 IP 绑定的 URL。这个 URL 在一段时间内有效过期就得重新请求。这段 URL 通常长这样https://d.pcs.baidu.com/file/...?fid...sign...token...time...关键字是d.pcs.baidu.com这个域名。你或许还见过pcs.baidu.com开头的老式直链那是旧接口的产物现在大多数文件都走d.pcs.baidu.com。能看到这个域名说明你的请求确实打到了百度的内容分发服务上而不是某个第三方代理服务器。2.2 一个典型的百度网盘 API 请求里有哪些参数这里仅讨论网页端的通用流程不涉及任何逆向或者加密破解。当你打开百度网盘分享链接或者自己的网盘目录时页面会通过一个内部接口拿到文件列表。文件列表里有每个文件的fs_id、path、md5、size等字段。下载的时候脚本会带上这些字段去请求另一个接口换取下载地址。请求里常见的参数如下参数名来源作用fs_id文件列表接口文件在网盘里的唯一 ID直链签名的核心参数path文件列表接口文件在网盘里的完整路径签名时会校验sign页面动态生成请求签名由百度前端生成通常和BDUSS等 Cookie 有关timestamp页面动态生成请求时间戳防止重放vip页面动态生成标识是否为超级会员会影响到返回的下载速度和通道channel常量客户端标识网页端有自己的 channel 值web常量标识来源为网页端这些参数里sign、timestamp、vip每次打开页面都不一样。手动在浏览器地址栏里粘贴旧直链大概率失败就是因为time过期、sign校验不过。所以任何“通用解析网站”本质上都是在帮你走一遍这个流程只不过它们把fs_id换成网盘分享链接里的surl或uk来定位文件。2.3 为什么别人的直链脚本会失效签名逻辑在变脚本也要跟着变网盘直链下载助手这类脚本最大的特点是生命周期短。你可能上个月用得好好的脚本下个月突然点了没反应控制台报 403 或者sign error。这不是你的浏览器坏了而是百度前端换了一套签名算法可能是 Cookie 里多了一个字段可能是sign的生成方法变了也可能是请求头要求带上User-Agent匹配特定浏览器版本。自己维护脚本的人通常不会去逆向整个前端 JS而是直接看接口返回的错误码。常见错误码里-9代表签名错误31045代表文件不存在或无权访问-6代表登录态失效。我一般会先用浏览器的开发者工具打开“网络”面板手动在网盘里点击下载一个小文件观察浏览器自己发出的请求长什么样再比对手里脚本构造的请求缺了什么。这个方法不玄学是最可靠的排查步骤。3. 写一个最小可用的百度网盘直链提取 user.js从解析到弹出下载3.1 环境准备一个用户脚本管理器就够了这一步不需要安装任何额外软件。最常见的做法是安装一个用户脚本管理器扩展然后把.user.js文件丢进去。如果你不想装管理器也可以把脚本粘贴到浏览器控制台里临时执行但刷新页面就没了。我一般建议用脚本管理器因为可以统一管理脚本更新和启停。创建的脚本头部需要一段元数据注释里面声明脚本名称、匹配哪些网址、在什么时机执行。下面是最小可用的开头// UserScript // name 百度网盘直链提取助手 // namespace local.example // version 0.1.0 // description 在百度网盘页面注入下载直链提取按钮 // match *://pan.baidu.com/* // grant GM_xmlhttpRequest // connect d.pcs.baidu.com // connect pcs.baidu.com // run-at document-idle // /UserScriptmatch决定了脚本只在百度网盘的页面生效grant和connect让脚本可以跨域请求百度自己的下载域名。这里故意不写任何第三方网站因为直链请求是发给百度自己的服务器不需要也不应该经过中转。run-at document-idle表示在页面加载完成后执行防止 DOM 还没渲染完就去找按钮。3.2 核心代码解析文件 ID 并请求 API 拿到直链写脚本的第一步是找到文件 ID。网盘页面在前端运行时会把文件列表数据挂在一个全局变量上常见的做法是去window上找类似window.yunData或者页面上>function getCurrentFile() { // 优先取表格里选中那一行的 fs_id const selected document.querySelector(.file-row.selected, .file-item.selected); if (selected) { return { fs_id: selected.getAttribute(data-fs_id), path: selected.getAttribute(data-path), name: selected.getAttribute(data-title) || selected.textContent.trim() }; } // 如果没选中任何文件就取当前目录列表第一个文件 const firstFile document.querySelector([data-fs_id]); if (firstFile) { return { fs_id: firstFile.getAttribute(data-fs_id), path: firstFile.getAttribute(data-path), name: firstFile.getAttribute(data-title) }; } return null; }这段代码不去猜测内部 API 的变量名而是直接读 DOM 属性。我在实际使用中发现网盘界面上每个文件行都会带>async function getDirectLink(fileInfo) { const url /api/download; const params new URLSearchParams({ fs_id: fileInfo.fs_id, path: fileInfo.path, // 签名和 timestamp 从页面现有请求里拿 // 如果拿不到就交给 cookie 里的 BDUSS 来换取 }); const resp await fetch(url, { method: POST, headers: { Content-Type: application/x-www-form-urlencoded, Referer: location.origin location.pathname }, body: params.toString(), credentials: include }); const json await resp.json(); if (json.errno 0 json.dlink) { return json.dlink; } throw new Error(接口返回错误码 json.errno); }这段是简化的示意版本。实际接口路径和请求参数每个时期不一样这个不重要重要的是几个关键点请求要带credentials: include让 Cookie 自动带上因为直链签发依赖登录态请求头里的Referer要设置成当前网盘页面的地址否则服务端可能拒绝返回数据里的dlink字段通常就是最终可用的下载链接。有人把这一步理解成“直链解析”本质上就是浏览器代替你点击了那个下载按钮然后拦截了网络请求里的跳转地址。3.3 把直链交给系统下载器调用浏览器下载和复制到剪贴板拿到dlink之后有两个去向直接把链接交给浏览器下载或者复制到剪贴板交给迅雷、IDM 这类工具。交给浏览器下载最简单用window.open(dlink, _blank)或者创建一个隐藏的a标签模拟点击复制到剪贴板则需要用到navigator.clipboard.writeText()但这个 API 在某些浏览器里要求 HTTPS 环境且需要用户授权。function downloadDirect(dlink, fileName) { // 优先复制到剪贴板方便交给外部下载器 if (navigator.clipboard navigator.clipboard.writeText) { navigator.clipboard.writeText(dlink).then(() { alert(直链已复制粘贴到下载器即可); }); } else { // 兼容方案用隐藏的 iframe 触发下载 const a document.createElement(a); a.href dlink; a.download fileName || download; document.body.appendChild(a); a.click(); a.remove(); } }这里选择“复制到剪贴板”作为首选方案是有原因的。百度网盘的直链通常带有鉴权参数而且链接有时间限制对于超大文件直接放进浏览器下载会占用浏览器进程且看不到进度。先复制出去用户自己决定什么时候开始下载这才是网盘直链下载助手最常见的真实用法。把a.download加上文件名是为了照顾一些浏览器在跨域下载时强制打开预览窗口的问题算是一个实用小技巧。4. 避坑指南百度网盘直链提取的常见问题和排查路径4.1 现象一装了脚本但页面没有任何变化用户脚本管理器显示脚本已启用但百度网盘页面上下载按钮旁边没有出现“提取直链”的入口。最常见的原因是页面 URL 不匹配。百度网盘有/disk/home、/s/1xxx分享链接、/share/init等多种路径而脚本的match只写了*://pan.baidu.com/*按理说应该全部覆盖但如果百度把页面迁移到了*.baidu.com下的其他子域脚本就会失效。解决方法是打开浏览器控制台查看脚本是否报错。报GM_xmlhttpRequest is not defined说明脚本管理器的权限配置不对报Cannot read properties of undefined则说明页面没有挂载预期的全局数据也可能是页面还在加载中就执行了脚本。后者的处理是在脚本头部加run-at document-idle或者在代码里用setTimeout延迟 500 毫秒再执行。4.2 现象二接口返回 403 或者需要登录直链接口返回 403 通常有三个原因Cookie 里的BDUSS过期、请求的签名失效、或者百度风控把当前 IP 判定为高风险。对于第一种情况最简单的方法是打开百度网盘页面手动刷新一次确保登录态是新的然后重新点击提取直链。对于第二种情况你需要确认脚本里构造请求时是否使用了页面当前最新的签名。这里有一条血泪经验不要尝试在本地写死一个签名然后反复用直链接口的签名有效期极短你是无法“提前准备好一批”的。正确做法是让脚本在点击按钮的瞬间去页面里取最新的签名参数。如果你发现脚本在取签名的地方写了固定值那这个脚本失效是必然的不值得去修。4.3 现象三拿到的直链一会儿就失效这里涉及直链的 TTL生存时间概念。百度网盘签发的直链通常有效期为 4 小时左右但这 4 小时不是从你复制那一刻开始算的而是从服务端签发时开始算。如果你在请求接口后把链接放在一边过了半小时才去下载可能已经过期。另一个容易忽略的点是直链绑定 IP。你用自己的 Cookie 换到的直链换一个网络环境比如从手机热点切回宽带再访问会直接 403。解决思路是复制直链后立刻开始下载不要过夜。如果需要长时间保存文件更可靠的做法是把这个文件转存到自己的网盘再用脚本去下载原文件。转存后文件的fs_id会变化但path通常保持不变重新执行一次提取即可。4.4 现象四下载速度还是几十 KB/s很多用户下载直链后发现速度还是上不去于是怀疑脚本是不是假的。这里要澄清一个事实直链解决的只是“让浏览器拿到真实地址”这一步并不保证你是超级会员速度。直链的下载速度取决于服务端对你账号等级的判断。非会员账号拿到的直链通常被限制在一百到两百 KB/s 左右即使在下载器里开多线程也突破不了因为这个限速在服务端。如果你是大文件下载场景我一般建议先去下载一个几百 KB 的小文件测试。如果小文件能跑到带宽上限说明直链本身没问题慢是因为文件较大时网盘服务端针对大文件做了额外的限速或分块策略。这时候不要反复点击提取只会让账号触发风控。4.5 现象五账号被安全验证盯上了短时间内频繁提取直链、频繁请求下载接口会让百度把当前 Cookie 判定为异常登录。具体表现是网页端弹出滑块验证或者短信验证甚至在别的设备上也被强制登出。这通常不是脚本有病毒而是你的操作频率太激进。解决方法是限制脚本的调用频率至少每隔 10 秒才能点击一次提取按钮并且同时只对一个文件提取直链不要批量把整个目录几十个文件都提取一遍。顺带说一句这种安全验证和网盘会员与否没有关系我见过超级会员账号因为频繁请求接口同样被要求二次验证。因此脚本里最好加一个简单的节流逻辑距上次提取不到 10 秒时直接弹提示不给用户浪费账号安全分的机会。5. 直链方案扩展夸克网盘和蓝奏云的解析差异对比5.1 不同网盘的直链差异不能在同一个脚本里硬写很多人以为“网盘直链下载助手”只服务百度一家其实同类脚本往往还带了夸克网盘和蓝奏云的入口。这三个网盘的直链获取逻辑差异很大不能把百度的方法套到夸克上。夸克网盘网页端同样会签发一个临时 URL但它的下载域名走的是drive.uc.cn或pcs.uc.cn而且请求头要带一个自定义的Cookie和Authorization字段。蓝奏云更特殊它的网页端大多直接用m3u8或普通文件地址没有复杂的签名流程直链提取往往就是拼一段固定的域名加上文件 ID。如果需要适配夸克你需要在脚本里额外申请夸克域名的跨域权限同时把match加上*://drive.uc.cn/*。这里最麻烦的是夸克网页端会校验Sec-Fetch-Dest等请求头用fetch发起的请求很容易被拦截得改用脚本管理器提供的GM_xmlhttpRequest并手动补全请求头才能绕过。// 夸克网盘的直链接口请求头示例 GM_xmlhttpRequest({ method: GET, url: https://drive.uc.cn/..., headers: { Referer: https://drive.uc.cn/, Authorization: localStorage.getItem(uc_token) || , }, onload: function(res) { const json JSON.parse(res.responseText); console.log(夸克直链, json.url || json.download_url); } });5.2 参数对照表百度、夸克、蓝奏三者的关键字段项目百度网盘夸克网盘蓝奏云下载域名d.pcs.baidu.comdrive.uc.cn/pcs.uc.cn*.lanzoui.com/*.lanzouo.com核心参数fs_idpathfile_idshare_token读取文件页面的 ID登录方式Cookie 中的BDUSSCookie Authorization无需登录或弱登录签名机制signtime接口参数自带 token无复杂签名限速策略依赖账号等级依赖账号等级不显著限速看到这张表就会明白这三者的实现根本无法抽成一个通用的“直链提取函数”只适合各自写一个适配器。夸克对请求头的要求最苛刻蓝奏云最宽松百度夹在中间。在用户脚本里做多网盘支持与其强行抽象不如每个网盘独立一段代码最后在同一层弹窗里统一展示结果。5.3 如何让脚本适配多个网盘用消息流把提取逻辑拆开我实践中比较顺手的做法是脚本监听页面上自己注入的“提取直链”按钮点击事件发生后根据当前域名确定走哪套逻辑。百度走 bdGetLink夸克走 ucGetLink蓝奏云走 lanzouGetLink三者互不干扰。每套逻辑返回一个《网盘类型 直链地址 文件名》的结构由统一函数负责展示到悬浮窗上。这种做法的好处是某一家网盘改了接口你只需要修那一段函数不会影响其他网盘。考虑到这类脚本维护频率高拆分比什么都重要。一个大型.user.js文件里如果所有逻辑揉在一起后期每次更新都会伴随大量回归测试而拆开之后你只需要确认“改的这一段会不会影响其他函数调用”。这算不上高级架构但对个人维护者来说是实实在在的省力。6. 验证直链质量的一种实用手法用 HTTP Range 检查连接可靠性的不传之秘拿到直链之后怎么确认它是可以下载的直接点击开始下载当然可以但如果是一个几 GB 的文件下载到一半失败才知道就太亏了。我习惯的做法是先用命令行工具去请求这个直链的 HTTP 响应头观察它是否支持 Range断点续传以及服务器返回的 Content-Length 是否和网盘页面里显示的文件大小一致。curl -I -L --max-time 20 你的直链地址-I只取响应头-L跟随跳转--max-time 20是最大等待 20 秒。如果返回头里有Accept-Ranges: bytes说明这个直链支持断点续传如果Content-Length和网盘页面显示的大小不一致那说明直链绑定错了文件或者已经失效。这个方法对任何网盘直链都适用不局限于百度。另一个更深入的验证是实际下载前 1MB 来测速curl -r 0-1048575 -o test.bin 直链下载 1MB 后立刻中断。根据总耗时就能估算出这个直链在当前网络环境下的实际速度而不需要真的把整个文件拉下来。我遇到“复制了直链但不放心”的场景就会这么做省时且不占用带宽。这套验证思路也治好了我一个老毛病以前拿到直链就想冲结果文件下载到一半就失败回来还要怪脚本。后来我提取完直链都会顺手看一眼响应头确认无误再动手这个习惯让我下载大文件的成功率提高了不少。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?