拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Tampermonkey用户脚本获取百度网盘直链,突破限速下载

Tampermonkey用户脚本获取百度网盘直链,突破限速下载

简介:这是一份名为“百度网盘直接下载助手”的用户脚本,供 Tampermonkey 或 Greasemonkey 管理器加载,面向需要绕过百度网盘客户端与非会员限速、直接在浏览器中完成文件下载的普通用户和脚本爱好者。脚本会解析百度网盘页面中的文件信息,提取真实下载地址,并借助 HTTP 请求与浏览器自带下载能力触发直链下载,从而避开官方客户端或网页端的下载限制。压缩包内仅包含 1 个 .user.js 脚本文件,整体约 15KB,轻量易携带,部署成本低;对 JavaScript 基础、用户脚本运行机制及网盘下载流程有了解的读者可快速上手。目前已有 10512 人浏览学习,适合经常处理百度网盘大文件下载的用户、前端脚本爱好者,以及希望研究直链原理、开发自动下载脚本的开发者;同时也可作为理解用户脚本如何修改网页逻辑、发起下载请求的入门案例。使用前需留意账号安全与服务条款,尽量从可信来源获取脚本。

1. 百度网盘直接下载助手:把“限速下载”变成一条可复制的直链

如果你经常从百度网盘下载大文件,大概率经历过这种场景:浏览器点了下载,弹窗提示“下载速度慢,建议安装客户端”,装完客户端依然几十 KB/s,或者干脆要求充值超级会员。这份百度网盘直接下载助手用户脚本,解决的就是这个痛点——它不碰服务器端,不破解账号,也不改下载协议,只是在网页端拦截浏览器自己的下载请求,把百度网盘页面上那个需要客户端才能走的下载动作,重写成一条普通浏览器和下载工具都能认的直链,然后交给浏览器或 IDM、Aria2 这类工具去拉文件。它的落点很窄:适合手头有 Tampermonkey、愿意折腾浏览器脚本的用户,尤其适合频繁下载大文件、想绕开客户端限制又不想开会员的一线从业者。我第一次用这个脚本,是在帮同事导一个 8GB 的 Linux 虚拟机镜像,看到下载进度条从“剩余 3 天”变成“剩余 6 分钟”的那一瞬间,就知道这类脚本值得反复折腾。下文按“脚本怎么跑起来 → 直链怎么拿到 → 实际情况怎么处理”这条线展开。

2. 安装与调试环境:先用 Tampermonkey 把脚本挂上浏览器

2.1 为什么必须有个用户脚本管理器

.user.js 不是一个双击就能运行的独立程序,它必须寄生在浏览器的用户脚本管理器里。常见做法是安装 Tampermonkey,它支持 Chrome、Edge、Firefox 这些主流浏览器,Firefox 也可以用 Greasemonkey,但 Tampermonkey 兼容性更好。用户脚本管理器的本质是一个中间层:它在百度网盘页面加载完成后,把脚本注入到页面当前的运行环境里,脚本就能直接读取页面上的 DOM、拦截网络请求、甚至改写页面按钮的行为。没有这层管理器,脚本文件只是躺在磁盘上的纯文本,浏览器不会主动执行它。

安装管理器的步骤是先到你选用的浏览器官方扩展商店,搜 Tampermonkey,添加扩展。装完后,浏览器工具栏会多出一个类似拼图形状的图标,点击图标可以看到“管理面板”“添加新脚本”等入口。接下来把项目压缩包里解压出来的“百度网盘直接下载助手.user.js”文件拖进浏览器窗口,或者用管理面板里的“从 URL 安装”“导入”功能加载。导入后,建议先做两步确认:一是看管理面板里脚本开关是否打开,二是手动刷新一遍百度网盘页面看有没有报错。

# 如果你习惯用命令行先检查脚本格式,可以用下面命令快速看一眼文件头 head -n 20 百度网盘直接下载助手.user.js

这一步不是必须的,但对排查“脚本装了没生效”很有用。脚本头部的 Metadata 块会写明@name、@namespace、@match这些关键字段,其中@match定义了脚本在哪些网页上运行,比如常见的*://pan.baidu.com/*或*://*.baidu.com/*,如果匹配规则不对,脚本就不会注入。

参数说明:@match是脚本生效的范围白名单,一定要确认它覆盖了pan.baidu.com的页面,否则你在百度网盘页面点“下载”时脚本根本不会执行。加载后打开百度网盘页面,按 F12 打开开发者工具,在 Console 标签页里看到用户脚本管理器输出的运行日志,或者页面出现一个新的“下载助手”按钮,都说明挂载成功。

