
简介百度网盘直链下载助手是一款浏览器用户脚本专门面向经常使用百度网盘分享文件、但不想安装官方客户端的普通用户与下载爱好者。脚本基于 JavaScript 编写需要配合 Tampermonkey 或 Greasemonkey 这类用户脚本管理器运行通过解析网盘页面中的请求链接来获取文件的真实下载地址从而避开非会员的限速策略在浏览器内直接完成下载。压缩包内仅包含 1 个 js 文件整体大小约 15KB安装过程轻量简洁几乎不占用额外空间。目前已有 10502 人学习下载在同类直链工具中热度较高。通过该脚本用户既能直接获得可用的直链下载功能也能从中学习 .user.js 脚本的开发思路包括页面元素抓取、HTTP 请求模拟、下载地址解密与常见反爬处理方式适合对前端脚本开发或下载工具原理感兴趣的读者参考。需要留意的是此类脚本可能涉及账号授权和服务条款限制建议从可信渠道获取并谨慎使用以保障账号安全与数据隐私。1. 为什么百度网盘的直接下载总是不直接先认识 user.js 和直链百度网盘直接下载助手这个名字本质上是一个以 .user.js 结尾的油猴脚本。装好之后在百度网盘的网页文件列表里选中任意文件它会向服务端要一条时效性的直链dlink再把这条链接直接交给你或下载器绕开客户端那一套限速和排队逻辑。我第一次用这个方案是要批量拉一台测试机上的几十 GB 素材客户端不仅慢还频繁中断网页版又只能一个个存最后靠着直链脚本把整个目录一次性拽了回来。这篇只讲一件事这个 user.js 方案怎么落地、参数怎么设、坑在哪里。适合长期跟百度网盘打交道、被下载速度折磨过的从业者照着做一遍。2. 拆开直链看结构sign、UA 和时效性才是核心2.1 分享链接、页面链接、直链的差别很多人把分享链接当成下载链接这是第一个误区。分享链接形如https://pan.baidu.com/s/1xxxx它只是一个资源索引页服务端拿到后还要再走一次鉴权和跳转。页面链接则是你登录网盘后看到的https://pan.baidu.com/disk/main这类工作台地址负责渲染文件列表。而直链是服务端在你登录并授权后下发的真实下载地址通常指向d.pcs.baidu.com之类的对象存储节点带有签名参数。三种链接最大的区别在于分享链接和页面链接是给人看的直链是给下载工具用的。直链里塞了足够让服务器信任你的鉴权信息所以拿到直链后你可以在任意支持 HTTP 的下载器里跑满带宽不需要再经过网页端那层 JavaScript 逻辑。链接类型典型形态能否直接下载时效分享链接pan.baidu.com/s/xxx不能需跳转鉴权长期页面链接pan.baidu.com/disk/main不能仅渲染界面登录态期间直链d.pcs.baidu.com/file/xxx?...sign...能直接发起 GET短通常几分钟到几小时这就是为什么标题里直接下载助手的核心动作不是破解而是把页面里的文件请求转成直链请求。理解这个区别后后面所有脚本逻辑都顺理成章。2.2 直链 URL 的典型字段含义一条百度网盘直链大致长这样不同版本和接口返回会有差异但结构万变不离其宗https://d.pcs.baidu.com/file/8a1f2c9e4d5b6a7f8c9d0e1f2a3b4c5d ?fid123456789012345 dstime1718100000 signMDACxzXpQvRkjYz4567 ua1 expires7200关键字段逐个拆fid是文件在服务器上的唯一 ID脚本要靠文件列表接口拿到它dstime是签发时间戳expires是有效秒数两者加一起就是链接的死亡时刻sign是服务端用你的账号状态、文件路径、时间戳一起算出来的签名一个字节不对整个链接就 403ua是下载客户端类型标记这个参数直接决定服务器认不认你这个请求。我一般会把一条直链当成三个部分的组合文件定位fid 路径、时间窗口dstime expires、身份证明sign 登录态。下载助手这个 user.js 脚本干的活就是替你把这个三元组凑齐。缺任何一块你从网页请求里抠出来的裸地址都没法用。2.3 为什么说UA 伪装是直链下载的命门新手最容易翻车的地方是 UA。百度网盘服务端对下载请求的 UA 有强校验不同 UA 命中不同的限速策略和返回格式。最常见的坑是用 curl 或下载器去拉直链时默认 UA 是curl/8.x或aria2/1.37.0服务器直接返回 403只有把 UA 设为浏览器或特定客户端值请求才被受理。常见做法是在下载器里固定一个浏览器 UA例如Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36这个值不是玄学而是脚本提取直链时服务端记录下来的请求上下文。服务器把一个直链签名绑定到了当时的 UA 上你后续下载时 UA 不一致签名校验直接失败。所以正确顺序是先用带正确 UA 的请求去要直链再用同一个 UA 去下载。換UA、換设备、換IP 都可能导致签名失效。2.4 下载助手脚本内部在做什么从实现上讲这个脚本的核心逻辑不超过四步登录态里拿到文件列表 → 解析出每个文件的fs_id和路径 → 调一次网盘的下载接口换取dlink字段 → 把返回的直链写到按钮上供你点击或用复制功能导出。下面这段是示意代码还原了核心动作// 模拟助手脚本的直链提取逻辑 const filePath /dataset/model_v2.zip; const fsId listData[filePath]; // 从文件列表接口拿到的 fs_id const params new URLSearchParams({ target: [${filePath}], dlink: 1, // 请求 dlink 直链 web: 1, fsid: fsId, type: dlink, }); fetch(/api/download?${params.toString()}, { method: GET, credentials: include, // 带上登录 Cookie headers: { Accept: application/json }, }) .then((res) res.json()) .then((json) { // 接口返回的 dlink 是个 JSON 字符串需二次解析 const dlink JSON.parse(json.dlink).dlink; console.log(dlink); // 复制这条地址给下载器 });逻辑说明target是文件的完整路径必须放在数组格式的字符串里dlink1告诉服务端你要的是直链而不是普通下载响应credentials: include是必须的脚本之所以要在浏览器里运行就是因为它需要借用你当前的登录 Cookie 才能通过鉴权。参数说明fsid是文件唯一 ID不传或传错会直接报错web: 1表示当前是网页端场景部分接口会校验这个字段并返回不同格式的结果。当你看到脚本在文件右键菜单里多出一个复制直链之类的选项背后就是这个请求完成了并拿到了可用的dlink。3. 从安装到跑通Tampermonkey 助手脚本 aria2 的一条龙3.1 装好 Tampermonkey版本选型和管理权限直链助手作为用户脚本需要先有一个能运行它的宿主。目前所有主流浏览器里Tampermonkey 是兼容性最稳妥的而且它的脚本管理面板能让你清楚看到这个 user.js 的注入时机和权限。装的时候我建议直接装扩展商店里的最新稳定版不要用开发者预览版。装完点开扩展图标确认能看到管理面板界面就说明环境没问题。这一步不需要改任何配置但有一个细节值得注意如果浏览器开了严格模式或企业策略限制扩展安装Tampermonkey 会装好但无法注入脚本。此时的典型特征是脚本列表是空的刷新网盘页面后没有任何变化。遇到这种环境我会从浏览器任务管理器确认扩展进程在跑或者直接换 Firefox 的扩展商店装。3.2 导入 user.js 脚本把元数据块改成自己需要的权限拿到百度网盘直接下载助手.user.js后在 Tampermonkey 面板里点添加新脚本把文件内容整个粘进去ctrl s 保存。脚本头部那段UserScript元数据块决定了它能在哪些页面运行我一般会按需改成下面这组// UserScript // name 百度网盘直链助手自定义 // namespace local.pan.direct // version 0.2.0 // description 在网盘页面提取直链并复制 // match https://pan.baidu.com/disk/main* // match https://pan.baidu.com/s/* // grant GM_xmlhttpRequest // grant GM_setClipboard // run-at document-end // /UserScript逻辑说明match控制脚本注入哪些 URLhttps://pan.baidu.com/disk/main*是网盘工作台https://pan.baidu.com/s/*是分享页。如果你只在自己网盘里用保留前者就够如果你经常打开别人分享的链接再把后者加上。grant GM_setClipboard是给你的复制直链按钮权限用的不声明这条脚本里调用剪贴板会因权限不足被浏览器拦掉。参数说明run-at document-end等页面 DOM 渲染完再执行不要用document-start否则文件列表还没生成脚本拿不到fs_id。保存后去 Tampermonkey 面板确认脚本开关是开启状态。有一个我在重装时踩过的坑旧脚本和新脚本同名面板里保留了两份网盘页面会同时注入两次按钮出现但点击后拿到的是旧逻辑的报错。遇到这种情况把旧版删掉只留一个。3.3 在网盘页面里提取第一条直链打开https://pan.baidu.com/disk/main进入一个至少有一个文件的目录。刷新后脚本会在文件行的右键菜单或操作栏里追加入口。点击提取后稍等一两秒直链会出现在弹窗里或者直接被复制到剪贴板。第一次跑通后建议先用小文件验证不要一上来就提取几十 GB 的大文件这样能把问题提前暴露出来。验证方法是把复制到的直链粘到浏览器地址栏里打开如果直接弹出下载或浏览器内置下载器开始跑说明直链是有效的。如果地址栏打开显示 JSON 错误或 403先回头检查 UA再看登录状态有没有过期。浏览器里能下载说明链路是通的后面交给 aria2 只是把 UA 和参数带对的问题。3.4 用 aria2 把直链参数吃干净直链拿到手配合 aria2 是最常见的下载方式。aria2 的多线程分段能力能把单条直链的速度拉满。下面是我常用的命令模板aria2c \ -c \ -x 8 \ -s 8 \ -k 1M \ -d /mnt/data/pan \ -o model_v2.zip \ --user-agentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36 \ https://d.pcs.baidu.com/file/8a1f2c9e4d5b6a7f8c9d0e1f2a3b4c5d?fid...sign...逻辑说明-c是断点续传直链下载中途断了可以接着跑-x 8表示对同一主机的最大连接数-s 8是拆分几个分段并行下载-k 1M是每个分片最小 1MB。这四个参数组合是性价比最高的配置连接数再往上加百度网盘那边也不一定买账反而容易触发限速。参数说明--user-agent必须和提取直链时用的 UA 严格一致多一个空格都不行-d和-o决定文件落盘位置和重新命名。如果一个分片反复超时把-x降到 4 再试服务器对并发连接数的忍耐度往往比你想象的低。4. 直链下载避坑403、失效、断流的排查清单4.1 提取成功但下载时 403现象脚本成功返回了 dlink复制到下载器里却收到 HTTP 403。原因九成是 UA 没对齐提取直链时用的浏览器 UA和下载器里设置的 UA 不是同一个值。解决方法是严格拷贝浏览器当前 UA 字符串放到 aria2 的--user-agent参数里或者用下载工具里从浏览器获取的选项。如果是换了设备下载比如在电脑上提取直链、拿手机下载签名已经绑定原设备的请求上下文直接失效必须在新设备上重新提取。4.2 直链几分钟后就无法访问现象刚生成的链接当时能下载过一会儿返回AccessDenied或 404。原因在于expires参数控制的时间窗过了。网页端直链的时效通常很短半小时到两小时不等不是脚本能改的这是服务端的主动行为。解决方法是把提取和下载放在同一次操作里完成不要批量提取一堆链接留着慢慢用。我一般是这样处理的先建好下载任务清单再回到网盘页面逐条提取、逐条投入 aria2让每个链接的生成时间和消耗时间尽量靠近。不要隔夜再跑。4.3 大文件下载中途断掉现象下载到 60% 左右连接断开重试后从 0 开始。原因多半是直链时效在下载过程中到了或者是服务端的单连接字节数限制被触发。解决方法是先用-c开启断点续传并把连接数控制在 4 到 8 之间如果依然在中途断掉检查是不是文件超过 4GB部分脚本对超大文件生成的直链不稳定你需要回到网盘里把文件压缩分包或者用客户端先转存到自己的网盘再提取。我遇到 20GB 以上的文件习惯先查清楚是单个文件还是目录打包后者更容易偶发掉线。4.4 脚本装了但页面没有任何变化现象Tampermonkey 面板里脚本显示已开启打开网盘页面却找不到提取入口。原因有三个方向脚本的match没覆盖当前 URL、浏览器扩展权限被限制注入、页面上有其他脚本冲突。解决方法是先在控制台里看 Tampermonkey 有没有报注入失败的信息再用隐身模式只开这一个扩展测试最后把match改宽到https://pan.baidu.com/*再刷新。如果改了能出来按钮就是匹配规则问题。我还是那句话只保留一个脚本别同时装两个同类助手它们在页面里互相抢 DOM 事件会出现按钮被覆盖或点击无响应的翻车现象。4.5 速度还是被限制在几十 KB/s现象直链能下但速度稳定在低速和客户端差不多。原因一个是签名里的用户态问题另一个是下载并发太低。先说前提直链本身不等于无限速它对所有用户都有基准带宽只是比客户端网页端的限速宽松得多。解决方法是把 aria2 的-x和-s同步提到 16同时用-k 4M增大分段大小降低小分片频繁切换的 IO 开销。如果还是低速换个时间段重新提取直链晚高峰时带宽节点压力大同样的文件直链速度能差出三倍以上这属于网络环境问题不是脚本能解决的。5. 把直链提取做成半自动流程控制台拼 URL 和批量导出清单到了这个阶段你已经能在网页上手动提取直链了。最后一个技巧是把这套动作从点按钮变成跑脚本。打开网盘页面的开发者工具在控制台里手动执行一次下载请求观察返回的dlink结构。你会发现它几乎总是被一层 JSON 包着脚本在内部做了JSON.parse才拿到真正的地址。顺着这个思路你可以自己写一小段控制台代码直接输入文件路径列表批量输出直链清单喂给下载器排队跑。这样做的好处是避免在大目录里挨个点击提取也能一次性核对哪些文件提取失败。核心代码只有十几行(async () { const targets [/data/part1.zip, /data/part2.zip]; const list await fetch(/api/list, { credentials: include }).then(r r.json()); const fileMap {}; for (const item of list.list) fileMap[item.server_filename] item.fs_id; const ok [], fail []; for (const name of targets) { const fsid fileMap[name]; const url /api/download?target${encodeURIComponent(JSON.stringify([/data/ name]))}fsid${fsid}dlink1; try { const res await fetch(url, { credentials: include }).then(r r.json()); ok.push(JSON.parse(res.dlink).dlink); } catch (e) { fail.push(name); } } console.log(JSON.stringify({ ok, fail }, null, 2)); })();逻辑说明先从文件列表接口把当前目录的文件名映射到fs_id避免手拼路径时找不到文件然后遍历目标文件名逐个请求直链成功和失败的分开记录。参数说明target参数必须是一个 JSON 数组字符串路径要和网盘里的绝对路径严格一致大小写都不能错dlink1保留这就是告诉服务端我要直链。把打印出的ok数组复制出来每一行就是一条有效直链交给 aria2 多文件模式批量下载即可。这种做法我已经用了很久一个简单总结直链方案本质上就是最朴素的 HTTP 下载链路别把它当黑匣子看把 UA、时效、签名三个变量管住速度大多数时候是让人满意的。偶尔还是会遇到账号被特殊限速或者节点抽风的情况我的习惯是先用小文件验证链路通不通再决定要不要在大文件上投入一整个下午不硬磕单个链接不行就换时段重提一次。这条经验帮我少走了很多弯路希望帮到你。本文还有配套的精品资源点击获取