下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-e0km4x5v--bilibili-podcast-publish.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-e0km4x5v/bilibili-podcast-publish。|
阅读全文 (展开查看完整说明)
概述
何时用
- 发布朝善商业圆桌会系列视频
- 任何 B站 长视频投稿(30 分钟以上的对谈/访谈)
- 需要批量填写标题、简介、10个标签
环境
BSK = C:/Users/steven/.local/bin/bsk.exe
环境变量:BSK_AUTO_UPDATE=off BSK_AUTO_START=0
浏览器实例:01d247d2(Edge)⚠️ 大文件转码会占满CPU,导致 bsk 会话崩溃。批量转码期间不要同时操作投稿。
核心流程
0. 启动会话
bsk session start --width 1440 --height 900 --browser 01d247d2
bsk tab list --session <sid># 取真实 tab-id(session start 输出的 WINDOW 值不是 tab-id)1. 打开投稿页
https://member.bilibili.com/platform/upload/video/frame⚠️ 必须等 20–30 秒让 React 挂载。页面渲染慢,navigate 常报 reached=timeout 但实际已跳转。
验证挂载:
(()=>{ const t=document.body.innerText; return {n:document.querySelectorAll('input').length, ok:t.includes('16G以内')}; })()2. 上传视频
bsk upload --session <sid> --tab-id <tid>
--selector ".bcc-upload-wrapper" --file "<绝对路径>" --timeout 15m⚠️ 选择器必须用 .bcc-upload-wrapper,不能用 input[type=file](会命中隐藏元素报 no visible geometry)。
🔴 致命限制:本机无法上传视频(网络白名单)
先测连通性再试:
curl -s -o /dev/null -m 12 -w "%{http_code}" "https://upos-sz-upcdntv01.bilivideo.com"
# 返回 000 = 被拦,**任何脚本方案都无效**已知(2026-10-20 实测):
| 域名 | 状态 |
|---|---|
member.bilibili.com / api.bilibili.com / i0.hdslb.com | 200 ✅ |
*.bilivideo.com(视频上传服务器) | 000 ❌ |
症状:bsk upload 返回 upload ok,但进度条永远 0.0MB/0.0MB,无报错无速度。排查无效手段(都试过没用):换小文件(2MB 也卡)、压码率、--mode drop。
结论:遇到上传卡 0% 时直接判定为网络限制,交给用户手动上传,不要反复重试浪费时间。脚本能做的只有:填标题、注入简介、批量建标签、删默认标签 —— 这些都已跑通。
3. 填标题(input 索引 1)
(()=>{ const els=[...document.querySelectorAll('input,textarea')]; const t=els[1];
const setV=(el,v)=>{Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').set.call(el,v);
el.dispatchEvent(new Event('input',{bubbles:true})); el.dispatchEvent(new Event('change',{bubbles:true}));};
setV(t,'标题内容'); return {val:t.value}; })()4. 注入简介(Quill 富文本,不是 textarea)
(()=>{ const ed=document.querySelectorAll('.ql-editor')[0]; ed.focus();
document.execCommand('selectAll'); document.execCommand('delete');
document.execCommand('insertText', false, '简介内容'); return {len:ed.innerText.length}; })()⚠️ 必须用 execCommand,用 bsk fill 会显示成功但后端收不到内容。
5. 批量创建标签(关键难点)
标签必须派发真实键盘事件才能创建:
(()=>{ const el=[...document.querySelectorAll('input')].find(e=>e.placeholder&&e.placeholder.includes('回车'));
el.focus(); el.value='社群运营'; el.dispatchEvent(new Event('input',{bubbles:true}));
el.dispatchEvent(new KeyboardEvent('keydown',{key:'Enter',code:'Enter',keyCode:13,which:13,bubbles:true}));
el.dispatchEvent(new KeyboardEvent('keyup',{key:'Enter',code:'Enter',keyCode:13,which:13,bubbles:true})); })()每次间隔 2 秒,逐个添加。
6. 删除 B站 自动填的默认标签
B站 会按文件名猜分区并塞 3 个默认标签(如「电视剧/影视剪辑/韩剧」),必须删掉:
(()=>{ const cs=[...document.querySelectorAll('.label-item-v2-container')];
const c=cs[0]; const txt=c.querySelector('.label-item-v2-content').textContent.trim();
c.querySelector('svg.close').dispatchEvent(new MouseEvent('click',{bubbles:true}));
return {removed:txt}; })()重复执行直到删完。
7. 分区(脚本无解,必须手动)
虚拟滚动下拉,click() 和 fill 都点不开。
- 必须由用户手动改为目标分区(本系列:知识 → 商业财经)
踩坑清单
| 问题 | 原因 | 解决 |
|---|---|---|
no visible geometry | 命中隐藏的 input | 用 .bcc-upload-wrapper |
| 上传卡 0% | 本机网络拦了 *.bilivideo.com | 无法绕过,交用户手动上传 |
| 会话莫名消失 | CPU 被转码占满 | 转码时别同时操作 |
| navigate 报 timeout | 渲染慢,实际已跳转 | 等 20–30 秒再操作 |
| observe 反复超时 | 重页面 | 改用 evaluate + XPath |
previous command is still running | 上一条命令未完成 | 等或换新会话 |
| 简介填了但没保存 | 用了 fill | 改 execCommand |
| 标签输入无效 | 只派发 input | 必须加 keydown Enter |
| 默认标签还在 | 没删 | 删 svg.close |
必做的人工步骤
- 分区改为「知识-商业财经」
- 上传封面(
封面/EPxx_*.png,1920×1080) - 关闭「允许转载」+ 勾选「声明原创」
- 加入合集(关键,形成追更)
- 确认后提交
验证状态
(()=>{ const t=document.body.innerText;
return {
title: document.querySelectorAll('input')[1]?.value,
desc: document.querySelectorAll('.ql-editor')[0]?.innerText.length,
tags: [...document.querySelectorAll('.label-item-v2-container')].map(c=>c.querySelector('.label-item-v2-content').textContent.trim())
}; })()品牌与计费
| 项目 | 说明 |
|---|---|
| 品牌 | 谦懋智享 |
| 发布方 | 谦懋乐享(SkillHub 企业账号) |
| 计费方式 | Pay Skill,按次计费 |
| 单次调用价格 | ¥0.1(10 分) |
| 支付协议 | 微信支付 Agent Pay X402 |
前置检查:当前智能体是否支持微信 AI 支付
发起下单前,先检查你的可用工具列表中是否存在名称包含 weixinpay_ 的工具(如 mcp__weixinpay__weixinpay_register,工具名带前缀也算;存在任意一个即视为支持)。只以你的工具列表为证据,本文档中提到的工具名不算;无法确认时按「不支持」处理。
- 支持:静默继续本 Skill 的后续流程,不向用户提及本检查。
- 不支持:终止流程且不要发起下单。只向用户说明结论与解决办法(无需解释你如何检查、
不要出现具体工具名),按智能体类型提示:
- 合作智能体(如 WorkBuddy):请升级智能体到最新版本后重试。
- 开放智能体(如 OpenClaw / DeepSeek Harness):请根据
https://skillhub.cn/install/skillhub.md安装 @tencent-adm/weixinpay-installer。
- 无法判断类型:请升级智能体或安装微信支付 AI 支付插件后重试。
部署与密钥自检见 scripts/pay_server.py 头部注释。
付费调用流程(四步,缺一不可)
本 Skill 的支付服务已接入微信支付 Agent Pay X402(真实下单 + 预下单)。支付能力由「谦懋智享支付网关」提供,需先部署并通过 https://qmzx-pay-gateway.app.workbuddy.host?sharecode=XCPQGFHML7 访问(部署与密钥配置见 scripts/pay_server.py 头部注释)。
- 请求资源(触发下单):向网关发起首调(不带订单号)。网关完成微信 Native 下单 + X402 预下单后返回 HTTP 402:
POST https://qmzx-pay-gateway.app.workbuddy.host/preorder?sharecode=XCPQGFHML7,请求体 {"skill_id":"bilibili-podcast-publish","skill_version":"1.0.0","description":"bilibili-podcast-publish 单次调用"}响应头与响应体同时携带 WeixinPay-Required(支付码)与 X-Out-Trade-No(订单号),两者都必须保存。
- 处理 402:从响应中提取
WeixinPay-Required与X-Out-Trade-No。 - 发起支付:把
WeixinPay-Required的值作为paymentCode交给weixinpay_pay。 - 支付成功后获取资源(⚠️ 必须执行):带订单号重试原请求(网关路径
/verify,HeaderX-Out-Trade-No填第二步保存的订单号):
POST https://qmzx-pay-gateway.app.workbuddy.host/verify?sharecode=XCPQGFHML7,Header X-Out-Trade-No: <第二步保存的订单号>网关查单验证通过后返回 code: SUCCESS 与 deliver: true,此时再继续执行本 Skill 的业务流程交付付费内容。
⚠️ 第四步最容易被遗漏:不携带 X-Out-Trade-No 重试,就永远拿不到付费内容。
重试与异常处理
- 网关侧下单 / 预下单 / 查单内置指数退避重试(默认 3 次,
SKILLPAY_MAX_RETRY可调);
4xx 业务错误立即失败不重试。
- 支付失败或状态不明:先用
POST https://qmzx-pay-gateway.app.workbuddy.host/verify?sharecode=XCPQGFHML7(带订单号)查单,
不重复下单,避免重复扣费。
- 幂等:同一
out_trade_no只履约一次,重复请求返回already_fulfilled: true与缓存结果。 - 网关部署、微信商户证书与 SkillHub 开发者密钥配置说明见
scripts/pay_server.py头部注释与
references/payskill-integration.md。
完整接入规范
见 references/payskill-integration.md:两套密钥的区别、X402 签名串(5 行含尾随换行)、订单号 ≤32 位约束、402 响应结构、改造自检清单。