视频号下载开关助手
帮用户把“启动下载器、设置本地代理、用完关闭代理”变成一个可双击的桌面开关。重点不是解释技术细节,而是让用户能稳定下载视频号内容,并且用完后网络恢复正常。
何时使用
用户提出以下需求时使用本 Skill:
- “视频号怎么下载”“帮我启动视频号下载器”“打开本地代理”
- “做一个 Windows/macOS 桌面快捷方式,双击打开,再双击关闭”
- “代理关不掉”“视频号下载按钮没出来”“wx_video_download 怎么用”
- “在 WorkBuddy 里帮我配置视频号下载”
用户得到什么
- 桌面上一个清晰的开关入口。
- 双击一次启动下载代理,打开微信 PC 端视频号即可看到下载入口。
- 再双击一次关闭下载器,并尽量恢复系统代理。
- 出错时能看到日志路径和下一步处理方式。
前置条件
- 电脑已安装微信 PC 端。
- 本地已有
wx_video_download/wx_video_download.exe,或允许 Agent 从项目发布页引导用户下载。 - 首次运行可能需要安装根证书,并按系统提示授权修改网络代理。
- Windows 建议用 PowerShell 5+;macOS 建议用 zsh。
Agent 执行流程
1. 判断系统与下载器位置
先判断用户系统:
- Windows:查找
wx_video_download.exe。 - macOS:查找
wx_video_download。
优先检查这些位置:
- 用户提供的路径。
- 当前工作区和桌面常见下载目录。
- Windows 的
%USERPROFILE%\Downloads、%USERPROFILE%\Desktop。 - macOS 的
~/Downloads、~/Desktop。
若找不到下载器,不要让用户理解代理原理。直接给下一步:从项目发布页下载对应系统包,解压后再继续。
项目发布页:https://github.com/ltaoo/wx_channels_download/releases
2. 生成桌面开关
Windows 使用下方“Windows PowerShell 开关模板”的逻辑,生成到用户桌面,例如:
视频号代理开关.ps1- 如用户坚持要
.bat入口,可在本地临时生成一个只调用 PowerShell 脚本的批处理文件;不要把.bat文件打进 SkillHub 包。
macOS 使用下方“macOS zsh 开关模板”的逻辑,生成到用户桌面或封装成 .app。
默认代理地址:
- Host:
127.0.0.1 - Port:
2023
默认日志目录:
- Windows:
%LOCALAPPDATA%\WechatChannelsDownloadShortcut - macOS:
~/Library/Application Support/wx_channels_download_shortcut
3. 启动验证
生成后提示用户双击开关。若 Agent 可执行本机命令,可以做轻量验证:
- 检查进程是否存在。
- 检查
127.0.0.1:2023是否在监听。 - 检查日志里是否出现“代理服务启动成功”或端口占用错误。
不要自动下载受版权保护的内容。只确认工具启动、代理状态和用户能看到下载按钮。
4. 关闭与恢复
再次双击时,应优先给下载器进程发送正常终止信号,让原程序执行清理逻辑。若正常关闭失败,再提示用户手动关闭系统代理:
Windows:
- 设置 → 网络和 Internet → 代理 → 关闭“使用代理服务器”。
- 或用管理员 PowerShell 执行系统代理恢复命令。
macOS:
- 系统设置 → 网络 → 当前网络 → 详细信息 → 代理 → 关闭 Web Proxy 和 Secure Web Proxy。
5. 常见问题
端口被占用:
- 说明已有下载器或其他程序占用
2023。 - 先双击开关关闭;仍失败时查找占用进程。
- 需要改端口时,同步修改启动脚本里的端口。
下载按钮没出现:
- 确认代理已启动。
- 确认微信 PC 端正在打开视频号详情页。
- 刷新或重新打开视频号页面。
- 首次运行确认根证书已安装并受信任。
关闭后网络异常:
- 优先再双击开关一次。
- 若仍异常,按上面的 Windows/macOS 手动恢复代理。
杀毒或安全拦截:
- 说明这是本地代理类工具,系统可能弹窗确认。
- 不要引导用户关闭全部安全防护;只允许用户对自己信任的下载器文件做明确授权。
对用户的表达原则
- 先告诉用户“现在该双击哪个文件”,再解释必要原因。
- 不把“证书、代理、端口、进程”当主说明;这些只用于排障。
- 每一步都以用户结果结尾:能下载、能关闭、网络恢复。
- 不承诺可下载所有视频;平台限制、账号权限和内容状态会影响结果。
Agent 自检
- [ ] 已区分 Windows 与 macOS,不把
.app/.command当成 Windows 可用方案。 - [ ] 已确认脚本里下载器路径指向真实文件,或清楚告诉用户先下载解压。
- [ ] 启动与关闭都保留日志路径。
- [ ] 未把真实凭证、私钥或用户隐私写入 Skill。
- [ ] 未指导用户绕过平台权限或批量侵犯版权。
Windows 可选 .bat 入口
SkillHub 不接受 .bat 文件入包。若用户需要双击批处理入口,Agent 可在用户电脑本地临时创建以下内容,文件名建议为 视频号代理开关.bat,并放在 视频号代理开关.ps1 同目录:
@echo off
set SCRIPT_DIR=%~dp0
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%SCRIPT_DIR%视频号代理开关.ps1" -AppDir "%SCRIPT_DIR%"
Windows PowerShell 开关模板
Agent 可把以下内容写成 视频号代理开关.ps1,并把 $AppDir 指向 wx_video_download.exe 所在目录:
param(
[string]$AppDir = "",
[string]$HostName = "127.0.0.1",
[int]$Port = 2023
)
$ErrorActionPreference = "Stop"
if ([string]::IsNullOrWhiteSpace($AppDir)) {
$AppDir = Split-Path -Parent $MyInvocation.MyCommand.Path
}
$Bin = Join-Path $AppDir "wx_video_download.exe"
$StateDir = Join-Path $env:LOCALAPPDATA "WechatChannelsDownloadShortcut"
$PidFile = Join-Path $StateDir "proxy.pid"
$LogFile = Join-Path $StateDir "proxy.log"
New-Item -ItemType Directory -Force -Path $StateDir | Out-Null
function Show-Message([string]$Text) {
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show($Text, "视频号本地代理") | Out-Null
}
function Get-ProxyProcess {
$items = @()
if (Test-Path $PidFile) {
$saved = (Get-Content $PidFile -ErrorAction SilentlyContinue | Select-Object -First 1)
if ($saved -match '^\d+$') {
$p = Get-Process -Id ([int]$saved) -ErrorAction SilentlyContinue
if ($p) { $items += $p }
}
}
$escaped = [Regex]::Escape($Bin)
$matched = Get-CimInstance Win32_Process -Filter "name = 'wx_video_download.exe'" -ErrorAction SilentlyContinue |
Where-Object { $_.ExecutablePath -eq $Bin -or $_.CommandLine -match $escaped }
foreach ($m in $matched) {
$p = Get-Process -Id $m.ProcessId -ErrorAction SilentlyContinue
if ($p) { $items += $p }
}
$items | Sort-Object Id -Unique
}
function Stop-Proxy {
$processes = @(Get-ProxyProcess)
if ($processes.Count -eq 0) {
Remove-Item $PidFile -Force -ErrorAction SilentlyContinue
Show-Message "当前没有正在运行的代理。"
return
}
foreach ($p in $processes) {
Stop-Process -Id $p.Id -Force -ErrorAction SilentlyContinue
}
Remove-Item $PidFile -Force -ErrorAction SilentlyContinue
Show-Message "代理已关闭。若网络仍异常,请到 Windows 代理设置中关闭“使用代理服务器”。"
}
function Start-Proxy {
if (-not (Test-Path $Bin)) {
Show-Message "找不到 wx_video_download.exe。请把此脚本放在下载器同一目录,或用 -AppDir 指定目录。"
return
}
if (@(Get-ProxyProcess).Count -gt 0) {
Stop-Proxy
return
}
$p = Start-Process -FilePath $Bin -ArgumentList @("--hostname", $HostName, "--port", "$Port") -WorkingDirectory $AppDir -WindowStyle Hidden -PassThru -RedirectStandardOutput $LogFile -RedirectStandardError $LogFile
Set-Content -Path $PidFile -Value $p.Id -Encoding ascii
Start-Sleep -Seconds 1
if (Get-Process -Id $p.Id -ErrorAction SilentlyContinue) {
Show-Message "代理已启动:$HostName`:$Port。打开微信 PC 端视频号页面即可使用下载按钮。"
} else {
Remove-Item $PidFile -Force -ErrorAction SilentlyContinue
Show-Message "代理启动失败。日志位置:$LogFile"
}
}
Start-Proxy
macOS zsh 开关模板
Agent 可把以下内容写成 视频号代理开关.command,执行 chmod +x 后放到桌面,或用 osacompile 封装成 .app:
#!/bin/zsh
set -u
APP_DIR="${1:-$(cd "$(dirname "$0")" && pwd)}"
BIN="$APP_DIR/wx_video_download"
STATE_DIR="$HOME/Library/Application Support/wx_channels_download_shortcut"
PID_FILE="$STATE_DIR/proxy.pid"
LOG_FILE="$STATE_DIR/proxy.log"
HOST="127.0.0.1"
PORT="2023"
mkdir -p "$STATE_DIR"
notify() {
/usr/bin/osascript -e "display notification \"$1\" with title \"视频号本地代理\""
}
running_pids() {
local pids=()
if [[ -f "$PID_FILE" ]]; then
local saved_pid
saved_pid="$(/bin/cat "$PID_FILE" 2>/dev/null || true)"
if [[ "$saved_pid" == <-> ]] && /bin/kill -0 "$saved_pid" 2>/dev/null; then
pids+=("$saved_pid")
fi
fi
local matched
matched="$(/usr/bin/pgrep -f "$BIN" 2>/dev/null || true)"
if [[ -n "$matched" ]]; then
while IFS= read -r pid; do
[[ -n "$pid" ]] && pids+=("$pid")
done <<< "$matched"
fi
if (( ${#pids[@]} > 0 )); then
printf "%s\n" "${pids[@]}" | /usr/bin/sort -u
fi
}
stop_proxy() {
local pids
pids="$(running_pids)"
if [[ -z "$pids" ]]; then
/bin/rm -f "$PID_FILE"
notify "当前没有正在运行的代理"
return 0
fi
while IFS= read -r pid; do
/bin/kill -TERM "$pid" 2>/dev/null || true
done <<< "$pids"
/bin/sleep 1
/bin/rm -f "$PID_FILE"
notify "代理已关闭"
}
start_proxy() {
if [[ ! -x "$BIN" ]]; then
notify "找不到可执行文件 wx_video_download"
return 1
fi
if [[ -n "$(running_pids)" ]]; then
stop_proxy
return $?
fi
cd "$APP_DIR" || return 1
/usr/bin/nohup "$BIN" --hostname "$HOST" --port "$PORT" >> "$LOG_FILE" 2>&1 &
local pid=$!
printf "%s" "$pid" > "$PID_FILE"
/bin/sleep 1
if /bin/kill -0 "$pid" 2>/dev/null; then
notify "代理已启动:$HOST:$PORT"
else
/bin/rm -f "$PID_FILE"
notify "代理启动失败,请查看日志"
return 1
fi
}
start_proxy