2.2 安装后先做三个基本检查

脚本装上不等于万事大吉,浏览器插件市场、浏览器安全策略、页面缓存都可能把它卡住。

第一,确认浏览器没有禁用扩展。Chrome 和 Edge 都有“从其他来源安装的扩展可能被停用”的保护机制,如果 Tampermonkey 图标变灰,去扩展管理页重新启用。

第二,确认登录态是有效的。这个脚本的实现思路是复用你当前账号的 Cookie 去请求接口,如果你的百度网盘网页版处于未登录状态,脚本会拿到直链但因为鉴权失败而无法发起下载。用无痕窗口登录一遍百度网盘再测试,能排除很多莫名其妙的权限问题。

第三,确认脚本版本没被浏览器缓存卡住。更新或替换脚本文件后,需要到 Tampermonkey 管理面板里点脚本的“重置”或直接按 F5 刷新页面,脚本的注入才能生效。浏览器对本地文件、扩展脚本都有缓存逻辑,不要只替换了文件不刷新页面就说“脚本坏了”。

3. 直链获取与下载实操:从点按钮到把文件拉到本地

3.1 脚本的运行原理:不是破解,是替代下载请求

要理解这个脚本能干到什么程度,得先看百度网盘网页版的下载流程。普通用户点击下载按钮时,页面前端会向后端请求一个下载地址,但这个地址不是直接暴露的,页面代码会判断你的账号状态、可能需要调用客户端、或者给出一段带时效的链接。百度网盘网页版对非会员的下载行为做了限制,常见的手段包括:要求安装客户端、限制网页直链时效、甚至对某些大文件只允许通过客户端下载。

这个用户脚本做的事情,是在页面加载后自动读取当前文件列表里的文件 ID、文件名、大小这些元数据,然后模拟一次用户主动发起的下载请求,把后端返回的真实下载 URL 拦截下来或重写页面上的下载按钮。你拿到的是一个以https://d.pan.baidu.com/...开头的真实链接,这个链接可以直接交给第三方下载工具去拉数据。

核心实现点通常在两个请求参数上:一个是sign和timestamp这类带时效的鉴权参数,另一个是primaryid或文件完整路径。脚本帮你做了参数拼接和时效处理,但链接本身带着有效期,一般是几分钟到几小时不等。

3.2 主流程操作:转存文件、打开页面、点下载

先说明一点:这个脚本在操作上有个前提玄学——它对当前目录下直接列出的文件最稳定。对于放在多层子目录里的文件,如果你直接进目录去生成直链,拿到链接后下载时容易失败,原因是 302 重定向过程中的 Referer 和 Cookie 不匹配。我一般会先把目标文件转存到网盘根目录,或者单独建一个“下载中转”文件夹,再从该目录直接点下载。

具体操作路径是这样的:

第一步,打开百度网盘网页版,选中你要下载的文件或文件夹,右键点击或使用顶部菜单的“转存”功能,把文件放到网盘根目录。如果你要下载的文件是分享链接里看到的,同样先保存到自己的网盘,因为直接对分享页面的文件发起直链请求时,脚本拿不到文件归属者正确的鉴权信息,容易返回 403。

第二步,进入网盘根目录后,刷新页面,等到脚本注入完毕。这时你把鼠标悬停在某个文件上,页面会多出一个“下载”按钮,或者“获取直链”的独立入口——具体文案看脚本版本,有的叫“下载助手”,有的直接在“下载”按钮上增加了“直链下载”的二级菜单。

第三步,点击该按钮,脚本会弹出一个对话框,里面显示一个以https://d.pan.baidu.com/...或者https://nj12pkg...开头的链接,同时可能带一个“复制链接”按钮。复制这个链接。

第四步,把链接交给下载工具。如果你只是偶尔下单个文件,浏览器地址栏粘贴后直接回车就能开始下载。如果你有 IDM 或 Aria2,把它们设置为浏览器默认的下载工具,然后粘贴链接新建下载任务即可。注意:链接要完整复制,不要只复制到第一个&符号就停,链接后面的&参数负责指定文件名和鉴权信息,少了参数,下载可能变成一个没有文件名的乱码文件。

