8000 适配:百度网盘新版分享页(disk-share-v2)并改进取链错误处理 by yyan160 · Pull Request #557 · hmjz100/LinkSwift · GitHub
[go: up one dir, main page]

Skip to content 8000

适配:百度网盘新版分享页(disk-share-v2)并改进取链错误处理 - #557

Open
yyan160 wants to merge 1 commit into
hmjz100:devfrom
yyan160:fix/baidu-share-v2
Open

yyan160 wants to merge 1 commit into
hmjz100:devfrom
yyan160:fix/baidu-share-v2

Conversation

@yyan160
@yyan160 yyan160 commented Nov 3, 2026
Copy link
Copy Markdown

问题

百度网盘分享页已全面切换到新版 disk-share-v2(Vue 3),脚本仍按旧版 DOM 适配,导致分享页的「下载助手」完全不可用(#537、#532、#489、#468 均为同一根因):

  1. 旧挂载点 .module-share-top-bar .x-button-box .g-dropdown-button.tools-more 已不存在,按钮(含「点我点亮」)不再出现;
  2. getSelectedList() 读不到新版列表 .JS-list-view-item 的勾选状态,提示「请勾选要下载的文件哦~」;
  3. getShareData() 读不到新版的提取码(localStorage 键名带前缀 1)、sekey、bdstoken 等;
  4. getShareSign 的拼接写成了 $bdstoken=(缺 &),签名请求必然失败;
  5. 「保存后下载」点击的是 .tools-share-save-hb,新版里它只是按钮外层的 div,点了没反应。

另外几处相关的健壮性问题一并处理:

修改内容

  • mount.share 同时匹配旧版顶部栏、新版多文件列表工具栏 .share-multi-list-toolbar-row .share-list-toolbar、新版底部操作栏 .module-share-bottom-bar .x-button-box(单文件分享页);
  • 新增 createShareButton():复制原生按钮的 data-v-* 作用域属性来沿用网盘自身样式,多文件页注入到顶部「下载 / 保存至网盘」胶囊旁,单文件页注入到底部操作栏,菜单在底部时向上展开且与按钮无间隙(鼠标移动时不会消失);addInitButton() 的「点我点亮」同样适配;
  • 新增 getShareSelectedList():从 .JS-list-view-item[data-file-key] 的 .wp-checkbox--checked 读取勾选,文件信息来自页面提供的 window.locals.dump().file_list(进入子文件夹后页面会同步更新该列表,已验证);单文件分享页直接返回页面中的文件;
  • getShareData() 兼容 locals.dump() / locals.get() / yunData,提取码兼容 1<surl>_pwd,sekey 依次取 currentSekey / locals / BDCLND Cookie;页面已提供 sign/timestamp 时直接使用,否则再请求 tplconfig(修正 $bdstoken 为 &bdstoken,并兼容 data.sign 包裹);
  • getShareFilesUrl():只缓存成功获取到的地址;113/118、加密 list、-20(需人机验证)、9013(账号受限)分别给出明确提示;jsToken 为空时不再拼接 jsToken=undefined;
  • getFilesUrl():错误响应不再触发 res.list.length 崩溃;服务器未返回的文件给出明确提示;
  • 「保存后下载」改为点击 .tools-share-save-hb 内的真实按钮;
  • 令牌请求失败时整理出可读的错误详情。

测试

用 Playwright 无头 Chromium 加载真实分享页(2026-11-04 线上的 disk-share-v2),通过 GM_* 兼容层注入本脚本,分别在未登录与已登录(真实账号 Cookie)状态下验证:

  • 多文件分享页:顶部工具栏出现「下载助手」胶囊按钮,悬停展开 9 项菜单;进入子文件夹后勾选单个文件,「API 下载」依次请求 share/tplconfig(&bdstoken 修正后 errno 0)与 api/sharedownload(errno 0,明文 list),弹窗正常显示该文件与「增强下载 / 直接下载 / 推送至 IDM / 复制地址」按钮;拿到的 d.pcs.baidu.com 直链用 Range: bytes=0-0 请求返回 HTTP 206;
  • 多文件分享页只勾选文件夹时,给出明确提示而不是空弹窗;「保存后下载」能识别勾选并触发原生保存按钮;
  • 单文件分享页(206 MB 文件):底部操作栏出现「下载助手」,菜单向上展开;sharedownload 返回加密 list 字符串时显示「服务器只返回了加密的下载信息…需要保存到网盘后下载」的提示,且不再写入直链缓存;
  • node --check 通过;npx eslint 与 dev 分支一致(仅原有 2 条 unused-vars 警告)。

说明

  • 与 修复百度网盘新版分享页适配与分享直链获取 #533 的范围不同:本 PR 只做新版页面适配与错误处理,不做「临时转存到自己网盘」的兜底;遇到服务器拒绝直接取链(113/118/加密 list)时按现有策略提示用户先「保存后下载」。
  • 按 .github/contributing.md,未修改脚本版本号,目标分支为 dev;只改动 (改)网盘直链下载助手.user.js。

关联议题:#537 #532 #489 #468 #539 #510 #519 #484 #502 #477

🤖 Generated with Claude Code

- 分享页挂载点同时匹配新版顶部工具栏与底部操作栏,按钮沿用原生样式
- 新增 getShareSelectedList 读取新版列表勾选状态与 locals.file_list
- getShareData 兼容新版 locals / 带前缀 1 的提取码键名 / BDCLND
- 修正 tplconfig 请求中的 $bdstoken 拼接错误,优先使用页面提供的签名
- 分享页与主页取链:错误响应不再崩溃、不再缓存失败结果,并给出可读提示
- 「保存后下载」点击新版保存按钮本身;令牌请求失败不再显示 [object Object]

关联:hmjz100#537 hmjz100#532 hmjz100#489 hmjz100#468 hmjz100#539 hmjz100#510 hmjz100#519 hmjz100#484 hmjz100#502 hmjz100#477

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

0