// 下面这段是演示脚本常见做法的伪代码,不是脚本原码 // 目的是帮你理解它为什么能拿到直链 const fileId = getSelectedFileId(); // 从页面 DOM 读文件 ID const timestamp = Math.floor(Date.now() / 1000); const apiUrl = `/api/shared/download?primaryid=${fileId}&timestamp=${timestamp}`; fetch(apiUrl, { credentials: 'include' }) // credentials 确保携带 Cookie .then(res => res.json()) .then(data => { if (data.errno === 0) { // 拿到的 dlink 字段就是带时效的真实下载地址 window.navigator.clipboard.writeText(data.dlink); } });

逻辑说明:脚本每次生成直链时,都要带上credentials: 'include'这个参数,明确要求浏览器把当前登录账号的 Cookie 一并发送,否则服务端无法确认下载者身份。拿到返回数据后,脚本会读取dlink字段——这个字段就是真实下载地址,但它一定有时效性。注意这块脚本运行完,直链就已经绑定在你当前 IP 和账号上,换了网络或登录另一个账号,链接大概率失效。

刚才这段代码演示的是「分享文件下载」的接口场景。实际脚本里可能还会处理“转存文件下载”的接口,两者鉴权方式略有不同,但核心都是前端读取文件 ID,后端返回带签名的跳转链接。参数说明里的primaryid就是文件的唯一 ID,你要是调试时看到接口返回errno非 0,优先检查这个值是不是从页面正确读出来的。很多脚本翻车,都翻在定位真实文件 ID 的 DOM 选择器上——因为百度网盘前端改版频繁,class 名称经常变。

3.3 配合下载工具:实测参数设置和限速表现

拿到直链后,用浏览器自带的下载功能也能下,但对大文件不太友好——浏览器一旦断网就要从头再来。配合 IDM 或 Aria2,可以多线程分块下载,实际提速明显。

如果你用 IDM,建议做两件事:一是确认浏览器扩展“IDM Integration Module”已启用,这保证你能直接在浏览器里右键“使用 IDM 下载”;二是前置设置:在 IDM 的“选项 → 连接”里把“默认的最大连接数”改成 8 或 16。百度网盘直链对分块请求的包容度还不错,单线程下载通常跑不满你的带宽,多线程能有效榨干空闲带宽。但不要设成 32,有些 CDN 节点对过高的并发会直接拒绝请求,返回 403。

如果你用 Aria2,命令行里需要指定--referer参数,这是不少人在 Aria2 下百度网盘直链时遇到的隐藏坑。

aria2c -c -s 16 -x 16 -k 1M \ --referer="https://pan.baidu.com/" \ "https://d.pan.baidu.com/xxxx?sign=xxx&timestamp=xxxx"

参数说明:-s 16指定拆成 16 个分片,-x 16指定每个服务器最多开 16 条连接,-k 1M是每个分片大小为 1MB。--referer非常关键,百度网盘的 CDN 会校验请求来源,不带 Referer 或 Referer 不是百度网盘域名的请求,会被判定为盗链而返回 403。你在 IDM 里可能不用手动设置是因为它自动带了,但 Aria2 这类命令行工具默认不带,所以必须手动指一下。我见过有人拿着直链下载,进度条趴着不动,日志里全是403 Forbidden,就是漏了这个参数。

4. 常见问题排查与避坑:脚本、直链和浏览器三方博弈

4.1 现象:脚本已开启但页面没有“下载助手”按钮

原因:最常见的是 Tampermonkey 没有实际注入脚本。这个检测起来很简单,在百度网盘页面上按 F12 打开开发者工具,在 Console 里输入typeof unsafeWindow,如果返回undefined,就说明脚本管理器没有往页面注入任何代码;如果返回object,说明管理器在工作,但脚本可能没有匹配当前页面。还有一种情况是脚本开关虽然显示“启用”,但 Tampermonkey 右上角的“启用/停用”总开关没打开。

解决:依次检查三处——浏览器扩展页里 Tampermonkey 是否启用、Tampermonkey 面板里脚本是否启用、@match规则是否覆盖了当前网址。再不行就重新导入一遍脚本文件并强制刷新页面(Ctrl+F5)。

4.2 现象:直链生成成功,但下载时提示 403 Forbidden

原因:这是最高频的翻车现场。直链生成后,百度网盘服务端就已经把这个链接与你当前 IP 和账号绑定了。如果直链被分享给其他人使用,或者你生成链接后切换了网络(比如从公司内网切到手机热点),服务端校验不通过就会拒绝请求。另外,部分 CDN 节点要求请求头必须带正确的 Referer,如果你直接把直链贴到浏览器新标签页里访问,Referer 可能为空,同样 403。

解决:生成直链后尽快下载;切换网络后重新生成一条;如果用的是 Aria2,务必加上--referer="https://pan.baidu.com/"。如果 IDM 也报 403,在 IDM 的“站点管理器”里为d.pan.baidu.com添加 Referer 规则。

4.3 现象:小文件秒下,大文件下到一半就失败或速度暴跌

原因:直链一般是有时效的,少数加密链接可能限制总流量或限制连接时长。百度网盘对超大文件(比如 4GB 以上)通常给出的是分片下载地址,脚本拿到的可能是其中一个分片的链接,如果你用单线程去请求整文件,CDN 会在传输中途断开连接。

解决:大文件下载优先用支持断点续传和多线程的工具。Aria2 是首选,因为它分片管理最稳,断点续传能力强。IDM 也支持,但偶尔会把任务状态搞坏——如果 IDM 里看到某个分片卡住,右键任务选择“刷新下载地址”再继续。如果下到一半失败,建议不要在原直链上死磕,重新生成一条新直链再下,因为旧链接已经失效。

4.4 现象:移动端浏览器上脚本完全无效

原因:Tampermonkey 虽然有移动版,但 iOS 端的浏览器扩展机制受限,Android 端的 Kiwi Browser 或 Firefox 也经常因为网页版百度网盘重定向到移动端页面而找不到桌面端 DOM。这个脚本设计时就默认桌面浏览器。

解决:不要在手机上折腾脚本,换一个思路——在手机浏览器登录百度网盘网页版,切到“桌面版网站”模式,但坦白讲操作起来很痛苦。真正高效的玩法是在电脑上生成直链,然后把链接发到手机上的 Aria2 或下载工具里。手机端下载用“ES 文件浏览器”或“ADM”这类支持直链下载的应用,粘贴链接就能拉文件。

4.5 现象:脚本运行时报错,提示“Cannot read properties of null”

原因:脚本在读取页面 DOM 元素时,因为页面结构变了,定位不到目标节点。百度网盘前端版本更新频繁,脚本的 DOM 选择器失效是很正常的。

解决:检查是否有脚本更新;如果没有,你也可以直接拿浏览器开发者工具定位当前页面的文件列表容器,手动修改脚本里的选择器。具体做法是右键文件列表区域选“检查”,找到文件行最外层元素,看它的 class 或># 把直链列表保存为 urls.txt,每行一条,然后执行: aria2c -c -s 16 -x 16 -k 1M \ --referer="https://pan.baidu.com/" \ -i urls.txt

参数说明:-i是 Aria2 的输入文件参数,会逐行读取链接并建立下载任务。这种方式比在网页上一个一个点“下载”高效得多,而且免去浏览器弹窗干扰。只要你有现成换个变量名的需求,比如从一个文件夹里挑出几十个文件,再把它们的直链汇总到一起,这条命令能一口气全拉回来。注意顺序很重要:先刷新百度网盘页面让脚本注入,再勾选文件,最后点分析生成批量链接。

第二件事是给“获取到的直链”做一次二次校验。拿到的直链不能直接复制就走人,我会统一做三件事:检查链接是否以https://d.pan.baidu.com/开头,因为有些脚本返回的是跳转中间页而不是最终下载地址;检查链接末尾是否带filename=xxx参数,没有这个参数的链接下载后文件名会是一串乱码;检查这个链接是否包含完整签名参数——如果看到链接里只有timestamp没有sign,那这个链接基本废了,要么是脚本解析失败了,要么是文件本身无法通过网页端直链下载。

// 一个快速校验直链的 JS 片段,直接在浏览器 Console 里执行 const link = prompt("粘贴你拿到的直链"); const u = new URL(link); console.log({ host: u.hostname, hasSign: u.searchParams.has("sign"), hasTime: u.searchParams.has("timestamp"), fileName: u.searchParams.get("filename") });

这个片段的作用不是帮你提速,是帮你拦截掉八成“看起来像直链其实下了也是白下”的无效操作。打印出来的hasSign如果是false,就不要浪费时间下载了,重新生成一条才是正路。

从那以后,我每次下载大型开发资源、镜像、数据集都强制走一遍这个流程:转存到根目录 → 刷新页面等脚本注入 → 批量获取直链 → 校验参数 → 丢给 Aria2。这套习惯帮我省下过大量等待时间,也让我绕开了不少“下载到 80% 发现链接过期”的尴尬。希望这套笔记对你有用,至少让你下次看到百度网盘大文件时,不用再一边盯着进度条一边怀疑人生。

本文还有配套的精品资源,点击获取

返回列表