<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>软件仓库归档 - 帝讯博客</title>
	<atom:link href="https://www.dixunblog.cn/category/softs/feed" rel="self" type="application/rss+xml" />
	<link>https://www.dixunblog.cn/category/softs</link>
	<description>致力于打造专业的互联网资讯平台</description>
	<lastBuildDate>Fri, 30 Oct 2026 03:15:02 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://cdn.hyclive.cn/dixunblog/2025/12/cropped-ico-32x32.png</url>
	<title>软件仓库归档 - 帝讯博客</title>
	<link>https://www.dixunblog.cn/category/softs</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>💑 情侣小屋 · Couple Home——原创情侣小程序</title>
		<link>https://www.dixunblog.cn/2091.html</link>
					<comments>https://www.dixunblog.cn/2091.html#respond</comments>
		
		<dc:creator><![CDATA[老大]]></dc:creator>
		<pubDate>Fri, 30 Oct 2026 03:15:02 +0000</pubDate>
				<category><![CDATA[手机软件]]></category>
		<category><![CDATA[编程代码]]></category>
		<category><![CDATA[情侣小屋]]></category>
		<category><![CDATA[情侣小程序]]></category>
		<guid isPermaLink="false">https://www.dixunblog.cn/?p=2091</guid>

					<description><![CDATA[<p>一个给情侣用的微信小程序：把两个人的小日子都记在一起 —— 纪念日、日记、相册、实时定位、点菜做饭、日程、喜好、愿望清单、经期记录…… A WeChat Mini Program for couples to record their life together. ✨ 功能特性 首页按三类组织共 13 个页面： 分组 功能 说明 记录我们 纪念日 支持阳历 / 农历，自动倒计时与到期提醒 情侣日记 图文日记，支持心情、天气、定位标记，图片三列瀑布流 情侣相册 分类相册，双方共享，支持批量上传 一起生活 点菜做饭 内</p>
<p><a href="https://www.dixunblog.cn/2091.html">💑 情侣小屋 · Couple Home——原创情侣小程序</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>一个给情侣用的微信小程序：把两个人的小日子都记在一起 —— 纪念日、日记、相册、实时定位、点菜做饭、日程、喜好、愿望清单、经期记录……</p>
<p><em>A WeChat Mini Program for couples to record their life together.</em></p>
<h2>✨ 功能特性</h2>
<p>首页按三类组织共 <strong>13 个页面</strong>：</p>
<table>
<tbody>
<tr>
<td>分组</td>
<td>功能</td>
<td>说明</td>
</tr>
<tr>
<td><strong>记录我们</strong></td>
<td>纪念日</td>
<td>支持阳历 / 农历，自动倒计时与到期提醒</td>
</tr>
<tr>
<td></td>
<td>情侣日记</td>
<td>图文日记，支持心情、天气、定位标记，图片三列瀑布流</td>
</tr>
<tr>
<td></td>
<td>情侣相册</td>
<td>分类相册，双方共享，支持批量上传</td>
</tr>
<tr>
<td><strong>一起生活</strong></td>
<td>点菜做饭</td>
<td>内置 <strong>416 道</strong>家常菜谱（带用量与分步做法）+ 自定义菜谱 + 互相点菜</td>
</tr>
<tr>
<td></td>
<td>日程</td>
<td>约定日程，到点强提醒</td>
</tr>
<tr>
<td></td>
<td>愿望清单</td>
<td>双方各写各的心愿，共享给对方</td>
</tr>
<tr>
<td><strong>关心与日常</strong></td>
<td>TA 的喜好</td>
<td>记录对方爱吃的 / 想去的，点菜时一键标记</td>
</tr>
<tr>
<td></td>
<td>实时位置</td>
<td>查看双方的实时位置与距离</td>
</tr>
<tr>
<td></td>
<td>经期记录</td>
<td>经期记录与周期预测</td>
</tr>
<tr>
<td></td>
<td>天气</td>
<td>实时本地天气与穿衣建议</td>
</tr>
<tr>
<td>其它</td>
<td>绑定情侣</td>
<td>邀请码绑定 / 解除，自动计算「在一起」天数</td>
</tr>
<tr>
<td></td>
<td>我的</td>
<td>昵称、头像、登录状态管理</td>
</tr>
</tbody>
</table>
<ul>
<li><strong>游客可先逛</strong>：未登录也能看到首页品牌与天气，登录后再解锁情侣功能（符合审核合规）。</li>
</ul>
<ul>
<li><strong>实时天气</strong>基于 <a href="https://open-meteo.com">Open-Meteo</a>，<strong>完全免费、无需 API key</strong>。</li>
</ul>
<ul>
<li><strong>内置菜谱</strong>源自开源项目 <a href="https://github.com/Anduin2017/HowToCook">HowToCook</a>（The Unlicense，公共领域），共 416 道，离线可用。</li>
</ul>
<hr />
<h2>🛠 技术架构</h2>
<p>┌─────────────────────────────────────────────┐<br />
│ 微信小程序（前端） │<br />
│ 原生 WXML / WXSS / JS，无第三方 UI 框架 │<br />
│ pages/* 13 个页面 · utils/* 工具与数据访问层 │<br />
└───────────────┬─────────────────────────────┘<br />
│ @tencent-ai/workbuddy-cloud-sdk<br />
▼<br />
┌─────────────────────────────────────────────┐<br />
│ WorkBuddy Cloud（后端） │<br />
│ · 身份认证：微信登录 (wx.login + signIn…) │<br />
│ · 数据库：PostgreSQL + PostgREST │<br />
│ · 行级安全：RLS（couple_id 隔离，二次校验） │<br />
│ · 文件存储：相册图片 / 视频 │<br />
└─────────────────────────────────────────────┘</p>
<ul>
<li><strong>前端</strong>：原生微信小程序，UI 采用粉色系主题（<code>#ff6b81</code> 导航条、<code>#fff5f7</code> 背景）。</li>
</ul>
<ul>
<li><strong>后端</strong>：<a href="https://www.workbuddy.cn">WorkBuddy Cloud SDK</a> —— 提供基于 PostgreSQL 的数据库、身份认证与文件存储，接口风格类似 Supabase（<code>cloud.database.from('表').select()</code>）。</li>
</ul>
<ul>
<li><strong>数据隔离</strong>：每一张情侣表都强制带 <code>couple_id</code> 查询条件，并由数据库 <strong>RLS（行级安全）二次校验</strong>，<code>couple_id</code> 必须属于当前用户所在的 <code>couples</code> 行，保证情侣之间互不可见。</li>
</ul>
<ul>
<li><strong>天气</strong>：<code>utils/weather.js</code> 直接请求 Open-Meteo 公开接口，无需后端中转、无需密钥。</li>
</ul>
<ul>
<li><strong>订阅消息</strong>：纪念日、点菜、愿望三类微信订阅消息，模板字段组装见 <code>utils/message.js</code>。</li>
</ul>
<hr />
<h2>📁 目录结构</h2>
<pre>情侣小屋/
├── app.js / app.json / app.wxss # 小程序入口与全局配置
├── project.config.json # 项目配置（含 appid）
├── pages/ # 13 个页面，每个含 .js/.wxml/.wxss/.json
│ ├── index/ # 首页（Hero + 天气 + 最近纪念日 + 功能网格）
│ ├── bind/ # 绑定 / 解绑情侣
│ ├── anniversary/ # 纪念日
│ ├── diary/ # 情侣日记
│ ├── album/ # 情侣相册
│ ├── location/ # 实时位置
│ ├── recipe/ # 点菜做饭（菜谱库）
│ ├── mine/ # 我的
│ ├── weather/ # 天气
│ ├── schedule/ # 日程
│ ├── preference/ # TA 的喜好
│ ├── cycle/ # 经期记录
│ └── wish/ # 愿望清单
├── utils/ # 工具与数据访问层（核心逻辑）
│ ├── cloud.js # 云服务初始化（endpoint + publishableKey）
│ ├── api.js # 数据访问层：所有表的 CRUD 与 RLS 约定
│ ├── features.js # 首页功能入口清单（分组 / 文案）
│ ├── recipes.js # 内置 416 道菜谱（生成产物，勿手改）
│ ├── weather.js # Open-Meteo 天气封装
│ ├── message.js # 订阅消息内容组装
│ └── … # 倒计时、农历、定位、上传、日志等
├── scripts/
│ └── build-recipes-from-howtocook.py # 从 HowToCook 重新生成菜谱库
├── docs/ # 更细的配置文档（域名 / 订阅消息 / 菜谱）
│ ├── 菜谱库说明.md
│ ├── 订阅消息配置指南.md
│ ├── 订阅消息服务端对接.md
│ ├── 平台后台域名配置.md
│ ├── 天气域名配置.md
│ └── 定位地名配置说明.md
└── tests/ # Node 单元测试（18 套件）
├── project.test.js # 全量静态检查（0 错误 0 警告）
└── recipes.test.js 等</pre>
<hr />
<h2>🚀 部署与配置（面向开发者）</h2>
<h3>1. 前置条件</h3>
<ul>
<li><strong>微信开发者工具</strong>（最新版）</li>
</ul>
<ul>
<li>一个<strong>微信小程序 AppID</strong>（在 <a href="https://mp.weixin.qq.com">微信公众平台</a> 注册）</li>
</ul>
<ul>
<li>一个 <strong>WorkBuddy Cloud</strong> 云服务实例（在 WorkBuddy 平台为当前小程序开通云服务，得到 <code>endpoint</code> 与 <code>publishableKey</code>）</li>
</ul>
<h3>2. 获取代码</h3>
<p>git clone &lt;你的仓库地址&gt;<br />
cd &lt;项目目录&gt;</p>
<p><span style="color: #ff6600;">点击下方下载源码程序</span></p>
<h3>3. 配置云服务（必须）</h3>
<p>编辑 <code>utils/cloud.js</code>，把示例值替换成你在 WorkBuddy 云平台开通云服务后得到的配置：</p>
<pre>const publicConfig = {
endpoint: 'https://你的云服务地址',
publishableKey: '你的 publishableKey'
}</pre>
<blockquote><p>⚠️ <strong>切勿把真实的生产 <code>publishableKey</code> 提交到公开仓库</strong>（见下方「开源前检查清单」）。</p></blockquote>
<h3>4. 配置小程序 AppID（必须）</h3>
<p>编辑 <code>project.config.json</code>，将 <code>appid</code> 改为你自己的小程序 AppID：</p>
<p>{ &#8220;appid&#8221;: &#8220;你自己的小程序AppID&#8221; }</p>
<h3>5. 配置服务器域名（必须）</h3>
<p>在 <strong>微信公众平台 → 开发 → 开发管理 → 开发设置 → 服务器域名</strong> 中，把以下域名加入 <strong>request 合法域名</strong>：</p>
<table>
<tbody>
<tr>
<td>域名</td>
<td>用途</td>
</tr>
<tr>
<td><code>https://mp-api.app.workbuddy.host</code></td>
<td>WorkBuddy Cloud 接口</td>
</tr>
<tr>
<td><code>https://api.open-meteo.com</code></td>
<td>实时天气</td>
</tr>
</tbody>
</table>
<blockquote><p>本地调试可在「微信开发者工具 → 详情 → 本地设置」勾选「不校验合法域名」。详细见 <code>docs/平台后台域名配置.md</code>、<code>docs/天气域名配置.md</code>。</p></blockquote>
<h3>6. 配置订阅消息（可选）</h3>
<p>若需要纪念日 / 点菜 / 愿望的微信订阅消息推送，需在公众平台「订阅消息 → 我的模板」中申请对应模板，并把模板 ID 填入 <code>utils/subscribe.config.js</code>。字段组装规则见 <code>utils/message.js</code> 与 <code>docs/订阅消息配置指南.md</code>。</p>
<h3>7. 定位权限（可选）</h3>
<p><code>app.json</code> 已声明 <code>scope.userLocation</code> 与 <code>requiredPrivateInfos</code>（getLocation / chooseLocation）。首次使用定位功能时小程序会向用户申请授权。</p>
<h3>8. 编译运行</h3>
<p>用微信开发者工具打开项目根目录，编译即可预览。上传发布在微信开发者工具或 WorkBuddy 平台完成。</p>
<hr />
<h2>🗄 数据库表结构参考（需在云平台自行创建）</h2>
<p>本仓库提供<strong>数据访问层</strong>（<code>utils/api.js</code>），其中约定了以下表与字段。它们需在你的 WorkBuddy Cloud 实例中创建，并配置对应的 <strong>RLS 行级安全策略</strong>。</p>
<table>
<tbody>
<tr>
<td>表名</td>
<td>关键字段</td>
<td>说明</td>
</tr>
<tr>
<td><code>profiles</code></td>
<td><code>owner_id</code>(用户) · <code>owner_name</code> · <code>avatar_url</code> · <code>couple_id</code> · <code>couple_role</code></td>
<td>用户档案；更新策略只允许改自己的行</td>
</tr>
<tr>
<td><code>couples</code></td>
<td><code>user_a</code> · <code>user_b</code> · <code>invite_code</code> · <code>relation_date</code> · <code>relation_at</code></td>
<td>情侣关系；<code>user_a/user_b</code> 可为空表示待绑定</td>
</tr>
<tr>
<td><code>anniversaries</code></td>
<td><code>couple_id</code> · <code>title</code> · <code>calendar_type</code>(阳/农历) · <code>month</code> · <code>day</code> · <code>start_year</code> · <code>emoji</code> · <code>repeat_yearly</code> · <code>remind_days</code></td>
<td>纪念日</td>
</tr>
<tr>
<td><code>diaries</code></td>
<td><code>couple_id</code> · <code>owner_name</code> · <code>content</code> · <code>images</code>(数组) · <code>mood</code> · <code>weather</code> · <code>location_name</code> · <code>latitude</code> · <code>longitude</code></td>
<td>情侣日记</td>
</tr>
<tr>
<td><code>albums</code></td>
<td><code>couple_id</code> · <code>name</code> · <code>emoji</code> · <code>sort_order</code></td>
<td>相册分类</td>
</tr>
<tr>
<td><code>album_items</code></td>
<td><code>couple_id</code> · <code>album_id</code> · <code>media_type</code> · <code>file_path</code> · <code>thumb_path</code> · <code>width</code> · <code>height</code> · <code>remark</code></td>
<td>相册内容</td>
</tr>
<tr>
<td><code>locations</code></td>
<td><code>couple_id</code> · <code>owner_id</code> · <code>latitude</code> · <code>longitude</code> · <code>address</code> · <code>city</code> · <code>precision_m</code> · <code>address_manual</code></td>
<td>实时位置</td>
</tr>
<tr>
<td><code>recipe_orders</code></td>
<td><code>couple_id</code> · <code>recipe_id</code> · <code>dish_name</code> · <code>note</code> · <code>servings</code> · <code>status</code>(pending/done) · <code>done_at</code> · <code>cooker_id</code></td>
<td>互相点菜</td>
</tr>
<tr>
<td><code>recipes_custom</code></td>
<td><code>couple_id</code> · <code>name</code> · <code>emoji</code> · <code>category</code> · <code>taste</code> · <code>duration</code> · <code>servings</code> · <code>ingredients</code>(JSON) · <code>steps</code>(JSON) · <code>tips</code></td>
<td>双方自定义菜谱</td>
</tr>
<tr>
<td><code>reminders</code></td>
<td><code>couple_id</code> · <code>kind</code> · <code>title</code> · <code>body</code> · <code>link</code> · <code>remind_at</code> · <code>is_read</code></td>
<td>应用内提醒</td>
</tr>
<tr>
<td><code>subscriptions</code></td>
<td><code>owner_id</code> · <code>couple_id</code> · <code>template_id</code> · <code>subscribed</code></td>
<td>订阅消息开关</td>
</tr>
<tr>
<td><code>schedules</code></td>
<td><code>couple_id</code> · <code>title</code> · <code>category</code> · <code>event_date</code> · <code>event_time</code> · <code>repeat_rule</code> · <code>priority</code> · <code>remind_before</code> · <code>is_done</code></td>
<td>日程</td>
</tr>
<tr>
<td><code>preferences</code></td>
<td><code>couple_id</code> · <code>owner_name</code> · <code>category</code> · <code>title</code> · <code>detail</code> · <code>is_favorite</code></td>
<td>对方喜好</td>
</tr>
<tr>
<td><code>wishes</code></td>
<td><code>couple_id</code> · <code>owner_id</code> · <code>title</code> · <code>category</code> · <code>detail</code> · <code>target_date</code> · <code>status</code>(open/done) · <code>notified</code></td>
<td>愿望清单</td>
</tr>
<tr>
<td><code>cycles</code></td>
<td><code>couple_id</code> · <code>owner_name</code> · <code>start_date</code> · <code>end_date</code> · <code>cycle_length</code> · <code>period_length</code> · <code>flow</code> · <code>symptom</code> · <code>note</code></td>
<td>经期记录</td>
</tr>
</tbody>
</table>
<p><strong>安全相关的服务端对象</strong>（被 <code>api.js</code> 调用，但 SQL 不在本仓库，需在云平台以 <code>SECURITY DEFINER</code> 函数提供）：</p>
<ul>
<li><code>find_couple_by_invite(p_code)</code> —— 绑定前绕过 RLS 查找邀请码</li>
</ul>
<ul>
<li><code>accept_invite(p_code)</code> —— 绑定动作，绕过 RLS 写入 <code>couples</code></li>
</ul>
<ul>
<li><code>couples</code> 表的更新策略 <code>couples_update_member</code> —— 仅关系成员可更新</li>
</ul>
<blockquote><p>所有情侣表务必配置 RLS：<strong>每行查询强制 <code>couple_id</code> 条件 + 数据库层二次校验</strong>，且 <code>couple_id</code> 必须属于当前用户所在的 <code>couples</code> 行。这是数据隔离的底线，务必在云控制台核对。</p></blockquote>
<hr />
<h2>🔐 安全与隐私</h2>
<ul>
<li><strong>数据隔离</strong>：情侣数据通过 <code>couple_id</code> 在应用层与数据库层（RLS）双重隔离，情侣之间互不可见。</li>
</ul>
<ul>
<li><strong>凭据管理</strong>：<code>utils/cloud.js</code> 的 <code>publishableKey</code> 属于<strong>可公开</strong>的发布密钥（publishable key），但为安全起见，开源时仍建议替换为占位符或自建实例的密钥；<code>project.config.json</code> 的 <code>appid</code> 务必替换为你自己的。</li>
</ul>
<ul>
<li><strong>位置信息</strong>：仅在用户明确授权后采集，用于展示双方距离与日记定位，不上传无关信息。</li>
</ul>
<hr />
<h2>📖 使用说明</h2>
<p>面向最终用户的详细使用指南见 <strong>docs/使用说明.md</strong>，涵盖：如何登录与绑定情侣、各功能模块怎么用、常见问题。</p>
<hr />
<h2>🧪 测试</h2>
<pre>项目自带 Node 单元测试（纯逻辑层，不依赖微信运行时）：
node --test tests/*.test.js # 运行全部 18 套件
node tests/recipes.test.js # 仅校验菜谱库数据完整性
node tests/project.test.js # 全量静态检查（应 0 错误 0 警告）
测试覆盖：数据访问层字段映射、菜谱库完整性（字段齐全 / id 与菜名唯一 / 分类合法 / 分页逻辑）、首页功能清单一致性、各工具模块等。</pre>
<hr />
<h2>🍳 重新生成菜谱库（可选）</h2>
<pre>内置菜谱来自 <a href="https://github.com/Anduin2017/HowToCook">HowToCook</a>（The Unlicense）。<code>utils/recipes.js</code> 是<strong>生成产物，不要手改</strong>，改了会被重新生成覆盖。如需更新菜谱： git clone --depth 1 https://github.com/Anduin2017/HowToCook.git python scripts/build-recipes-from-howtocook.py &lt;HowToCook路径&gt; utils/recipes.js node tests/recipes.test.js # 生成后务必跑一次校验 生成规则与字段映射详见 <code>docs/菜谱库说明.md</code>。</pre>
<hr />
<h2>📦 开源前检查清单</h2>
<p>将本项目发布到公开仓库前，请确认：</p>
<ul data-type="todo">
<li><code>utils/cloud.js</code> 中的 <code>publishableKey</code> 与 <code>endpoint</code> 已替换为占位符或你自己的实例配置</li>
</ul>
<ul data-type="todo">
<li><code>project.config.json</code> 中的 <code>appid</code> 已替换为你自己的小程序 AppID</li>
</ul>
<ul data-type="todo">
<li>已在 WorkBuddy Cloud 实例中创建上述数据表并配置 RLS 策略（或已在文档中说明）</li>
</ul>
<ul data-type="todo">
<li>微信公众平台已配置服务器域名（<code>mp-api.app.workbuddy.host</code>、 <code>api.open-meteo.com</code>）</li>
</ul>
<ul data-type="todo">
<li>如需订阅消息，已配置模板 ID（见 <code>utils/subscribe.config.js</code>）</li>
</ul>
<ul data-type="todo">
<li>添加 <code>.gitignore</code> 忽略 <code>node_modules/</code>、<code>miniprogram_npm/</code> 等</li>
</ul>
<ul data-type="todo">
<li>在仓库根目录放置 <code>LICENSE</code> 文件</li>
</ul>
<hr />
<h2>📄 许可证与致谢</h2>
<ul>
<li><strong>本项目代码</strong>：采用 <strong>MIT License</strong>（见 <a href="LICENSE">LICENSE</a>）。</li>
</ul>
<ul>
<li><strong>内置菜谱数据</strong>：来自 <a href="https://github.com/Anduin2017/HowToCook">HowToCook</a>，许可为 <strong>The Unlicense</strong>（公共领域），可自由使用、修改、商用，无署名义务。菜谱页底部已标注来源。</li>
</ul>
<ul>
<li><strong>天气数据</strong>：来自 <a href="https://open-meteo.com">Open-Meteo</a>，免费公开气象数据。</li>
</ul>
<ul>
<li>感谢以上开源项目与数据服务，让这个小工具得以快速成型。</li>
</ul>
<p>&nbsp;</p>
<h1>情侣小屋 · 使用说明</h1>
<p>欢迎使用「情侣小屋」！这是一份写给<strong>使用者</strong>的指南，告诉你每个功能怎么玩。开发 / 部署相关内容请看仓库根目录的 <a href="../README.md">README.md</a>。</p>
<hr />
<h2>一、第一次打开</h2>
<ol>
<li>进入小程序后，首页会先展示品牌页和今天的天气。</li>
</ol>
<ol>
<li>点击 <strong>「一键登录」</strong>，用微信授权登录（不会读取你的微信昵称，昵称需要自己设置）。</li>
</ol>
<ol>
<li>登录后，首页会显示你和 TA 的专属卡片。</li>
</ol>
<blockquote><p>没绑定情侣前，大部分情侣功能处于「锁定」状态，先完成绑定即可解锁全部。</p></blockquote>
<hr />
<h2>二、绑定情侣（两个人都要做）</h2>
<p>情侣小屋是<strong>双人共享</strong>的，需要你们两个人都登录后「绑定」到一起。</p>
<p><strong>发起方（你）：</strong></p>
<ol>
<li>在首页点击「生成邀请码」（或在「绑定情侣」页操作）。</li>
</ol>
<ol>
<li>把生成的 6 位邀请码发给 TA，或直接在微信里<strong>分享小程序</strong>给 TA。</li>
</ol>
<p><strong>接受方（TA）：</strong></p>
<ol>
<li>打开小程序并登录。</li>
</ol>
<ol>
<li>进入「绑定情侣」页，输入你发来的邀请码，点击绑定。</li>
</ol>
<ol>
<li>绑定成功后，两人就进入同一个「小屋」了。</li>
</ol>
<p><strong>设置在一起的日子：</strong></p>
<ul>
<li>绑定后，在首页点击「在一起」面板，可以设置你们正式在一起的日期和时间。</li>
</ul>
<ul>
<li>之后首页会实时显示「我们已经在一起 N 天 HH:MM:SS」。</li>
</ul>
<blockquote><p>只有发起邀请的一方可以「解除绑定」。解除后，对方下次进入时会自动清理残留的绑定关系。</p></blockquote>
<hr />
<h2>三、记录我们</h2>
<h3>💗 纪念日</h3>
<ul>
<li>支持<strong>阳历</strong>和<strong>农历</strong>两种日期，可设每年的重复提醒。</li>
</ul>
<ul>
<li>可设置「提前 N 天提醒」，到期会通过应用内提醒 / 微信订阅消息通知你。</li>
</ul>
<ul>
<li>首页会自动显示<strong>最近的下一个纪念日</strong>和倒计时。</li>
</ul>
<h3>📖 情侣日记</h3>
<ul>
<li>写图文日记，记录每天的小事。</li>
</ul>
<ul>
<li>支持：文字、<strong>多张图片</strong>（每行 3 张）、心情、天气、定位标记。</li>
</ul>
<ul>
<li>双方都能看到、一起写，是你们的共同回忆。</li>
</ul>
<h3>📷 情侣相册</h3>
<ul>
<li>可以按主题建<strong>相册分类</strong>（比如「旅行」「美食」「宠物」）。</li>
</ul>
<ul>
<li>支持<strong>一次选多张</strong>批量上传，照片双方实时共享。</li>
</ul>
<ul>
<li>长按可删除。</li>
</ul>
<hr />
<h2>四、一起生活</h2>
<h3>🍳 点菜做饭</h3>
<ul>
<li>内置 <strong>416 道</strong>家常菜谱，带<strong>准确用量</strong>和<strong>分步做法</strong>，离线也能看。</li>
</ul>
<ul>
<li>顶部可按<strong>分类</strong>筛选、按<strong>菜名</strong>搜索，列表滚动到底自动加载更多。</li>
</ul>
<ul>
<li>点开一道菜可看到食材清单、做法步骤、小贴士（含热量）。</li>
</ul>
<ul>
<li><strong>互相点菜</strong>：看到想吃的菜，点「点它」下单，对方会收到通知；做好了可以标记为「已完成」。</li>
</ul>
<ul>
<li><strong>我喜欢吃的</strong>：在菜谱上标记 TA 爱吃的，下次点菜一眼就能看到。</li>
</ul>
<ul>
<li><strong>自定义菜谱</strong>：也可以自己添加拿手菜（带食材、做法）。</li>
</ul>
<h3>📅 日程</h3>
<ul>
<li>记录两人的约定（约会、电影、出差……）。</li>
</ul>
<ul>
<li>可设<strong>提醒提前量</strong>，临近时应用内强提醒。</li>
</ul>
<ul>
<li>支持单次 / 重复规则、优先级标记。</li>
</ul>
<h3>✨ 愿望清单</h3>
<ul>
<li>双方各写各的心愿（想去的地方、想要的东西……）。</li>
</ul>
<ul>
<li>写下的愿望会共享给对方，TA 看到后可以帮你实现；实现后标记为「已完成」。</li>
</ul>
<hr />
<h2>五、关心与日常</h2>
<h3>💝 TA 的喜好</h3>
<ul>
<li>记录对方的喜好，分类如「爱吃」「想去」等。</li>
</ul>
<ul>
<li>点菜时能直接看到 TA 爱吃的菜，贴心不踩雷。</li>
</ul>
<h3>📍 实时位置</h3>
<ul>
<li>授权定位后，可以看到<strong>双方的实时位置和距离</strong>。</li>
</ul>
<ul>
<li>适合「你到哪儿了」「我们差多远」这种场景。</li>
</ul>
<ul>
<li>也可以手动标注一个地点（比如「公司」「家」）。</li>
</ul>
<h3>🌸 经期记录</h3>
<ul>
<li>记录经期开始 / 结束，填写周期长度、经期长度等信息。</li>
</ul>
<ul>
<li>小程序会根据历史<strong>自动学习并预测</strong>下一次时间，方便提前关心。</li>
</ul>
<h3>🌤 天气</h3>
<ul>
<li>首页直接显示今天的天气、温度区间、风力湿度和<strong>穿衣建议</strong>。</li>
</ul>
<ul>
<li>数据来自 Open-Meteo，免费实时更新。</li>
</ul>
<hr />
<h2>六、我的</h2>
<ul>
<li>设置你的<strong>昵称</strong>和<strong>头像</strong>（微信登录不自动带昵称，建议第一时间设置，否则双方会显示为同一个名字）。</li>
</ul>
<ul>
<li>查看 / 管理登录状态。</li>
</ul>
<hr />
<h2>七、常见问题</h2>
<p><strong>Q：为什么我看不到对方写的日记 / 相册？</strong> A：请确认两人都已登录且<strong>成功绑定</strong>到同一个小屋（首页显示双方头像即表示已绑定）。</p>
<p><strong>Q：天气显示不出来？</strong> A：天气需要联网，且小程序后台需配置 <code>api.open-meteo.com</code> 为合法域名（开发者侧配置）。定位失败时会用默认城市兜底。</p>
<p><strong>Q：实时位置不准 / 不显示？</strong> A：首次使用需授权定位权限；在手机系统设置里给小程序开启「位置」权限即可。</p>
<p><strong>Q：邀请码用不了？</strong> A：不能用自己的邀请码绑定；邀请码已被使用或不存在都会提示。重新生成一个即可。</p>
<p><strong>Q：数据存在哪里？安全吗？</strong> A：数据按「情侣关系」隔离存储，只有你们两个人能看到彼此的内容。具体技术说明见 <a href="../README.md">README</a> 的「安全与隐私」章节。</p>
<p><strong>Q：菜谱能自己加吗？</strong> A：可以。在「点菜做饭」里添加自定义菜谱，只有你们两人共享。</p>
<hr />
<p>希望这个小屋，能装下你们的小日子 💗</p>
<h2></h2>
<h2>部分功能截图</h2>
<p><img fetchpriority="high" decoding="async" class="size-full wp-image-2092 aligncenter" title="03ad25f9fb7a3ac46812339ab5981aa4" src="http://cdn.hyclive.cn/dixunblog/2026/10/03ad25f9fb7a3ac46812339ab5981aa4.png" alt="03ad25f9fb7a3ac46812339ab5981aa4" width="556" height="1183" /></p>
<p><img decoding="async" class="size-full wp-image-2093 aligncenter" title="e15a051538830250bb32fcd770a2803f" src="http://cdn.hyclive.cn/dixunblog/2026/10/e15a051538830250bb32fcd770a2803f.png" alt="e15a051538830250bb32fcd770a2803f" width="547" height="1183" /><img decoding="async" class="size-full wp-image-2094 aligncenter" title="e8a1868a31d2b736b63be474de2d8dad" src="http://cdn.hyclive.cn/dixunblog/2026/10/e8a1868a31d2b736b63be474de2d8dad.png" alt="e8a1868a31d2b736b63be474de2d8dad" width="547" height="1189" /></p>
<p><a href="https://www.dixunblog.cn/2091.html">💑 情侣小屋 · Couple Home——原创情侣小程序</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dixunblog.cn/2091.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>auto-video-player v2.1.2（自动连播助手）</title>
		<link>https://www.dixunblog.cn/2078.html</link>
					<comments>https://www.dixunblog.cn/2078.html#respond</comments>
		
		<dc:creator><![CDATA[小编]]></dc:creator>
		<pubDate>Wed, 28 Oct 2026 02:01:06 +0000</pubDate>
				<category><![CDATA[电脑软件]]></category>
		<guid isPermaLink="false">https://www.dixunblog.cn/2078.html</guid>

					<description><![CDATA[<p>auto-video-player v2.1.2（自动连播助手） 自动连播助手是一款 Chromium 内核浏览器（Chrome / Edge）扩展，针对网课平台的课件目录实现自动播放与自动跳转到下一节，支持倍速播放、商业授权等，帮助你无人值守地完成课件连播。 下载安装包 点击下方按钮下载 v2.1.2 安装包（zip，约 136 KB）： ⬇️ 下载 auto-video-player-v2.1.2.zip ⚠️ 原创作品 · 著作权声明 © 2026 胡昱晨 (hu_yu_chen)　保留所有权利。 本扩展为原</p>
<p><a href="https://www.dixunblog.cn/2078.html">auto-video-player v2.1.2（自动连播助手）</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: center;"><img decoding="async" style="max-width: 100%; height: auto; border-radius: 10px; margin: 12px 0;" src="https://cdn.hyclive.cn/dixunblog/2026/09/avp-cover.png" alt="自动连播助手" /></p>
<div class="opu-post">
<h2>auto-video-player v2.1.2（自动连播助手）</h2>
<p>自动连播助手是一款 Chromium 内核浏览器（Chrome / Edge）扩展，针对网课平台的课件目录实现<strong>自动播放</strong>与<strong>自动跳转到下一节</strong>，支持倍速播放、商业授权等，帮助你无人值守地完成课件连播。</p>
<h3>下载安装包</h3>
<p>点击下方按钮下载 v2.1.2 安装包（zip，约 136 KB）：</p>
<p><a href="https://cdn.hyclive.cn/dixunblog/2026/10/auto-video-player-v2.1.2.zip">⬇️ 下载 auto-video-player-v2.1.2.zip</a></p>
<div class="markdown-heading" dir="auto"></div>
<div class="markdown-heading" dir="auto">
<h2 class="heading-element" dir="auto" tabindex="-1">⚠️ 原创作品 · 著作权声明</h2>
<p><a id="user-content-️-原创作品--著作权声明" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#%EF%B8%8F-%E5%8E%9F%E5%88%9B%E4%BD%9C%E5%93%81--%E8%91%97%E4%BD%9C%E6%9D%83%E5%A3%B0%E6%98%8E" aria-label="Permalink: ⚠️ 原创作品 · 著作权声明"></a></div>
<p dir="auto"><strong>© 2026 胡昱晨 (hu_yu_chen)　保留所有权利。</strong></p>
<p dir="auto">本扩展为原创作品，依据 MIT 许可证开源。依据 MIT 条款及《中华人民共和国著作权法》：</p>
<ul dir="auto">
<li><strong>必须保留署名</strong>：任何使用、复制、修改、分发本作品的行为，都必须完整保留 源码中的版权头、<code>LICENSE</code> 文件与 <code>NOTICE</code> 文件中的作者署名；</li>
<li><strong>禁止冒名</strong>：未经书面许可，任何人不得宣称自己为本作品的原始作者， 亦不得以作者名义进行宣传、推广或背书；</li>
<li><strong>修改须标注</strong>：修改后再分发须显著标注「已修改」及修改日期。</li>
</ul>
<p dir="auto">违反上述条款即构成侵权，权利人保留追究法律责任的权利。 完整条款见 <a href="https://github.com/DX-HYC/auto-video-player/blob/master/LICENSE"><code>LICENSE</code></a> 与 <a href="https://github.com/DX-HYC/auto-video-player/blob/master/NOTICE"><code>NOTICE</code></a>。</p>
<p dir="auto">一个通用的浏览器扩展：自动识别网页里正在播放的视频和播放列表，视频暂停时自动续播，播放结束后自动点击下一个视频。</p>
<div class="markdown-heading" dir="auto">
<h2 class="heading-element" dir="auto" tabindex="-1">支持的平台</h2>
<p><a id="user-content-支持的平台" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#%E6%94%AF%E6%8C%81%E7%9A%84%E5%B9%B3%E5%8F%B0" aria-label="Permalink: 支持的平台"></a></div>
<p dir="auto">扩展会按<strong>域名自动判定当前平台</strong>，并只启用该平台的一套策略。各平台可单独启停（见下方「使用」）。</p>
<table>
<thead>
<tr>
<th>平台</th>
<th>域名</th>
<th>处理方式</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>网梯科技</td>
<td><code>webtrn.cn</code></td>
<td><code>.s_point[itemtype="video"]</code> 目录识别 · <code>completestate</code> 完成判定</td>
<td><strong>已冻结</strong></td>
</tr>
<tr>
<td>江西师范大学</td>
<td><code>jxnu.edu.cn</code></td>
<td>百家云播放器接管（无 <code>&lt;video&gt;</code>）· 目录百分比进度</td>
<td>维护中</td>
</tr>
<tr>
<td>通用兜底</td>
<td>其余站点</td>
<td><code>&lt;video&gt;</code> 元素基础连播能力</td>
<td>维护中</td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>为什么按平台隔离</strong>：不同平台的目录结构与完成标记完全不同，早期把各平台的特判都写在 同一条共享路径上，改动一个平台存在波及另一个的风险。现在每个平台的专属逻辑都受 <code>profileAllows(id)</code> 准入保护——在 A 平台上，B 平台的判定分支根本不会执行。</p>
<p dir="auto">「已冻结」表示该平台的逻辑不再随其他平台的开发而改动，任何变更必须先让 <code>tests/selftest_whaty_frozen.js</code> 全绿。</p>
<div class="markdown-heading" dir="auto">
<h2 class="heading-element" dir="auto" tabindex="-1">功能</h2>
<p><a id="user-content-功能" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#%E5%8A%9F%E8%83%BD" aria-label="Permalink: 功能"></a></div>
<ul dir="auto">
<li><strong>平台自动识别</strong>：打开页面即按域名判定平台，面板上会显示当前平台名。</li>
<li><strong>自动识别视频</strong>：扫描页面中所有 <code>&lt;video&gt;</code> 元素，并监听动态加载的新视频（含 iframe 内嵌播放器、Shadow DOM）。</li>
<li><strong>自定义播放器接管</strong>：播放器不在 <code>&lt;video&gt;</code> 里（canvas + WebAudio，如百家云）时，直接从播放器控制条读取进度并模拟起播。</li>
<li><strong>暂停自动续播</strong>：检测到视频被暂停（非播放结束）时，自动恢复播放。</li>
<li><strong>识别待播列表</strong>：用启发式算法解析课程/播放列表，区分 <strong>已播 / 播放中 / 待播</strong> 状态；自动穿透 iframe，识别主页面和子页面中的目录。</li>
<li><strong>自动连播</strong>：当前视频播放结束后，优先点击平台自带的&#8221;下一集&#8221;按钮；没有时按目录顺序点下一个待播项，遇到未展开目录会自动展开父级后再点击。</li>
<li><strong>倍速播放</strong>：可选开关，支持 1.0x ~ 5.0x 多档倍速，视频切换后自动保持，关闭即恢复 1 倍速。</li>
<li><strong>读取视频进度条</strong>：实时显示当前视频播放进度（<code>00:33 / 34:06</code>）和课程总进度百分比。</li>
<li><strong>悬浮面板</strong>：页面右下角实时显示运行状态、视频数量、目录统计，可拖拽、可折叠，支持手动&#8221;立即播放下一集&#8221;，可展开调试日志查看识别过程。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h2 class="heading-element" dir="auto" tabindex="-1">安装步骤</h2>
<p><a id="user-content-安装步骤" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#%E5%AE%89%E8%A3%85%E6%AD%A5%E9%AA%A4" aria-label="Permalink: 安装步骤"></a></div>
<ol dir="auto">
<li>打开 Chrome 或 Edge，地址栏输入 <code>chrome://extensions</code>（Edge 为 <code>edge://extensions</code>）。</li>
<li>打开右上角 <strong>「开发者模式」</strong> 开关。</li>
<li>点击 <strong>「加载已解压的扩展程序」</strong>。</li>
<li>选择本文件夹（<code>auto-video-player</code>，包含 <code>manifest.json</code> 的那一层）。</li>
<li>打开任意视频网站（B站、YouTube、课程网站等），页面右下角会出现悬浮面板即表示已生效。</li>
</ol>
<div class="markdown-heading" dir="auto">
<h2 class="heading-element" dir="auto" tabindex="-1">使用</h2>
<p><a id="user-content-使用" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#%E4%BD%BF%E7%94%A8" aria-label="Permalink: 使用"></a></div>
<ul dir="auto">
<li>面板 / 扩展图标弹窗里可开关：<strong>平台启停</strong>、<strong>总开关</strong>、<strong>进入页面自动起播</strong>、<strong>暂停自动续播</strong>、<strong>播完自动下一集</strong>、<strong>倍速播放</strong>。</li>
<li><strong>平台启停</strong>：可单独关闭某个平台。关闭后，该平台所属域名上扩展完全不动（不建面板、不扫描、不接管），适合在其中某个平台出问题时先隔离该平台、不影响其他平台。重新勾选即可恢复，无需刷新页面。</li>
<li>设置通过 Chrome 同步存储，改动会实时生效到已打开的页面。</li>
<li>若不希望某些页面自动运行，可在扩展详情里通过「网站访问权限」限制。</li>
<li><strong>只在有播放内容的页面工作</strong>：打开白名单内的普通页面（首页、列表页等没有任何视频/播放器特征的网页）时，扩展不会弹出面板、不做任何扫描；页面后续真的出现播放内容才会自动启动。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h2 class="heading-element" dir="auto" tabindex="-1">商业授权（作者必读）</h2>
<p><a id="user-content-商业授权作者必读" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#%E5%95%86%E4%B8%9A%E6%8E%88%E6%9D%83%E4%BD%9C%E8%80%85%E5%BF%85%E8%AF%BB" aria-label="Permalink: 商业授权（作者必读）"></a></div>
<p dir="auto">本插件采用<strong>离线授权码</strong>机制：没有有效授权时，插件在网页上完全不工作（不扫描、不起播、不自动下一集），只在页面右下角显示「🔒 插件未授权」卡片，需联系作者获取授权码。</p>
<p dir="auto">授权为<strong>程序级授权</strong>（v2.1.1 起）：不绑定域名、不绑定平台——授权码只证明&#8221;该用户有权使用本程序&#8221;，激活后<strong>全部功能、全部已支持网站</strong>均可使用。</p>
<p dir="auto"><strong>用户激活（两种方式任选）：</strong></p>
<ol dir="auto">
<li>打开任意已支持的学习网站，页面右下角「🔒 插件未授权」卡片里粘贴授权码 → 点「激活」；</li>
<li>点浏览器工具栏扩展图标，在弹窗顶部的授权卡里输入激活。</li>
</ol>
<p dir="auto">授权码保存在 <code>chrome.storage.sync</code>，随 Chrome/Edge 账号同步，换电脑登录同一账号无需再次激活。</p>
<div class="markdown-heading" dir="auto">
<h2 class="heading-element" dir="auto" tabindex="-1">开发者：改动前请跑自检</h2>
<p><a id="user-content-开发者改动前请跑自检" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#%E5%BC%80%E5%8F%91%E8%80%85%E6%94%B9%E5%8A%A8%E5%89%8D%E8%AF%B7%E8%B7%91%E8%87%AA%E6%A3%80" aria-label="Permalink: 开发者：改动前请跑自检"></a></div>
<p dir="auto">平台越多、判定分支越容易互相影响，因此所有平台相关改动必须通过回归门禁：</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto">
<pre class="notranslate"><code>node tests/run-all.js        # 跑完全部自检，全绿才可合入
</code></pre>
<div></div>
</div>
<table>
<thead>
<tr>
<th>测试文件</th>
<th>覆盖范围</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>tests/selftest_whaty_frozen.js</code></td>
<td><strong>网梯冻结门禁</strong>：黄金用例 + 隔离边界 + 冻结标记完整性</td>
</tr>
<tr>
<td><code>tests/selftest_lessonfilter.js</code></td>
<td>课时/章节标题过滤，含平台隔离断言</td>
</tr>
<tr>
<td><code>tests/selftest_customplayer.js</code></td>
<td>自定义播放器读数与起播（含源码级断言）</td>
</tr>
<tr>
<td><code>tests/selftest_autostart.js</code></td>
<td>首次起播行为仿真（虚拟时钟驱动真实 tick）</td>
</tr>
<tr>
<td><code>tests/selftest_videostate.js</code></td>
<td>video 状态与空壳过滤</td>
</tr>
<tr>
<td><code>tests/selftest_license.js</code></td>
<td>授权算法（SHA-256 向量 / 签名 / 程序级授权 / 过期）+ 授权闸门与待命守卫断言</td>
</tr>
<tr>
<td><code>tests/selftest_robust.js</code></td>
<td>健壮性回归：readCustomPlayer/background 行为测试（DOM/chrome API 桩）+ 修复断言</td>
</tr>
</tbody>
</table>
<p dir="auto">新增平台时的约定：在 <code>PLATFORMS</code> 里登记，用 <code>profileAllows(id)</code> 包住专属分支，并为新平台补一套自检。</p>
<div class="markdown-heading" dir="auto">
<h2 class="heading-element" dir="auto" tabindex="-1">文件说明</h2>
<p><a id="user-content-文件说明" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#%E6%96%87%E4%BB%B6%E8%AF%B4%E6%98%8E" aria-label="Permalink: 文件说明"></a></div>
<table>
<thead>
<tr>
<th>文件</th>
<th>作用</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>manifest.json</code></td>
<td>扩展清单（Manifest V3）</td>
</tr>
<tr>
<td><code>content.js</code></td>
<td>核心逻辑：视频识别、续播、列表识别、连播、悬浮面板</td>
</tr>
<tr>
<td><code>content.css</code></td>
<td>悬浮面板样式</td>
</tr>
<tr>
<td><code>popup.html</code> / <code>popup.js</code></td>
<td>扩展图标弹窗（设置面板）</td>
</tr>
<tr>
<td><code>background.js</code></td>
<td>后台看门狗 Service Worker（<code>chrome.alarms</code> 驱动，解决后台节流）</td>
</tr>
<tr>
<td><code>license.js</code></td>
<td>商业授权：离线授权码签发/校验（content script、popup、生成器三方共用）</td>
</tr>
<tr>
<td><code>tools/gen-license.js</code></td>
<td>授权码生成器（作者本地运行，不随买家分发）</td>
</tr>
<tr>
<td><code>icons/</code></td>
<td>扩展图标</td>
</tr>
<tr>
<td><code>LICENSE</code></td>
<td>MIT 许可证全文</td>
</tr>
<tr>
<td><code>NOTICE</code></td>
<td>知识产权与著作权声明（中英双语）</td>
</tr>
<tr>
<td><code>gen_icons.py</code></td>
<td>图标生成脚本（可删除）</td>
</tr>
</tbody>
</table>
<p dir="auto">上述所有源文件头部均嵌著作权声明，使用时<strong>请勿删除</strong>。</p>
<div class="markdown-heading" dir="auto">
<h2 class="heading-element" dir="auto" tabindex="-1">版权与二次分发</h2>
<p><a id="user-content-版权与二次分发" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#%E7%89%88%E6%9D%83%E4%B8%8E%E4%BA%8C%E6%AC%A1%E5%88%86%E5%8F%91" aria-label="Permalink: 版权与二次分发"></a></div>
<p dir="auto">本项目以 MIT 许可证开源，允许自由使用、复制、修改与分发（含商业用途）， 但<strong>必须</strong>满足以下保留义务：</p>
<ol dir="auto">
<li>保留每个源文件的版权头注释；</li>
<li>保留 <code>LICENSE</code> 与 <code>NOTICE</code> 文件；</li>
<li>保留界面上的作者署名（悬浮面板底部、扩展弹窗底部）；</li>
<li>不得宣称自己为原始作者，或修改后不标注即行分发。</li>
</ol>
<p dir="auto">简洁地说：<strong>代码可以免费用，作者的名字不可以拿掉。</strong></p>
<div class="markdown-heading" dir="auto">
<h2 class="heading-element" dir="auto" tabindex="-1">更新日志</h2>
<p><a id="user-content-更新日志" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97" aria-label="Permalink: 更新日志"></a></div>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v2.1.2（2026-10-27）全栈体检：5 个 bug 修复 + 性能优化</h3>
<p><a id="user-content-v2122026-10-27全栈体检5-个-bug-修复--性能优化" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v2122026-10-27%E5%85%A8%E6%A0%88%E4%BD%93%E6%A3%805-%E4%B8%AA-bug-%E4%BF%AE%E5%A4%8D--%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96" aria-label="Permalink: v2.1.2（2026-10-27）全栈体检：5 个 bug 修复 + 性能优化"></a></div>
<p dir="auto">对全部源码（manifest / background / content / popup / license / shadow_bridge，约 4900 行）做了一次完整通读，修复确认的问题：</p>
<ul dir="auto">
<li><strong>修复 <code>readCustomPlayer()</code> 调用未定义的 <code>pick()</code></strong>：「时长读不到」分支一进去就抛 ReferenceError 被静默吞掉，自定义播放器会被永远当成&#8221;暂停中&#8221;（现有测试都走&#8221;时长读得到&#8221;分支，从未覆盖）。</li>
<li><strong>修复 SPA 路由监听重复注册</strong>：待命再唤醒会叠加 popstate/hashchange 监听、反复包装 <code>pushState</code>、<code>1500ms</code> 轮询 interval 越积越多（且不在 tickTimers 里，待命时清不掉）；改为监听器只装一次 + 轮询纳入 tickTimers 统一管理。</li>
<li><strong>修复 background 标签页注册竞态</strong>：<code>addTab/removeTab</code> 原是&#8221;异步读 storage → 改 → 写回&#8221;，两个标签页几乎同时注册时后写覆盖先写（丢更新），被丢的标签页收不到看门狗唤醒；改为内存数组为单一事实源 + 启动时恢复一次（单 Promise 去重）。</li>
<li><strong>修复 Shadow 桥升级不刷新 matches</strong>：扩展升级后域名清单变了，已注册的 MAIN world 桥不会更新，新域名永远注入不了；改为注册前逐项比对，过期则 <code>updateContentScripts</code>（老内核自动降级为&#8221;注销 → 重注册&#8221;）。</li>
<li><strong>修复面板&#8221;空壳 video&#8221;统计错误</strong>：改用 <code>isRealVideoObj</code> 直接统计，避免页面存在重复 src 的 video 时虚报空壳数量。</li>
<li><strong>健壮性</strong>：<code>chrome.tabs.sendMessage</code> 同时兼容 callback 与 Promise 两种 API 形态；起播复查定时器（3s/8s/16s）重新调度前先作废旧句柄；ping 向孙辈 iframe 转发；倍速下拉存储值不在选项内时动态补选项，<code>updateUI</code> 对面板控件逐个空值保护。</li>
<li><strong>性能</strong>：video 元素清单与目录容器查找加 TTL 缓存，大页面 CPU 占用显著下降。</li>
<li><strong>测试</strong>：新增 <code>tests/selftest_robust.js</code>（44 项），全量回归 <strong>184/184</strong> 通过。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v2.1.1（2026-10-27）授权改为程序级：不绑定域名/平台</h3>
<p><a id="user-content-v2112026-10-27授权改为程序级不绑定域名平台" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v2112026-10-27%E6%8E%88%E6%9D%83%E6%94%B9%E4%B8%BA%E7%A8%8B%E5%BA%8F%E7%BA%A7%E4%B8%8D%E7%BB%91%E5%AE%9A%E5%9F%9F%E5%90%8D%E5%B9%B3%E5%8F%B0" aria-label="Permalink: v2.1.1（2026-10-27）授权改为程序级：不绑定域名/平台"></a></div>
<ul dir="auto">
<li>授权码 payload 去掉域名字段，<strong>同一授权码在任何网站、任何平台都有效</strong>；旧版（v2.1.1 前）签发的带域名码签名仍然有效且同样不再受域名限制，无需重签。</li>
<li>未授权提示卡移除「当前网站域名 + 一键复制」行（程序级授权不再需要域名信息）；popup 授权卡由&#8221;适用网站 xxx&#8221;改为&#8221;程序级授权（全部功能 · 全部已支持网站）&#8221;，引导语由&#8221;把网站域名发给作者&#8221;改为&#8221;联系作者购买授权&#8221;。</li>
<li><code>tools/gen-license.js</code> 的 <code>--domain</code> 改为非必填（传入会被忽略并提示），签发命令简化为 <code>node tools/gen-license.js --days 365 --customer CUST-001</code>；<code>tests/selftest_license.js</code> 升级为 51 项，全量回归 140/140 通过。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v2.1.0（2026-10-27）商业授权 + 修复&#8221;任何网页都蹦出插件&#8221;</h3>
<p><a id="user-content-v2102026-10-27商业授权--修复任何网页都蹦出插件" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v2102026-10-27%E5%95%86%E4%B8%9A%E6%8E%88%E6%9D%83--%E4%BF%AE%E5%A4%8D%E4%BB%BB%E4%BD%95%E7%BD%91%E9%A1%B5%E9%83%BD%E8%B9%A6%E5%87%BA%E6%8F%92%E4%BB%B6" aria-label="Permalink: v2.1.0（2026-10-27）商业授权 + 修复&quot;任何网页都蹦出插件&quot;"></a></div>
<ul dir="auto">
<li><strong>商业授权（未授权不工作）</strong>：新增 <code>license.js</code>，离线授权码方案（无需服务器），未授权时不扫描、不起播、不建面板、不注册看门狗，只在页面右下角显示「🔒 插件未授权」卡片（失败原因 + 作者联系方式 + 授权码输入框）；新增 <code>tools/gen-license.js</code> 作者签发工具（不随买家分发包）与 <code>tests/selftest_license.js</code>（48 项）。</li>
<li><strong>修复&#8221;安装后任何网页都蹦出插件&#8221;</strong>：新增启动状态机（<code>boot → startFull / startProbe / enterStandby</code>）、待命守卫（看门狗消息 / visibilitychange / window load / SPA 路由变化四个通道待命期直接返回）、<code>host_permissions</code> 与 <code>web_accessible_resources</code> 从 <code>&lt;all_urls&gt;</code> 收紧为与 <code>content_scripts</code> 相同的 27 域名白名单。</li>
<li><strong>其它</strong>：<code>escapeHtml()</code> 补全引号转义、面板信息行追加授权状态（客户号 / 到期）；全量自检 <strong>137/137</strong> 通过。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v2.0.1（2026-10-13）平台名称更正</h3>
<p><a id="user-content-v2012026-10-13平台名称更正" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v2012026-10-13%E5%B9%B3%E5%8F%B0%E5%90%8D%E7%A7%B0%E6%9B%B4%E6%AD%A3" aria-label="Permalink: v2.0.1（2026-10-13）平台名称更正"></a></div>
<p dir="auto">纯文案修正，无逻辑改动。</p>
<ul dir="auto">
<li><strong>更正第二个平台的归属名称</strong>：<code>jxnu.edu.cn</code> 是<strong>江西师范大学</strong>的 zjpt 学习平台，此前 <code>content.js</code> 的 <code>PLATFORMS</code>、<code>popup.js</code> 平台清单、README / CHANGELOG 中误写为「江西专技学习网」，现统一更正为「江西师范大学」。</li>
<li>影响面：仅面板 / 弹窗上显示的平台名，以及 <code>platformInfo().name</code> 的诊断输出，不涉及任何平台判定逻辑（<code>detectPlatformByHost()</code> 按域名判定，不受影响）。</li>
<li>网梯冻结区未改动，<code>node tests/run-all.js</code> 全量自检仍为 89/89 通过。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v2.0.0</h3>
<p><a id="user-content-v200" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v200" aria-label="Permalink: v2.0.0"></a></div>
<ul dir="auto">
<li><strong>双平台策略隔离</strong>：新增平台 profile（网梯 / 江西师范大学 / 通用兜底），按域名判定后只启用对应平台的一套策略。此前为 jxnu 加的每一处特判都在共享代码路径上，现在它们有了明确边界——<strong>改 jxnu 不可能再波及网梯</strong>。</li>
<li><strong>前台平台启停</strong>：面板与 popup 新增「平台启停」勾选列表，可单独关闭任一平台；关闭后该平台域名上扩展完全不动（不建面板、不扫描、所有 tick 停手），可随时重新开启。</li>
<li><strong>网梯平台正式冻结</strong>：网梯目录识别与完成判定标注冻结不再改动；新增 <code>tests/selftest_whaty_frozen.js</code>（20 项）作为回归门禁——任何导致网梯行为变化的改动都会在自检阶段报红。</li>
<li>新增统一自检入口 <code>tests/run-all.js</code>（合计 89 项），建议改动合入前必跑。</li>
<li>说明：未识别到的站点归为「通用兜底」，此时两套平台专属逻辑都放行（向后兼容），真正的隔离发生在两个已知平台之间。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.9.3</h3>
<p><a id="user-content-v193" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v193" aria-label="Permalink: v1.9.3"></a></div>
<ul dir="auto">
<li><strong>修复「刷新页面 / 进入视频页后必须人工点一次才会播放」</strong>：起播原先被 <code>autoResume</code>（默认关闭）、<code>cur&lt;=15</code>、<code>刚跳转</code> 三道闸门卡住，停在播放中途（如 25:01）时永不出手。</li>
<li>把「首次起播」与「暂停续播」拆开：新增开关 <strong>进入页面自动起播</strong>（默认开启），负责每一节的第一次播放，播起来即收手，之后用户手动暂停不再打扰；<code>autoResume</code> 维持原语义。</li>
<li>冷启动状态机：接管后 2.5s 出手，3s/8s/16s 三次复查并升级起播方式（media.play → 自带按钮 → canvas → 画面容器 → 空格键），8 分钟 / 6 轮上限。</li>
<li>换课时三重识别信号（容器类名变化 / 本扩展刚跳转 / 播放位置倒退），<strong>同时修复&#8221;跳到下一集却不起播&#8221;</strong>。</li>
<li>版本升级不再偷偷还原用户手动勾选的 <code>autoResume</code>。新增 14 项行为级仿真自检（虚拟时钟驱动真实 tick）。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.9.2</h3>
<p><a id="user-content-v192" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v192" aria-label="Permalink: v1.9.2"></a></div>
<ul dir="auto">
<li><strong>修复「一会播放一会暂停」</strong>：百家云的时间容器本身叫 <code>.duration</code>，导致总时长一直读成 0；同时占位 <code>&lt;audio&gt;</code> 抢占读数通道使播放位置恒为 0 → 误判卡住 → 反复点击播放按钮（而它是播放/暂停开关）。新增 <code>readPlayerClock()</code> 精确读数 + media 可用性判定。</li>
<li>三重防误暂停：UI 显示播放中时判停等待放宽到 90s；读不到位置且在播不出手；复查发现已在播立刻收手。</li>
<li>目录进度不再负责起播（长视频涨幅慢会被误判），交由秒级的自定义播放器心跳接管。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.9.1</h3>
<p><a id="user-content-v191" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v191" aria-label="Permalink: v1.9.1"></a></div>
<ul dir="auto">
<li><strong>修复目录驱动 tick 每 3 秒崩溃</strong>：<code>catalogDriveAnnounced</code>、<code>currentItemPausedByIcon</code> 未声明/未实现，严格模式下抛 ReferenceError，起播级联一行都没执行到。</li>
<li><strong>接管无 <code>&lt;video&gt;</code> 的自定义播放器</strong>（百家云 bplayer：canvas + audio）：新增 DOM 状态读取、伪装状态上报、五级起播级联与事后进度校验；面板可显示真实进度，播完自动下一集。</li>
<li>修复摄像头空壳 <code>&lt;video&gt;</code> 冒充&#8221;正在播放&#8221;堵死兜底路径；新增 24 项自检。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.9.0</h3>
<p><a id="user-content-v190" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v190" aria-label="Permalink: v1.9.0"></a></div>
<ul dir="auto">
<li>起播四级级联（按钮/画面点击/空格键/课时图标）；扫描覆盖 object/embed；桥上报注入时机；复制目录HTML附带播放器区域 DOM。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.8.9</h3>
<p><a id="user-content-v189" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v189" aria-label="Permalink: v1.8.9"></a></div>
<ul dir="auto">
<li>Shadow 桥注入改为 <code>registerContentScripts(world:'MAIN', document_start)</code> 原生注册 + 同步内联双通道，彻底消灭竞态；桥上报容器数量，play() 被拒时改点容器内播放按钮；诊断行显示桥状态。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.8.8</h3>
<p><a id="user-content-v188" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v188" aria-label="Permalink: v1.8.8"></a></div>
<ul dir="auto">
<li>定位到 jxnu zjpt 播放器的真实藏身处：<strong>关闭的 Shadow DOM</strong>（页面底部有播放器控制条但查不到可播 video、iframe 为 0）。新增主世界桥接脚本 <code>shadow_bridge.js</code>，截获 closed shadowRoot、回传 video 状态、下发播放/倍速命令，自动起播与播完自动下一集从此直接控制真实播放器。</li>
<li>修复 v1.8.7 的图标误判（pause-circle 是&#8221;进行中&#8221;不是&#8221;播放中&#8221;，曾导致卡住不起播）；当前课时图标变 check-circle 立即跳下一集。</li>
<li>content script 提前到 document_start（抢装 Shadow 钩子），页面早退判断相应延迟到 init。</li>
<li>manifest 新增 <code>scripting</code> 权限与 web_accessible_resources。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.8.7</h3>
<p><a id="user-content-v187" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v187" aria-label="Permalink: v1.8.7"></a></div>
<ul dir="auto">
<li>修复 jxnu zjpt「不自动播放 / 播完不跳下一集」：页面上的 3 个 video 实为摄像头与人脸检测的空壳元素（无 src、readyState 0），却让脚本误判&#8221;播放器已可控&#8221;，导致按目录进度驱动的自动连播从未生效。现已剔除空壳。</li>
<li>播完判定：目录进度 ≥99.5% 跳转；95% 以上停滞 4 分钟 / 90% 以上停滞 8 分钟也判定播完。</li>
<li>自动起播：进度卡住时（0% 卡 20 秒、中途停 45 秒）点页面播放按钮或当前课时的播放图标；平台显示&#8221;播放中&#8221;时不干预。</li>
<li>新增 <code>fireFullClick()</code> 完整鼠标事件序列，修复 Vue / Ant Design 平台点击无响应。</li>
<li>面板与日志区分「可播视频 / 空壳 video」计数。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.8.6</h3>
<p><a id="user-content-v186" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v186" aria-label="Permalink: v1.8.6"></a></div>
<ul dir="auto">
<li>修复「立即播放下一集」点了没反应：扩展此前命中了自己的面板按钮；现面板带 <code>data-ap-own</code> 标记，页面级扫描一律排除自身元素。</li>
<li>跳转改为目录优先（平台按钮仅兜底）；目录项点击改为点内层容器（适配 Vue 平台事件绑定）。</li>
<li>已完成识别补全：Ant Design <code>anticon-check-circle</code> 图标 + 进度条内联宽度 100%。</li>
<li>自动起播：跳过无媒体源的空壳 video；<code>play()</code> 失败时退回点击页面播放按钮（刚跳转后/开启续播时，30 秒节流）。</li>
<li>诊断：绑定视频输出详情，跳转后 2 秒复查当前项是否切换。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.8.5</h3>
<p><a id="user-content-v185" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v185" aria-label="Permalink: v1.8.5"></a></div>
<ul dir="auto">
<li>回归防护：确保 jxnu 平台适配不影响网梯（webtrn.cn）原有识别与连播。
<ul dir="auto">
<li>课时序号过滤加双重保护：网梯 <code>.s_point[itemtype="video"]</code> 直接跳过过滤；被剔除项若带 <code>openLearnResItem</code>/<code>itemtype=video</code>/<code>completestate</code> 等课时特征则放弃过滤。</li>
<li>本地完成记账改为 10 分钟有效期，避免误标导致漏看课时被永久跳过。</li>
<li>用户主动暂停判定收紧为&#8221;已播超过 15 秒&#8221;，网梯切集时的开头暂停仍会自动起播。</li>
</ul>
</li>
<li>新增 <code>tests/selftest_lessonfilter.js</code> 自检脚本（提取真实源码运行，5 项断言全通过）。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.8.4</h3>
<p><a id="user-content-v184" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v184" aria-label="Permalink: v1.8.4"></a></div>
<ul dir="auto">
<li>修复「复制目录HTML」点了没反应（顶层目录未写入缓冲区）。</li>
<li>修复目录数量不准：混入的章节标题（<code>SPAN.nav-title</code>）被当成课时，已按&#8221;课时文本带序号&#8221;剔除（17 项 → 真实 13 课时）。</li>
<li>新增目录进度百分比解析与「无视频状态连播」兜底：播放器在跨域 iframe 里监听不到 ended 时，改由课时进度（100%）驱动跳下一集；面板改用平台课时进度显示。</li>
<li>日志降噪（状态不变不重复输出）+ 输出 video/iframe 诊断清单。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.8.3</h3>
<p><a id="user-content-v183" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v183" aria-label="Permalink: v1.8.3"></a></div>
<ul dir="auto">
<li>修复 <strong>jxnu zjpt 平台检测数量不对、已播/待播不准、跳转后不自动播放</strong>：
<ul dir="auto">
<li>起播检查 <code>ensurePlaying()</code> 此前只在后台看门狗（每分钟）里执行，前台循环未调用 —— 跳到下一集后新视频停在暂停态。现在前台 3 秒循环、子帧 1.5 秒循环、<code>ping</code> 应答均执行起播检查，跳转后几秒内自动开播。</li>
<li>平台自定义播放器 <code>duration</code> 为 0/未知时不再被跳过（此前表现为&#8221;视频在播但进度 0%&#8221;）；时长未知时面板显示「当前 xx:xx / 未知时长」。</li>
<li>已完成判定新增「目录项百分比进度 ≥ 99.5%」规则（该平台用 0.0%/78.9%/100% 标记状态，不用 class）。</li>
<li>新增运行时本地完成记账：视频播完或自动跳转后，即使平台完成状态延迟 / URL 与高亮不变，也按目录顺序持续推进，不会反复跳回同一集。</li>
<li>面板视频数按 <code>src</code> 去重；前台手动暂停（未开自动续播）会被记住，起播逻辑不抢启。</li>
<li>新增覆盖常见第三方视频云播放器域名（bokecc / polyv / aliyuncs / qiniudns / cdnhwc1·2），若播放器嵌在跨域 iframe 里也能监听播放结束；页面加载后输出 iframe 地址清单到日志，便于后续精准适配。</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.8.1</h3>
<p><a id="user-content-v181" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v181" aria-label="Permalink: v1.8.1"></a></div>
<ul dir="auto">
<li><strong>修复「浏览器最小化 / 切到后台后不自动播放、不自动跳转」</strong>（后台定时器节流导致）：
<ul dir="auto">
<li><strong>根因</strong>：Chrome 对后台标签页实施定时器节流（隐藏一段时间后 <code>setInterval</code> 被压缩到每分钟一次）。而 <code>pickBestFrameForNext</code> / <code>pickBestList</code> 用 12 秒有效期过滤 <code>frameStates</code>，另有 15 秒清理定时器直接 <code>delete frameStates[k]</code> —— 后台时帧状态被判为过期或删除，<code>pickBestFrameForNext()</code> 返回 <code>null</code>，日志打出「未找到有效目录帧」，于是跳不动；回到前台定时器恢复，积压任务一起执行，表现为&#8221;打开浏览器才继续&#8221;。</li>
<li><strong>时效判定按可见性放宽</strong>：新增 <code>frameStateMaxAge()</code>，页面不可见时有效期从 15 秒放宽到 5 分钟（目录结构不会因后台而改变），前台保持严格；清理定时器同步放宽。</li>
<li><strong>调度改用消息驱动</strong>：<code>ended</code> 到达时先 <code>analyzeAndReport()</code> + <code>broadcastDown(ping)</code> 实时拉起子帧上报（<code>postMessage</code> 投递不受定时器节流影响），并抽出统一入口 <code>dispatchNext()</code>；选不到目录帧时安排一次重试。</li>
<li><strong>新增后台看门狗</strong>：新增 <code>background.js</code>（Service Worker）+ <code>chrome.alarms</code>，每分钟唤醒一次并向已注册标签页发消息，内容是 <code>scanVideos → analyzeAndReport → ensurePlaying → 必要时补跳下一集</code>。消息投递会立即执行页面脚本，不受节流限制。无需 <code>tabs</code> 权限，仅用已有的 <code>storage</code> 加 <code>alarms</code>。</li>
<li><strong>被动暂停自动恢复</strong>：区分&#8221;用户主动暂停&#8221;与&#8221;后台被动暂停&#8221;。页面不可见时发生的暂停（浏览器节流或平台防挂机检测）会自动恢复播放，用户在前台的主动暂停不受影响。</li>
<li><strong>保证下一集真的起播</strong>：新增 <code>ensurePlaying()</code>，视频刚开始播放（<code>currentTime &lt; 15</code>）却处于暂停时自动尝试启动（优先模拟点击播放按钮，<code>play()</code> 兜底），避免跳过去之后卡住不动。</li>
<li><strong>恢复可见即时补齐</strong>：<code>visibilitychange</code> 回到前台时立即刷新并检查是否有遗漏的跳转。</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.8.0</h3>
<p><a id="user-content-v180" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v180" aria-label="Permalink: v1.8.0"></a></div>
<ul dir="auto">
<li>新增支持 <strong>江西师范大学（zjpt 学习平台）</strong> <code>zjpt-web.jxnu.edu.cn</code>：
<ul dir="auto">
<li><code>manifest.json</code> 与已知平台列表加入 <code>jxnu.edu.cn</code>，扩展会在该平台正常注入。</li>
</ul>
</li>
<li><strong>修复通用平台无法连播的根本问题</strong>：<code>hasRealCatalogInList</code> / <code>clickNext</code> 原先写死只认网梯平台的 <code>.s_point[itemtype="video"]</code>，导致任何新平台都会被判定为&#8221;无目录&#8221;而拒绝跳转。现改为通用判断（排除播放器控件 + 课时标题长度校验），网梯平台保留专属快速路径。</li>
<li><strong>新增 SPA 路由变化监听</strong>：Vue/React 类平台（如江西师范大学）切换视频不刷新页面，现通过 <code>popstate</code> / <code>hashchange</code> / 劫持 <code>pushState</code>·<code>replaceState</code> + 定时轮询感知 URL 变化，自动重新扫描视频与目录，并重置上一轮跳转锁。</li>
<li><strong>目录识别增强</strong>：新增 Element UI / Ant Design / 中文拼音类名目录容器（<code>.el-menu</code>、<code>.ant-menu</code>、<code>.course-list</code>、<code>kecheng</code>、<code>mulu</code>、<code>zhangjie</code>、<code>keshi</code> 等）。</li>
<li><strong>新增&#8221;同级重复结构&#8221;兜底识别</strong>：目录项无典型 class、无时长文本时（SPA 平台常见），按 tag + 首类名分组识别。</li>
<li><strong>播放器控件过滤</strong>：新增 <code>isPlayerControl()</code>，统一排除位于 <code>video / .player / .jwplayer / .vjs-control-bar</code> 等播放器容器内的元素，避免画质、时长、进度条被误当课时。</li>
<li><strong>中文完成状态识别增强</strong>：新增「已学习 / 已修完 / 已通过 / 完成学习」等文案与 <code>yixue</code>、<code>xuewan</code> 等拼音类名。</li>
<li><strong>中文&#8221;下一集&#8221;按钮识别</strong>：新增按可见文本匹配「下一节 / 下一讲 / 下一集 / 下节课 / 下一个」，并排除「下一页」等分页按钮。</li>
<li>启动日志新增平台判定输出（已知平台 / 是否存在 video 元素），便于排查注入问题。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.7.9</h3>
<p><a id="user-content-v179" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v179" aria-label="Permalink: v1.7.9"></a></div>
<ul dir="auto">
<li>新增<strong>倍速播放</strong>功能：
<ul dir="auto">
<li>默认 1 倍速，最高 5 倍速，档位：1.0x / 1.25x / 1.5x / 2.0x / 2.5x / 3.0x / 4.0x / 5.0x。</li>
<li>悬浮面板新增「倍速播放」开关 + 「播放速度」下拉选择；扩展图标弹窗同样支持设置。</li>
<li>默认<strong>关闭</strong>（<code>speedEnabled: false</code>），避免与平台自带倍速冲突或触发违规检测；开启后所有帧的视频统一应用倍速。</li>
<li>视频切换（重新播放）时自动重新应用倍速，防止播放器重置；设置实时同步到所有已打开页面，关闭开关即恢复 1 倍速。</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.7.8</h3>
<p><a id="user-content-v178" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v178" aria-label="Permalink: v1.7.8"></a></div>
<ul dir="auto">
<li>修复「任何网页都触发扩展、很麻烦」：
<ul dir="auto">
<li><code>manifest.json</code> 的 <code>content_scripts.matches</code> 从 <code>&lt;all_urls&gt;</code> 收紧为常见视频/网课平台清单（网梯、B站、优酷、爱奇艺、腾讯视频、网易云课堂、中国大学MOOC、学堂在线、智慧树、慕课网、超星、网易公开课、腾讯课堂、高顿、抖音、快手、虎牙、斗鱼、YouTube 等），未列入的网站完全不会注入。</li>
<li><code>content.js</code> 顶层 frame 启动时再次校验：不在已知平台域名 <strong>且</strong> 没有 <code>&lt;video&gt;</code> 元素时，整个 IIFE 立即 <code>return</code>，不绑定任何事件、不创建面板、不扫描 DOM。</li>
<li>子 frame 仍正常工作（依赖父 frame 的 postMessage 唤醒），但只在匹配的网课平台子页面里才会注入。</li>
<li>调整清单：若遇到扩展在某个网课平台未生效，可编辑 <code>manifest.json</code> 的 <code>matches</code> 加上对应域名后重新加载。</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.7.7</h3>
<p><a id="user-content-v177" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v177" aria-label="Permalink: v1.7.7"></a></div>
<ul dir="auto">
<li>修复「仍未按顺序播放，且播完最后一个视频后不会回头补齐漏看课时」：
<ul dir="auto">
<li><code>findNextItem</code> 改为<strong>自动补齐模式</strong>：自动连播时按目录顺序取<strong>第一个未完成课时</strong>，不再局限于「当前项之后」。这样即使前面有漏掉的视频，播完后也会回头继续播放，直到课程全部完成。</li>
<li>手动点击「立即播放下一集」仍优先取当前项之后的下一个未完成课时，保持操作预期；当前项之后没有待播项时，再兜底取全局第一个未完成项。</li>
<li><code>clickNext</code> 增加 <code>autoEnded</code> 参数，自动结束事件与手动按钮使用不同策略，并在跨帧广播中传递 <code>manual</code> 标志。</li>
<li>全部课时完成后日志输出「全部课时已完成」，避免无意义重复跳转。</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.7.6</h3>
<p><a id="user-content-v176" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v176" aria-label="Permalink: v1.7.6"></a></div>
<ul dir="auto">
<li>修复「v1.7.5 仍未拦住播放器帧乱点 / 当前项识别错位」：
<ul dir="auto">
<li><code>clickNext</code> 目录有效性判断由「leafCount ≥ 3」改为「本帧必须含 <code>.s_point[itemtype="video"]</code>」。网梯内容帧（播放器控件）即便识别出 3 项也不算目录，必须让顶层调度到真正拥有 <code>.s_learnlist</code> 的目录帧。</li>
<li><code>pickBestFrameForNext</code> 同样过滤掉不含 <code>.s_point</code> 的无效帧，委派的目标帧一定是真实目录帧。</li>
<li><code>analyzeList</code> 当前项识别顺序改为 <strong>URL 匹配优先</strong>，再退回到 <code>s_pointerct</code> 类标记。原因：平台可能在目录上保留对某一项的 <code>s_pointerct</code> 高亮，但用户实际播放的是另一项（URL 不同），此时按 <code>s_pointerct</code> 找当前项会指错，导致下一集跳过多个真实未看项。</li>
<li>行为：用户从 leaf[N]（未标 <code>s_pointerct</code>）播放结束 → 用 URL 识别为 leaf[N] → 下一集严格取 leaf[N+1] 之后的第一个非已完成项。</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.7.5</h3>
<p><a id="user-content-v175" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v175" aria-label="Permalink: v1.7.5"></a></div>
<ul dir="auto">
<li>修复「播完下一集仍不按顺序乱跳」：
<ul dir="auto">
<li>顶层统一调度：视频结束后由顶层挑选「目录项最多」的帧执行下一集，避免多个 iframe 同时点击导致乱跳；</li>
<li>子帧目录项不足 3 个时不再处理下一集，防止播放器画质选择（全高清等）被误当目录点击；</li>
<li>网梯平台直接调用 <code>openLearnResItem(itemId, 'video', null, title)</code>，比点击元素更稳定；</li>
<li>新增全局 8 秒跳转锁，防止重复触发下一集。</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.7.4</h3>
<p><a id="user-content-v174" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v174" aria-label="Permalink: v1.7.4"></a></div>
<ul dir="auto">
<li>修复「播完跳转下集不按顺序、中间跳过的视频被误认为已看完」：
<ul dir="auto">
<li>目录状态判定只信任平台真实标记（<code>completestate="1"</code>、<code>s_pointerct</code> 等），不再把当前项之前的所有课时默认标为已播；</li>
<li>修复后：跳过未看的视频仍保持「待播」，课程总进度与待播数量与平台实际状态一致；</li>
<li><code>findNextItem</code> 严格按 DOM 顺序取当前项的下一个非已完成课时，避免跳集。</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.7.3</h3>
<p><a id="user-content-v173" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v173" aria-label="Permalink: v1.7.3"></a></div>
<ul dir="auto">
<li>修复「点击播放下一集仍跳回当前正在播放的视频」：
<ul dir="auto">
<li><code>findWangtiCatalog</code> 移除 <code>.learn-menu</code>（左侧导航）误命中，只认 <code>#learnMenu</code> / <code>.s_learnlist</code> 等真正的课程目录；</li>
<li>目录容器搜索改为跨所有同域 iframe 取评分最高者，<code>.s_point[itemtype="video"]</code> 目录永远优先，左侧导航强烈减分；</li>
<li>移除「兜底点击随机元素」逻辑（此前顶层帧找不到下一节时会乱点顶层元素，导致跳到当前视频）；</li>
<li>「下一集」支持跨帧委托：没有目录的帧返回失败后，由顶层广播给拥有目录的子帧执行精准跳转，子帧成功即停止向下广播。</li>
</ul>
</li>
<li>日志新增帧标识（<code>TOP</code> / <code>IFRAME|页面名</code>），便于定位问题帧。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.7.2</h3>
<p><a id="user-content-v172" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v172" aria-label="Permalink: v1.7.2"></a></div>
<ul dir="auto">
<li>修复 <code>collectItems</code> 中 <code>const candidates</code> 被重新赋值导致的 <code>Assignment to constant variable</code> 错误（该错误使目录分析中断）。</li>
<li>目录识别优先使用网梯平台专用 <code>findWangtiCatalog</code>，避免把左侧「课件/课程简介/学习进度」导航菜单当成课程目录。</li>
<li>在启发式评分里：包含 <code>.s_point[itemtype="video"]</code> 大幅加分，包含 <code>.learn-menu-cell</code> 大幅减分。</li>
<li><code>collectItems</code> 增加过滤，排除左侧导航、播放器控件（高清/标清等）等非课时项。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.7.1</h3>
<p><a id="user-content-v171" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v171" aria-label="Permalink: v1.7.1"></a></div>
<ul dir="auto">
<li>加入设置版本迁移：升级后强制把「暂停自动续播」重置为关闭，避免旧设置残留导致继续触发平台警告。</li>
<li>进一步增强网梯平台目录识别：新增 <code>findWangtiCatalog</code>，直接命中 <code>#learnMenu</code> / <code>.s_learnlist</code> / <code>[class*="learnlist"]</code>，并以包含最多 <code>.s_point[itemtype="video"]</code> 的 <code>div</code> 作为兜底。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.7</h3>
<p><a id="user-content-v17" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v17" aria-label="Permalink: v1.7"></a></div>
<ul dir="auto">
<li><strong>风险规避</strong>：默认关闭「暂停自动续播」，移除直接调用 <code>video.play()</code> 的逻辑，改为仅在开启开关时模拟点击播放按钮。</li>
<li>降低视频进度上报频率（500ms → 2000ms）和子帧 ping 频率（1s → 3s），减少被平台检测为异常播放的可能性。</li>
<li>面板与弹窗对「暂停自动续播」增加 ⚠️ 风险提示。</li>
<li>修复目录识别为 0 项：增加对网梯平台 <code>#learnMenu</code> / <code>.s_learnlist</code> 的直接命中与兜底选择。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.6</h3>
<p><a id="user-content-v16" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v16" aria-label="Permalink: v1.6"></a></div>
<ul dir="auto">
<li>针对网梯 / whaty-learnspace 课程平台做精准适配：
<ul dir="auto">
<li>目录叶子项直接识别 <code>.s_point[itemtype="video"]</code>，避免取到内部 <code>.wrap</code> 导致 class/状态丢失；</li>
<li>已完成状态读取 <code>completestate="1"</code> 属性；</li>
<li>当前播放中状态识别 <code>s_pointerct</code> 类；</li>
<li>当前课时通过 <code>onclick</code> 中的 <code>itemId</code> 与 URL 中的 <code>params.itemId</code> 前 8 位匹配，解决无 <code>&lt;a href&gt;</code> 时无法定位当前项的问题。</li>
</ul>
</li>
<li>课程总进度计算更准确：1 个已完成 + 1 个播放中 + 11 个待播 = 13 项。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.5</h3>
<p><a id="user-content-v15" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v15" aria-label="Permalink: v1.5"></a></div>
<ul dir="auto">
<li>目录识别只保留“带播放时长的视频课时”，剔除「第X讲」「章节」等非视频项，避免把 15 项误算成视频数。</li>
<li>当前课时定位增强：支持从目录项的 <code>onclick</code> / <code>data-*</code> 属性中提取真实跳转链接，再与当前 iframe URL 匹配。</li>
<li>面板新增「复制日志」「复制目录HTML」按钮，可一键复制识别结果与目录 HTML，方便针对性适配。</li>
<li>调试日志改为输出全部课时的文本、类名、完成标记、跳转链接。</li>
</ul>
<div class="markdown-heading" dir="auto">
<h3 class="heading-element" dir="auto" tabindex="-1">v1.4</h3>
<p><a id="user-content-v14" class="anchor" href="https://github.com/DX-HYC/auto-video-player/tree/master#v14" aria-label="Permalink: v1.4"></a></div>
<ul dir="auto">
<li>修复“所有课时都识别为已播、课程总进度 100%”的误报：
<ul dir="auto">
<li>已完成检测更严格，避免 <code>checkbox</code> / <code>checked</code> 等子元素误匹配；</li>
<li>新增“URL 匹配”定位当前课时，适配 whaty / webtrn 类课程平台；</li>
<li>新增页面标题、章节标题匹配当前课时；</li>
<li>当全部课时都被标记为已完成、但当前视频尚未结束时，自动判定为误报并清空已完成标记。</li>
</ul>
</li>
<li>调试日志默认输出目录分析详情，方便定位识别问题。</li>
</ul>
</div>
<p><a href="https://www.dixunblog.cn/2078.html">auto-video-player v2.1.2（自动连播助手）</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dixunblog.cn/2078.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>OPU(开源项目自动化提交程序) — 一键把项目发布到 GitHub / Gitee</title>
		<link>https://www.dixunblog.cn/2023.html</link>
					<comments>https://www.dixunblog.cn/2023.html#respond</comments>
		
		<dc:creator><![CDATA[小编]]></dc:creator>
		<pubDate>Wed, 16 Sep 2026 09:27:07 +0000</pubDate>
				<category><![CDATA[电脑软件]]></category>
		<guid isPermaLink="false">https://www.dixunblog.cn/2023.html</guid>

					<description><![CDATA[<p>opu 开源项目自动化提交程序 — 一键把项目发布到 GitHub / Gitee 简介 opu 是一个开源项目自动化发布工具，帮助你将在 WorkBuddy 中开发完成的项目，通过简单的命令行交互，一键完成 GitHub / Gitee 仓库的创建、README 生成与代码推送。告别繁琐的手动配置，让开源发布像喝水一样简单。 核心特性 一键发布：自动完成远程仓库创建、代码提交与推送，同时发布到 GitHub 和 Gitee 可视化控制台（GUI）：内置浏览器界面，opu gui 或双击启动器即可点点按钮完成发布，</p>
<p><a href="https://www.dixunblog.cn/2023.html">OPU(开源项目自动化提交程序) — 一键把项目发布到 GitHub / Gitee</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: center;"><img decoding="async" style="max-width: 100%; height: auto; border-radius: 10px; margin: 12px 0;" src="https://cdn.hyclive.cn/dixunblog/2026/09/opu-cover.png" alt="opu" /></p>
<div class="opu-post">
<h1>opu</h1>
<blockquote><p>开源项目自动化提交程序 — 一键把项目发布到 GitHub / Gitee</p></blockquote>
<p><img decoding="async" src="https://img.shields.io/badge/version-0.1.0-blue" alt="Version" /> <img decoding="async" src="https://img.shields.io/badge/license-MIT-green" alt="License" /> <img decoding="async" src="https://img.shields.io/badge/node-%3E%3D18-brightgreen" alt="Node" /> <img decoding="async" src="https://img.shields.io/badge/platform-GitHub%20%7C%20Gitee-orange" alt="Platform" /></p>
<h2>简介</h2>
<p><strong>opu</strong> 是一个开源项目自动化发布工具，帮助你将在 WorkBuddy 中开发完成的项目，通过简单的命令行交互，一键完成 GitHub / Gitee 仓库的创建、README 生成与代码推送。告别繁琐的手动配置，让开源发布像喝水一样简单。</p>
<h2>核心特性</h2>
<ul>
<li><strong>一键发布</strong>：自动完成远程仓库创建、代码提交与推送，同时发布到 GitHub 和 Gitee</li>
<li><strong>可视化控制台（GUI）</strong>：内置浏览器界面，<code>opu gui</code> 或双击启动器即可点点按钮完成发布，无需记命令</li>
<li><strong>智能 README 生成</strong>：基于 <code>.opu.json</code> 配置，自动生成专业的 README 文档（支持 AI 增强）</li>
<li><strong>项目体检</strong>：内置 <code>doctor</code> 命令，检查本地环境与配置是否就绪</li>
<li><strong>配置向导</strong>：交互式初始化项目配置，无需手写 JSON</li>
<li><strong>模板支持</strong>：内置 CHANGELOG、CONTRIBUTING 等开源标配文档模板</li>
<li><strong>WorkBuddy 深度集成</strong>：专为 WorkBuddy 开发流程设计，无缝衔接</li>
</ul>
<h2>适用场景</h2>
<ul>
<li>在 WorkBuddy 中完成项目开发，需要快速发布到 GitHub / Gitee</li>
<li>需要同时维护 GitHub 和 Gitee 双平台仓库</li>
<li>希望自动化生成 README 和开源文档</li>
<li>批量管理多个开源项目的发布流程</li>
</ul>
<h2>快速开始</h2>
<h3>环境要求</h3>
<ul>
<li>Node.js &gt;= 18</li>
<li>Git 已安装并配置好全局用户信息</li>
<li>GitHub / Gitee 账号及对应的 Personal Access Token</li>
</ul>
<h3>安装</h3>
<pre><code class="language-bash"># 克隆项目
git clone https://github.com/2657449167/opu.git
cd opu

# 安装依赖
npm install</code></pre>
<h3>启动（命令行）</h3>
<pre><code class="language-bash">node bin/opu.js --help</code></pre>
<p>或链接为全局命令后直接用：</p>
<pre><code class="language-bash">npm link
opu --help</code></pre>
<h2>可视化控制台（GUI）— 推荐给不想敲命令的用户</h2>
<p>不想记命令？opu 内置了一个<strong>本地可视化发布控制台</strong>，点点按钮就能完成配置与发布，无需再和助手对话。</p>
<p><strong>两种启动方式：</strong></p>
<ol>
<li><strong>双击启动器</strong>（最简单）：直接双击项目根目录里的</li>
</ol>
<ul>
<li><code>启动可视化发布工具.bat</code>（中文名，双击即用）</li>
<li>或 <code>opu-gui.bat</code>（英文等价）</li>
</ul>
<ol>
<li><strong>命令行启动</strong>：</li>
</ol>
<p>&#8220;<code>bash    node bin/opu.js gui      # 启动并自动打开浏览器    node bin/opu.js gui --no-open   # 不自动打开浏览器，手动访问 http://127.0.0.1:&lt;端口&gt;    node bin/opu.js gui --port 8080 # 指定端口    </code>&#8220;</p>
<p>启动后控制台会自动打开浏览器（仅绑定 <code>127.0.0.1</code>，本地安全）。界面包含三个模块：</p>
<ul>
<li><strong>发布项目</strong>：选目录 → 自动识别技术栈 → 编辑项目信息 → AI 生成/手动编辑 README 与教程 → 勾选平台一键发布，全程带实时日志。</li>
<li><strong>全局配置</strong>：填写 GitHub / Gitee 令牌、DeepSeek Key、著作权归属人；支持「测试连接」即时校验。</li>
<li><strong>环境检查</strong>：一键检查 Git、各平台 Token、AI 是否就绪。</li>
</ul>
<blockquote><p>所有数据仅保存在你本机（<code>~/.opu/config.json</code> 与项目内 <code>.opu.json</code>），不上传任何服务器。</p></blockquote>
<h2>使用教程（命令行）</h2>
<h3>第一步：初始化配置</h3>
<pre><code class="language-bash">opu init</code></pre>
<p>按照交互提示，填写项目名称、描述、仓库地址等信息，程序会自动生成 <code>.opu.json</code> 配置文件。</p>
<h3>第二步：环境检查</h3>
<pre><code class="language-bash">opu doctor</code></pre>
<p>检查本地 Git 配置、GitHub/Gitee Token 是否有效、Node 版本是否满足要求。</p>
<h3>第三步：配置平台信息</h3>
<pre><code class="language-bash">opu config</code></pre>
<p>配置 GitHub / Gitee 的 owner、repo 信息以及访问 Token（也可用 <code>opu config set tokens.github &lt;token&gt;</code> 直接写）。</p>
<h3>第四步：发布项目</h3>
<pre><code class="language-bash">opu publish</code></pre>
<p>程序将自动完成以下操作：</p>
<ol>
<li>读取 <code>.opu.json</code> 配置</li>
<li>生成 README.md 及配套文档</li>
<li>在 GitHub / Gitee 创建远程仓库</li>
<li>初始化 Git 仓库并提交代码</li>
<li>推送到远程仓库</li>
</ol>
<h3>同步更新</h3>
<pre><code class="language-bash">opu sync</code></pre>
<p>当本地代码有更新时，使用该命令将最新代码同步推送到两个远程仓库。</p>
<h2>配置说明</h2>
<p>项目使用 <code>.opu.json</code> 作为配置文件，核心字段说明：</p>
<pre><code class="language-json">{
  "name": "项目名称（仓库名）",
  "tagline": "一句话定位",
  "description": "详细描述",
  "features": ["特性列表"],
  "techStack": ["技术栈"],
  "license": "开源协议",
  "topics": ["话题标签"],
  "platforms": {
    "github": { "owner": "GitHub用户名", "repo": "仓库名" },
    "gitee": { "owner": "Gitee用户名", "repo": "仓库名" }
  },
  "entryPoints": ["入口命令"],
  "requirements": { "node": "&gt;=18" },
  "ai": {
    "enabled": true,
    "extraContext": "AI 生成 README 时的额外上下文"
  },
  "docs": {
    "readme": "手动指定 README 内容（留空则自动生成）",
    "tutorial": "使用教程原文"
  }
}</code></pre>
<p>参考示例：<code>examples/.opu.json</code> 和 <code>examples/auto-video-player.opu.json</code>。</p>
<h2>常见问题 FAQ</h2>
<h3>Q1: 提示 &#8220;GitHub Token 无效&#8221; 怎么办？</h3>
<p>请确认 Token 具有 <code>repo</code> 权限，并在 <code>config</code> 命令中正确配置。Token 可以在 GitHub Settings → Developer settings → Personal access tokens 中生成。</p>
<h3>Q2: 发布时提示仓库已存在？</h3>
<p>如果远程仓库已存在，opu 会尝试直接推送。若仓库为空且无冲突，推送会成功；如有冲突，请先手动处理或删除远程仓库后重试。</p>
<h3>Q3: 如何只发布到 GitHub 而不发布到 Gitee？</h3>
<p>在 <code>.opu.json</code> 的 <code>platforms</code> 中删除 <code>gitee</code> 配置，或在 <code>config</code> 命令中跳过 Gitee 设置即可。</p>
<h3>Q4: AI 生成的 README 不满意怎么办？</h3>
<p>可以在 <code>.opu.json</code> 的 <code>docs.readme</code> 字段中手动填写你想要的 README 内容，程序将优先使用手动填写的内容。</p>
<h3>Q5: 支持私有仓库吗？</h3>
<p>支持。在 <code>.opu.json</code> 的 <code>platforms</code> 中为对应平台设置 <code>"visibility": "private"</code> 即可。</p>
<h2>路线图</h2>
<ul>
<li>[x] 可视化控制台（GUI）— 浏览器界面，点点按钮即可发布</li>
<li>[x] 自动生成 README / 使用教程 / CHANGELOG</li>
<li>[x] 内置知识产权归属（LICENSE + NOTICE，禁止移除/冒名署名）</li>
<li>[ ] 支持更多代码托管平台（GitLab、Bitbucket）</li>
<li>[ ] 集成 CI/CD 发布流程</li>
<li>[ ] 支持多项目批量发布</li>
</ul>
<h2>贡献指南</h2>
<p>欢迎提交 Issue 和 Pull Request！</p>
<ol>
<li>Fork 本仓库</li>
<li>创建你的特性分支 (<code>git checkout -b feature/AmazingFeature</code>)</li>
<li>提交你的改动 (<code>git commit -m 'Add some AmazingFeature'</code>)</li>
<li>推送到分支 (<code>git push origin feature/AmazingFeature</code>)</li>
<li>提交 Pull Request</li>
</ol>
<p>开发调试时可设置环境变量 <code>OPU_DEBUG=1</code> 查看详细日志。</p>
<h2>开源协议</h2>
<p>本项目基于 <a href="LICENSE">MIT License</a> 开源，欢迎自由使用和二次开发。</p>
</div>
<h2>更新日志</h2>
<h1>更新日志</h1>
<h2>v0.1.0 &#8211; 2026-09-08</h2>
<ul>
<li>新增 <code>license_texts</code> 命令，支持查看常用开源许可证文本。</li>
<li>新增 <code>publish</code> 命令，一键把项目发布到 GitHub / Gitee（支持新建与更新两种模式）。</li>
<li>新增 AI 模块，自动生成 README / 使用教程 / 更新日志（默认 DeepSeek，可关闭）。</li>
<li>新增配置模块与 <code>.opu.json</code> 项目配置，支持「同一项目原地更新、不新建仓库」的判定。</li>
<li>新增 Git 集成，支持仓库操作、状态检测与提交。</li>
<li>新增 Gitee 与 GitHub 平台对接，双平台并行发布。</li>
<li>新增可视化 GUI 控制台（<code>opu gui</code> / <code>启动可视化发布工具.bat</code>），无需记命令即可发布。</li>
<li>内置 <code>doctor</code> 配置体检与交互式初始化向导。</li>
<li>优化 CLI 入口逻辑，提升命令加载与执行效率。</li>
</ul>

            <div class="download-box mg-b" id="download-box" ref="downloadBox">
            <div>
                
                <div class="down-ready">
                    <div class="download-list gujia" ref="gujia">
                        <div class="download-item">
                            <div class="download-thumb" style="'background-image: url();'">
                            </div>
                            <div class="download-rights">
                                <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                </ul>
                            </div>
                            <div class="download-info">
                            <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                </ul>
                                <div class="download-current">
                                    <div class=""></div>
                                </div>
                                <div class="download-button-box">
                                    <div class=""></div>
                                    <div class=""></div>
                                    <div class=""></div>
                                </div>
                            </div>
                        </div> 
                    </div>
                </div>
                <div class="download-list" v-cloak>
                    <div v-for="(item,index) in list" :class="'download-item b2-radius '+(item.current_user.can.allow ? 'allow-down' : 'not-allow-down')" v-show="picked == index" v-cloak>
                        <div class="download-rights" v-cloak>
                        <div class="download-rights-title"><i class="b2font b2-download-cloud-line1 "></i>下载权限</div><span class="mobile-show" @click="item.show_role = !item.show_role">查看</span>
                            <ul v-if="item.show_role">
                                <li v-for="right in item.rights" :class="right.lv == item.current_user.lv.lv.lv || right.lv == item.current_user.lv.vip.lv ? 'red' : ''">
                                    <div><span v-text="right.lv_name+'：'"></span></div>
                                    <div v-if="right.type == 'money'">￥<span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'credit'"><i class="b2font b2-coin-line "></i><span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'free'">免费下载</div>
                                    <div v-if="right.type == 'comment'">评论并刷新后下载</div>
                                    <div v-if="right.type == 'login'">登录后下载</div>
                                    
                                </li>
                            </ul>
                        </div>
                        
                        <div class="download-info">
                        <div class="download-rights-title"><span v-text="item.name"></span><a :href="item.view" target="_blank" class="download-view button empty text" v-if="item.view">查看演示<i class="b2font b2-arrow-right-s-line "></i></a></div>
                            <ul v-show="item.attrs.length >0">
                                <li v-for="attr in item.attrs">
                                    <span class="download-attr-name">{{attr.name}}：</span>
                                    <span v-html="attr.value"></span>
                                </li>
                            </ul>
                            <div class="download-current">
                                <span>您当前的等级为</span>
                                <span v-if="item.current_user.lv.lv" v-html="item.current_user.lv.lv.icon"></span>
                                <span v-if="item.current_user.lv.vip" v-html="item.current_user.lv.vip.icon"></span>
                                <div class="" v-if="!item.current_user.can.allow">
                                    <span v-if="item.current_user.can.type == 'login'">
                                    登录后免费下载<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'dark_room'">
                                    小黑屋反思中，不准下载！
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'comment'">
                                    评论后刷新页面下载<a href="#respond">评论</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'guest' && !item.current_user.guest">
                                        <span v-show="list[index].rights[0].lv == 'all'" v-cloak>支付<b><template v-if="item.current_user.can.type == 'credit'"><i class="b2font b2-coin-line "></i></template><template v-else>￥</template><i v-html="list[index].current_user.can.value"></i></b>以后下载</span>
                                        请先<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'full'" class="green">
                                        您今天的下载次数（<b v-text="item.current_user.can.total_count"></b>次）用完了，请明天再来
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'credit'">
                                        支付积分<b><i class="b2font b2-coin-line "></i><i v-html="list[index].current_user.can.value"></i></b>以后下载<a href="javascript:void(0)" @click="credit(index)">立即支付</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'money'">
                                        支付<b v-text="'￥'+list[index].current_user.can.value"></b>以后下载<a href="javascript:void(0)" @click="pay(index)">立即支付</a>
                                    </span>
                                    
                                    <span v-else>
                                        您当前的用户组不允许下载<a href="https://www.dixunblog.cn/vips" target="_blank">升级会员</a>
                                    </span>
                                </div>
                                <div class="" v-else>
                                    <span v-if="item.current_user.current_guest == 0 || item.current_user.can.free_down" class="green">
                                        您已获得下载权限
                                    </span>
                                    <span class="green" v-else>
                                        您可以每天下载资源<b v-text="item.current_user.can.total_count"></b>次，今日剩余<b v-text="item.current_user.can.count"></b>次
                                    </span>
                                </div>
                            </div>
                            <div class="download-button-box">
                                <button @click="go(b.link,item.current_user.can.allow,item,index)" class="button" v-text="b.name" v-for="b in item.button"></button>
                            </div>
                        </div>
                    </div>
                </div>
                </div>
            </div>
        <p><a href="https://www.dixunblog.cn/2023.html">OPU(开源项目自动化提交程序) — 一键把项目发布到 GitHub / Gitee</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dixunblog.cn/2023.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【wechatsync】开源免费！如何将文章同步到wordpress的，甚至还可以一键同步文章到 29+ 自媒体平台</title>
		<link>https://www.dixunblog.cn/2004.html</link>
		
		<dc:creator><![CDATA[小编]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 01:41:58 +0000</pubDate>
				<category><![CDATA[电脑软件]]></category>
		<category><![CDATA[wechatsync]]></category>
		<guid isPermaLink="false">https://www.dixunblog.cn/?p=2004</guid>

					<description><![CDATA[<p>#  序 Wechatsync 是开源免费浏览器扩展（Chrome/Edge），GPL3.0 开源协议，Github 开源托管，主打一篇文稿一键分发多平台，面向自媒体、技术博主、内容创作者，省去跨平台重复排版、复制发文的繁琐工作 #  核心功能拆解 1. 多平台一键内容同步 覆盖29 + 主流内容渠道： 自媒体：公众号、头条、知乎、小红书、B 站专栏、百家号、网易号等； 技术社区：CSDN、掘金、开源中国、博客园、51CTO； 自建博客：WordPress、Typecho（Hexo/Hugo 可通过 Markdow</p>
<p><a href="https://www.dixunblog.cn/2004.html">【wechatsync】开源免费！如何将文章同步到wordpress的，甚至还可以一键同步文章到 29+ 自媒体平台</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[<section style="text-align: justify;"><img decoding="async" class="rich_pages wxw-img" style="height: auto !important; width: 676.975px !important;" src="https://cdn.hyclive.cn/dixunblog/2026/06/image_1780969082797.png" alt="图片" /></section>
<p style="text-align: justify;"><span style="font-size: 18px; font-weight: bold;">#  </span><span style="font-size: 18px; font-weight: bold;">序</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">Wechatsync 是开源免费浏览器扩展（Chrome/Edge），GPL3.0 开源协议，Github 开源托管，主打一篇文稿一键分发多平台，面向自媒体、技术博主、内容创作者，省去跨平台重复排版、复制发文的繁琐工作</span></p>
<p style="text-align: justify;"><span style="font-size: 18px; font-weight: bold;">#  </span><span style="font-size: 18px; font-weight: bold;">核心功能拆解</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">1. 多平台一键内容同步</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">覆盖29 + 主流内容渠道：</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">自媒体：公众号、头条、知乎、小红书、B 站专栏、百家号、网易号等；</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">技术社区：CSDN、掘金、开源中国、博客园、51CTO；</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">自建博客：WordPress、Typecho（Hexo/Hugo 可通过 Markdown 间接适配）；</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">新增：抖音图文、雪球、X (Twitter) 等平台，持续迭代扩充站点。</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">一篇文章一键勾选多站点，自动适配各平台排版规则、图片路径转换。</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">2. 内容预处理工具</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">网页智能提取正文，剔除广告冗余，一键转为标准 Markdown；</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">自动本地化图片、替换图片链接，解决各平台图片防盗链失效问题；</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">内置简易 MD 编辑器，在线写完直接发起同步。</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">3. 安全机制（核心亮点）</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">全程本地浏览器运算、无第三方中转服务器：依托浏览器已登录 Cookie 授权，不用填写账号密码；内容、Cookie 不回传第三方，源码全开源可自查审计；默认同步至平台草稿箱，人工确认后正式发布，杜绝误发风险。</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">4. 拓展能力</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">支持 MCP 协议，对接 Claude 等 AI 写作工具，AI 生成稿件后自动化分发；</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">提供 CLI 命令行模式，开发者可二次开发、接入自动化发布工作流。</span></p>
<p style="text-align: justify;"><span style="font-size: 18px; font-weight: bold;"># </span><span style="font-size: 18px; font-weight: bold;">截图</span></p>
<section style="text-align: justify;"><img decoding="async" class="rich_pages wxw-img js_insertlocalimg js_img_placeholder wx_img_placeholder" style="aspect-ratio: calc(3.39623) / 1; width: 677px !important; height: auto !important;" src="https://cdn.hyclive.cn/dixunblog/2026/06/image_1780969085880.jpg" alt="图片" /></section>
<section style="text-align: justify;"><img decoding="async" class="rich_pages wxw-img js_insertlocalimg js_img_placeholder wx_img_placeholder" style="aspect-ratio: calc(1.50418) / 1; width: 677px !important; height: auto !important;" src="https://cdn.hyclive.cn/dixunblog/2026/06/image_1780969088195.jpg" alt="图片" /></section>
<section style="text-align: justify;"><img decoding="async" class="rich_pages wxw-img js_insertlocalimg js_img_placeholder wx_img_placeholder" style="aspect-ratio: calc(1.33498) / 1; width: 677px !important; height: auto !important;" src="https://cdn.hyclive.cn/dixunblog/2026/06/image_1780969093210.jpg" alt="图片" /></section>
<p style="text-align: justify;"><span style="font-size: 14px;">wordpress添加教程</span></p>
<section style="text-align: justify;"><img decoding="async" class="rich_pages wxw-img js_insertlocalimg js_img_placeholder wx_img_placeholder" style="aspect-ratio: calc(0.891089) / 1; width: 677px !important; height: auto !important;" src="https://cdn.hyclive.cn/dixunblog/2026/06/image_1780969096530.jpg" alt="图片" /></section>
<section style="text-align: justify;"><img decoding="async" class="rich_pages wxw-img js_insertlocalimg js_img_placeholder wx_img_placeholder" style="aspect-ratio: calc(0.677673) / 1; width: 677px !important; height: auto !important;" src="https://cdn.hyclive.cn/dixunblog/2026/06/image_1780969102773.jpg" alt="图片" /></section>
<p style="text-align: justify;"><span style="font-size: 18px; font-weight: bold;"># </span><span style="font-size: 18px; font-weight: bold;">官网</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">https://www.wechatsync.com/</span></p>
<p style="text-align: justify;"><span style="font-size: 18px; font-weight: bold;"># Git</span></p>
<p style="text-align: justify;"><span style="font-size: 14px;">https://github.com/wechatsync/Wechatsync</span></p>
<p><a href="https://www.dixunblog.cn/2004.html">【wechatsync】开源免费！如何将文章同步到wordpress的，甚至还可以一键同步文章到 29+ 自媒体平台</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Windows Update Blocker 下载</title>
		<link>https://www.dixunblog.cn/1680.html</link>
					<comments>https://www.dixunblog.cn/1680.html#comments</comments>
		
		<dc:creator><![CDATA[老大]]></dc:creator>
		<pubDate>Thu, 23 Apr 2026 15:14:44 +0000</pubDate>
				<category><![CDATA[电脑软件]]></category>
		<category><![CDATA[Windows Update Blocker]]></category>
		<category><![CDATA[电脑更新]]></category>
		<category><![CDATA[系统更新]]></category>
		<guid isPermaLink="false">https://www.dixunblog.cn/?p=1680</guid>

					<description><![CDATA[<p>Windows Update Blocker 是一款免费软件，可帮助您完全禁用或启用 Windows 系统上的自动更新，只需单击一下按钮即可。此实用程序是可移植的，这意味着您不再需要完成安装过程，并且在移除后硬盘上不会留下任何残留物。如果将程序文件放在外部数据设备上，则可以随身携带 Windows Update Blocker 并在您接触过的任何计算机上使用它，这些计算机的配置恰到好处，并且不想带走更新可能会弄乱他们的系统的机会。该实用程序是为那个人准备的。 下载后，将Windows Update Blocker解</p>
<p><a href="https://www.dixunblog.cn/1680.html">Windows Update Blocker 下载</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><span style="font-family: &amp;quot;">Windows Update Blocker 是一款免费软件，可帮助您完全禁用或启用 Windows 系统上的自动更新，只需单击一下按钮即可。</span><span style="font-family: &amp;quot;">此实用程序是可移植的，这意味着您不再需要完成安装过程，并且在移除后硬盘上不会留下任何残留物。</span><span style="font-family: &amp;quot;">如果将程序文件放在外部数据设备上，则可以随身携带 Windows Update Blocker 并在您接触过的任何计算机上使用它，这些计算机的配置恰到好处，并且不想带走更新可能会弄乱他们的系统的机会。</span><span style="font-family: &amp;quot;">该实用程序是为那个人准备的。</span><br />
<span style="font-family: Droid Sans, sans-serif;"><span style="color: #555555;"><br />
</span></span><br />
下载后，将Windows Update Blocker解压到你想要的位置，然后运行它。服务状态图标将显示您的 windows 更新服务状态，如果您想阻止自动 Windows 更新选择“禁用服务”并单击“立即应用”按钮，保护服务设置可以防止不受控制的更改（推荐）。</p>
<p><strong>支持的操作系统：</strong> Windows 11、Windows 10、Windows 8.1、Windows 8、Windows 7、Windows Vista、Windows XP（32\64 位）。</p>
<p><strong>支持的语言：</strong>英语、土耳其语、德语、希伯来语、斯洛文尼亚语、法语、俄语、葡萄牙语、意大利语、波兰语、西班牙语、捷克语、乌克兰语、荷兰语、希腊语、匈牙利语、简体中文、繁体中文、葡萄牙语（巴西）、泰语、阿拉伯语、韩语、越南语、日语、印度尼西亚语、波斯语、瑞典语、泰语、格鲁吉亚语、丹麦语（丹麦语）、阿尔巴尼亚语、阿塞拜疆语、保加利亚语、塞尔维亚语、乌兹别克语、塔吉克语、阿布哈兹语、罗马尼亚语、斯洛伐克语、僧伽罗语、马其顿语、克罗地亚语<br />
<span style="font-family: Arial, 微软雅黑, 宋体, 新宋体, sans-serif;"><span style="color: #3f3f3f;"><img loading="lazy" decoding="async" class="size-full wp-image-1681 aligncenter" title="pCngAbj" src="http://cdn.hyclive.cn/dixunblog/2026/04/pCngAbj.png" alt="pCngAbj" width="422" height="207" /></span></span><br />
选择上图的“禁用服务”，然后点击“立即应用”，完成后如下图所示：<br />
<img loading="lazy" decoding="async" class="size-full wp-image-1682 aligncenter" title="pCncwHs" src="http://cdn.hyclive.cn/dixunblog/2026/04/pCncwHs.png" alt="pCncwHs" width="422" height="207" /></p>

            <div class="download-box mg-b" id="download-box" ref="downloadBox">
            <div>
                
                <div class="down-ready">
                    <div class="download-list gujia" ref="gujia">
                        <div class="download-item">
                            <div class="download-thumb" style="'background-image: url();'">
                            </div>
                            <div class="download-rights">
                                <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                </ul>
                            </div>
                            <div class="download-info">
                            <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                </ul>
                                <div class="download-current">
                                    <div class=""></div>
                                </div>
                                <div class="download-button-box">
                                    <div class=""></div>
                                    <div class=""></div>
                                    <div class=""></div>
                                </div>
                            </div>
                        </div> 
                    </div>
                </div>
                <div class="download-list" v-cloak>
                    <div v-for="(item,index) in list" :class="'download-item b2-radius '+(item.current_user.can.allow ? 'allow-down' : 'not-allow-down')" v-show="picked == index" v-cloak>
                        <div class="download-rights" v-cloak>
                        <div class="download-rights-title"><i class="b2font b2-download-cloud-line1 "></i>下载权限</div><span class="mobile-show" @click="item.show_role = !item.show_role">查看</span>
                            <ul v-if="item.show_role">
                                <li v-for="right in item.rights" :class="right.lv == item.current_user.lv.lv.lv || right.lv == item.current_user.lv.vip.lv ? 'red' : ''">
                                    <div><span v-text="right.lv_name+'：'"></span></div>
                                    <div v-if="right.type == 'money'">￥<span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'credit'"><i class="b2font b2-coin-line "></i><span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'free'">免费下载</div>
                                    <div v-if="right.type == 'comment'">评论并刷新后下载</div>
                                    <div v-if="right.type == 'login'">登录后下载</div>
                                    
                                </li>
                            </ul>
                        </div>
                        
                        <div class="download-info">
                        <div class="download-rights-title"><span v-text="item.name"></span><a :href="item.view" target="_blank" class="download-view button empty text" v-if="item.view">查看演示<i class="b2font b2-arrow-right-s-line "></i></a></div>
                            <ul v-show="item.attrs.length >0">
                                <li v-for="attr in item.attrs">
                                    <span class="download-attr-name">{{attr.name}}：</span>
                                    <span v-html="attr.value"></span>
                                </li>
                            </ul>
                            <div class="download-current">
                                <span>您当前的等级为</span>
                                <span v-if="item.current_user.lv.lv" v-html="item.current_user.lv.lv.icon"></span>
                                <span v-if="item.current_user.lv.vip" v-html="item.current_user.lv.vip.icon"></span>
                                <div class="" v-if="!item.current_user.can.allow">
                                    <span v-if="item.current_user.can.type == 'login'">
                                    登录后免费下载<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'dark_room'">
                                    小黑屋反思中，不准下载！
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'comment'">
                                    评论后刷新页面下载<a href="#respond">评论</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'guest' && !item.current_user.guest">
                                        <span v-show="list[index].rights[0].lv == 'all'" v-cloak>支付<b><template v-if="item.current_user.can.type == 'credit'"><i class="b2font b2-coin-line "></i></template><template v-else>￥</template><i v-html="list[index].current_user.can.value"></i></b>以后下载</span>
                                        请先<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'full'" class="green">
                                        您今天的下载次数（<b v-text="item.current_user.can.total_count"></b>次）用完了，请明天再来
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'credit'">
                                        支付积分<b><i class="b2font b2-coin-line "></i><i v-html="list[index].current_user.can.value"></i></b>以后下载<a href="javascript:void(0)" @click="credit(index)">立即支付</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'money'">
                                        支付<b v-text="'￥'+list[index].current_user.can.value"></b>以后下载<a href="javascript:void(0)" @click="pay(index)">立即支付</a>
                                    </span>
                                    
                                    <span v-else>
                                        您当前的用户组不允许下载<a href="https://www.dixunblog.cn/vips" target="_blank">升级会员</a>
                                    </span>
                                </div>
                                <div class="" v-else>
                                    <span v-if="item.current_user.current_guest == 0 || item.current_user.can.free_down" class="green">
                                        您已获得下载权限
                                    </span>
                                    <span class="green" v-else>
                                        您可以每天下载资源<b v-text="item.current_user.can.total_count"></b>次，今日剩余<b v-text="item.current_user.can.count"></b>次
                                    </span>
                                </div>
                            </div>
                            <div class="download-button-box">
                                <button @click="go(b.link,item.current_user.can.allow,item,index)" class="button" v-text="b.name" v-for="b in item.button"></button>
                            </div>
                        </div>
                    </div>
                </div>
                </div>
            </div>
        <p><a href="https://www.dixunblog.cn/1680.html">Windows Update Blocker 下载</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dixunblog.cn/1680.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>植物大战僵尸融合版 v3.5 更新：超级自定义关卡 + 新植物僵尸</title>
		<link>https://www.dixunblog.cn/1512.html</link>
					<comments>https://www.dixunblog.cn/1512.html#respond</comments>
		
		<dc:creator><![CDATA[小编]]></dc:creator>
		<pubDate>Thu, 02 Apr 2026 05:16:04 +0000</pubDate>
				<category><![CDATA[游戏软件]]></category>
		<category><![CDATA[植物大战僵尸]]></category>
		<guid isPermaLink="false">https://www.dixunblog.cn/1512.html</guid>

					<description><![CDATA[<p>植物大战僵尸融合版 v3.5 更新发布！新增超级自定义关卡系统、新植物、新僵尸、新关卡。支持安卓 + 电脑，可玩性大幅提升！</p>
<p><a href="https://www.dixunblog.cn/1512.html">植物大战僵尸融合版 v3.5 更新：超级自定义关卡 + 新植物僵尸</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>《植物大战僵尸融合版》是由 B 站 UP 主蓝飘飘 fly 制作的第三方修改版本，和之前火爆的杂交版一样，都是基于经典塔防游戏的创意改编。这个版本在保留原作核心玩法的基础上，加入了大量新元素，给老玩家带来全新体验。</p>
<figure class="wp-block-image"><img decoding="async" src="https://cdn.hyclive.cn/dixunblog/2026/04/pvz_fusion_main_menu.jpg" alt="植物大战僵尸融合版主菜单界面" /><figcaption>游戏主菜单界面</figcaption></figure>
<h2>🎮 版本信息</h2>
<ul>
<li><strong>游戏名称</strong>：植物大战僵尸融合版</li>
<li><strong>当前版本</strong>：v3.5.0</li>
<li><strong>作者</strong>：B 站 UP 主 蓝飘飘 fly</li>
<li><strong>支持平台</strong>：安卓 + 电脑（Windows）</li>
<li><strong>游戏类型</strong>：塔防策略</li>
</ul>
<h2>🆕 v3.5.0 更新亮点</h2>
<h3>1. 超级自定义关卡系统</h3>
<p>这是本次更新的重头戏，玩家可以全方位自定义关卡内容：</p>
<ul>
<li><strong>基础设置</strong>：自定义关卡场景、名称、波数，提前预设植物</li>
<li><strong>模式设置</strong>：传送带、我是僵尸、砸罐子等模式随意选</li>
<li><strong>卡牌设置</strong>：卡槽数量、固定选卡、卡片价格与冷却都能调</li>
<li><strong>胜利条件</strong>：击败僵尸或吃掉脑子，两种通关目标任选</li>
<li><strong>诸神设置</strong>：设计植物升级路线，调整各项属性</li>
<li><strong>高级出怪</strong>：精确调整每一波僵尸的种类和数量</li>
<li><strong>超级随机</strong>：僵尸速率、尺寸等参数都能设置浮动范围</li>
</ul>
<p>玩家可以制作并游玩本地关卡，也能联网加载其他玩家创作的优质关卡，可玩性大幅提升！</p>
<h3>2. 新植物登场</h3>
<h4>普通植物</h4>
<ul>
<li>惊喜黄金罐子、三线路灯花、魅惑花盆</li>
<li>流光双发射手、流光中继射手、流光机枪射手</li>
<li>辣椒小蘑菇</li>
<li>蒜毒豌豆射手、蒜毒双发射手、蒜毒裂荚射手、蒜毒机枪射手</li>
<li>火炬大喷菇、大嘴窝瓜</li>
</ul>
<h4>究极系列植物</h4>
<ul>
<li>究极冬笋路障、究极冰神毁灭菇</li>
<li>摇钱三线路灯花、死神土豆地雷</li>
<li>究极流光射手</li>
</ul>
<h3>3. 新僵尸加入</h3>
<ul>
<li><strong>普通僵尸</strong>：超时空撑杆僵尸</li>
<li><strong>究极僵尸</strong>：特种机械飞碟、阿尔法狙击手</li>
</ul>
<h3>4. 新关卡</h3>
<ul>
<li><strong>砸罐子</strong>：新增 3 关，全部通关解锁惊喜黄金罐子</li>
<li><strong>迷你游戏</strong>：扫雷模式（雷的数量随难度等级提高）</li>
<li><strong>随机模式</strong>：新增 3 关&#8221;命运&#8221;</li>
<li><strong>我是僵尸</strong>：新增若干冒险关卡</li>
<li><strong>泳池无尽</strong>：新增&#8221;安逸&#8221;模式（出怪类似原版）</li>
</ul>
<h3>5. 新连携词条</h3>
<p><strong>超新星爆炸</strong>：究极路灯花 + 究极流光射手</p>
<div style="background: #fff3cd; padding: 15px; border-left: 4px solid #ffc107; margin: 20px 0;">
<p><strong>⚠️ 健康提示</strong>：该词条会产生高亮特效，可能对光敏性癫痫患者造成不适，请相关人群谨慎使用。</p>
</div>
<h3>6. 平衡性调整</h3>
<ul>
<li><strong>究极激光炮台</strong>：不再自动索敌，需要手动点击选择目标</li>
<li><strong>死神大嘴花</strong>：新增生成巫毒虚影效果</li>
<li><strong>魔法兔耳葱</strong>：魔法闪电对接触僵尸也造成伤害</li>
</ul>
<h2>💾 游戏存档位置</h2>
<p>Windows 电脑存档路径：</p>
<pre><code>C:\Users\【你的用户名】\AppData\LocalLow\LanPiaoPiao\PlantsVsZombiesRH</code></pre>
<h2>🎯 游戏特色</h2>
<h3>融合玩法</h3>
<p>通过将不同的植物进行融合，创造出具有多种能力的新植物，大大丰富了战术选择。</p>
<figure class="wp-block-image"><img decoding="async" src="https://cdn.hyclive.cn/dixunblog/2026/04/pvz_fusion_gameplay.jpg" alt="植物大战僵尸融合版战斗界面" /><figcaption>游戏战斗界面</figcaption></figure>
<h3>自定义关卡</h3>
<p>v3.5 版本最大的亮点就是超级自定义系统，玩家可以创作关卡并分享给其他玩家，也能下载挑战其他玩家创作的高难度关卡。</p>
<h3>丰富的游戏模式</h3>
<ul>
<li><strong>经典模式</strong>：原汁原味的塔防体验</li>
<li><strong>传送带模式</strong>：植物随机出现，考验应变能力</li>
<li><strong>我是僵尸</strong>：扮演僵尸进攻植物防线</li>
<li><strong>砸罐子</strong>：经典小游戏，获取随机植物</li>
<li><strong>无尽模式</strong>：真正的无尽挑战（v3.5 新增）</li>
</ul>
<h2>📥 下载说明</h2>
<p>植物大战僵尸融合版是第三方修改版本，非官方作品。玩家可以通过下方链接获取：</p>
<div style="background: #e7f3ff; padding: 15px; border-left: 4px solid #2196f3; margin: 20px 0;">
<p><strong>💡 温馨提示</strong>：这是粉丝制作的第三方修改版本，仅供学习交流使用。如果喜欢这款游戏，建议支持正版《植物大战僵尸》。</p>
</div>
<h2>💬 简评</h2>
<p>植物大战僵尸融合版 v3.5 是一个诚意十足的更新版本。超级自定义系统让游戏的可玩性大幅提升，玩家可以创作和分享自己的关卡，大大延长了游戏寿命。</p>
<p><strong>推荐人群</strong>：</p>
<ul>
<li>植物大战僵尸系列粉丝</li>
<li>塔防游戏爱好者</li>
<li>喜欢自定义和创作的玩家</li>
<li>想体验新玩法的老玩家</li>
</ul>
<hr />
<p><em>关注我们获取更多游戏资讯和下载资源！</em></p>

            <div class="download-box mg-b" id="download-box" ref="downloadBox">
            <div>
                
                <div class="down-ready">
                    <div class="download-list gujia" ref="gujia">
                        <div class="download-item">
                            <div class="download-thumb" style="'background-image: url();'">
                            </div>
                            <div class="download-rights">
                                <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                </ul>
                            </div>
                            <div class="download-info">
                            <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                </ul>
                                <div class="download-current">
                                    <div class=""></div>
                                </div>
                                <div class="download-button-box">
                                    <div class=""></div>
                                    <div class=""></div>
                                    <div class=""></div>
                                </div>
                            </div>
                        </div> 
                    </div>
                </div>
                <div class="download-list" v-cloak>
                    <div v-for="(item,index) in list" :class="'download-item b2-radius '+(item.current_user.can.allow ? 'allow-down' : 'not-allow-down')" v-show="picked == index" v-cloak>
                        <div class="download-rights" v-cloak>
                        <div class="download-rights-title"><i class="b2font b2-download-cloud-line1 "></i>下载权限</div><span class="mobile-show" @click="item.show_role = !item.show_role">查看</span>
                            <ul v-if="item.show_role">
                                <li v-for="right in item.rights" :class="right.lv == item.current_user.lv.lv.lv || right.lv == item.current_user.lv.vip.lv ? 'red' : ''">
                                    <div><span v-text="right.lv_name+'：'"></span></div>
                                    <div v-if="right.type == 'money'">￥<span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'credit'"><i class="b2font b2-coin-line "></i><span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'free'">免费下载</div>
                                    <div v-if="right.type == 'comment'">评论并刷新后下载</div>
                                    <div v-if="right.type == 'login'">登录后下载</div>
                                    
                                </li>
                            </ul>
                        </div>
                        
                        <div class="download-info">
                        <div class="download-rights-title"><span v-text="item.name"></span><a :href="item.view" target="_blank" class="download-view button empty text" v-if="item.view">查看演示<i class="b2font b2-arrow-right-s-line "></i></a></div>
                            <ul v-show="item.attrs.length >0">
                                <li v-for="attr in item.attrs">
                                    <span class="download-attr-name">{{attr.name}}：</span>
                                    <span v-html="attr.value"></span>
                                </li>
                            </ul>
                            <div class="download-current">
                                <span>您当前的等级为</span>
                                <span v-if="item.current_user.lv.lv" v-html="item.current_user.lv.lv.icon"></span>
                                <span v-if="item.current_user.lv.vip" v-html="item.current_user.lv.vip.icon"></span>
                                <div class="" v-if="!item.current_user.can.allow">
                                    <span v-if="item.current_user.can.type == 'login'">
                                    登录后免费下载<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'dark_room'">
                                    小黑屋反思中，不准下载！
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'comment'">
                                    评论后刷新页面下载<a href="#respond">评论</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'guest' && !item.current_user.guest">
                                        <span v-show="list[index].rights[0].lv == 'all'" v-cloak>支付<b><template v-if="item.current_user.can.type == 'credit'"><i class="b2font b2-coin-line "></i></template><template v-else>￥</template><i v-html="list[index].current_user.can.value"></i></b>以后下载</span>
                                        请先<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'full'" class="green">
                                        您今天的下载次数（<b v-text="item.current_user.can.total_count"></b>次）用完了，请明天再来
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'credit'">
                                        支付积分<b><i class="b2font b2-coin-line "></i><i v-html="list[index].current_user.can.value"></i></b>以后下载<a href="javascript:void(0)" @click="credit(index)">立即支付</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'money'">
                                        支付<b v-text="'￥'+list[index].current_user.can.value"></b>以后下载<a href="javascript:void(0)" @click="pay(index)">立即支付</a>
                                    </span>
                                    
                                    <span v-else>
                                        您当前的用户组不允许下载<a href="https://www.dixunblog.cn/vips" target="_blank">升级会员</a>
                                    </span>
                                </div>
                                <div class="" v-else>
                                    <span v-if="item.current_user.current_guest == 0 || item.current_user.can.free_down" class="green">
                                        您已获得下载权限
                                    </span>
                                    <span class="green" v-else>
                                        您可以每天下载资源<b v-text="item.current_user.can.total_count"></b>次，今日剩余<b v-text="item.current_user.can.count"></b>次
                                    </span>
                                </div>
                            </div>
                            <div class="download-button-box">
                                <button @click="go(b.link,item.current_user.can.allow,item,index)" class="button" v-text="b.name" v-for="b in item.button"></button>
                            </div>
                        </div>
                    </div>
                </div>
                </div>
            </div>
        <p><a href="https://www.dixunblog.cn/1512.html">植物大战僵尸融合版 v3.5 更新：超级自定义关卡 + 新植物僵尸</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dixunblog.cn/1512.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>最强华为eNSP安装教程（100%成功）—— 含全版本安装包+避坑指南</title>
		<link>https://www.dixunblog.cn/1180.html</link>
					<comments>https://www.dixunblog.cn/1180.html#respond</comments>
		
		<dc:creator><![CDATA[老大]]></dc:creator>
		<pubDate>Sat, 28 Feb 2026 08:04:17 +0000</pubDate>
				<category><![CDATA[电脑软件]]></category>
		<category><![CDATA[eNSP]]></category>
		<category><![CDATA[华为模拟器]]></category>
		<guid isPermaLink="false">https://www.dixunblog.cn/?p=1180</guid>

					<description><![CDATA[<p>你是否遇到这些问题？ ❌ eNSP安装失败？依赖项报错？ ❌ Win11/Win10不兼容？无法启动AR路由器？ ❌ VirtualBox冲突？Wireshark抓包失败？ 别担心！这份全网最详细的eNSP保姆级教程，从下载、安装到排错一步到位，解决所有常见问题！ 一、 安装前必读（避免踩坑！） 📢 重要提醒： 适用系统：Win10（推荐）、Win11（需额外设置，后面会讲） 关闭杀毒软件！华为模拟器可能被误报（安装后恢复） 安装路径不要有中文！否则会报错！ ⚠ 依赖组件（必须安装！否则eNSP无法正常运行）： ✅</p>
<p><a href="https://www.dixunblog.cn/1180.html">最强华为eNSP安装教程（100%成功）—— 含全版本安装包+避坑指南</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>你是否遇到这些问题？<br />
❌ eNSP安装失败？依赖项报错？<br />
❌ Win11/Win10不兼容？无法启动AR路由器？<br />
❌ VirtualBox冲突？Wireshark抓包失败？</p>
<p><strong>别担心！这份全网最详细的eNSP保姆级教程，从下载、安装到排错一步到位，解决所有常见问题！</strong></p>
<h2 id="一-安装前必读避免踩坑"><strong>一、 安装前必读（避免踩坑！）</strong></h2>
<p>📢 <strong>重要提醒</strong>：</p>
<ul>
<li><strong>适用系统</strong>：Win10（推荐）、Win11（需额外设置，后面会讲）</li>
<li><strong>关闭杀毒软件</strong>！华为模拟器可能被误报（安装后恢复）</li>
<li><strong>安装路径不要有中文</strong>！否则会报错！</li>
</ul>
<p>⚠ <strong>依赖组件</strong>（必须安装！否则eNSP无法正常运行）：</p>
<p>✅ <strong>VirtualBox</strong>（eNSP依赖的虚拟机环境）<br />
✅ <strong>WinPcap</strong>（抓包工具依赖）<br />
✅ <strong>Wireshark</strong>（可选，但推荐安装）</p>
<p>✅<strong>eNSP（必须）</strong></p>
<h2 id="二安装包获取方式">二、安装包获取方式</h2>
<h3 id="1夸克网盘提取">1、夸克网盘提取</h3>
<p>我用夸克网盘给你分享了「ensp安装包」，点击链接或复制整段内容，打开「夸克APP」即可获取。 /~88243LpUsq~:/</p>
<p>链接：<a href="https://pan.quark.cn/s/3777c8e9ff20">https://pan.quark.cn/s/3777c8e9ff20</a></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1208" title="1761292203589-9b1ee78c-1990-4ab6-9faa-abd852b2a887-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292203589-9b1ee78c-1990-4ab6-9faa-abd852b2a887-1.png" alt="1761292203589-9b1ee78c-1990-4ab6-9faa-abd852b2a887-1" width="770" height="197" /></p>
<p><strong>（内含3个依赖组件和eNSP安装包，全部下载）</strong></p>
<h2 id="三详细安装步骤图文版">三、<strong>详细安装步骤（图文版）</strong></h2>
<h3 id="1安装winpcap">1、安装WinPcap</h3>
<p>双击打开安装包文件 “WinPcap_4_1_3.exe” ，无脑下一步即可（Win10/Win11都兼容）</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1210" title="1761292606246-f7580c05-611d-4e57-9025-7d2f7968b549-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292606246-f7580c05-611d-4e57-9025-7d2f7968b549-1.png" alt="1761292606246-f7580c05-611d-4e57-9025-7d2f7968b549-1" width="233" height="40" /></p>
<p>出现弹窗，点击“Next”。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1209" title="1761292533240-40de17e1-b087-4226-853b-414ae74590b9" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292533240-40de17e1-b087-4226-853b-414ae74590b9.png" alt="1761292533240-40de17e1-b087-4226-853b-414ae74590b9" width="631" height="482" /><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1211" title="1761292551345-2ee4f348-febd-4edb-a20c-632395d2ce99" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292551345-2ee4f348-febd-4edb-a20c-632395d2ce99.png" alt="1761292551345-2ee4f348-febd-4edb-a20c-632395d2ce99" width="627" height="480" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1212" title="1761292567024-62256950-02e1-442c-9528-f1bad13a2a3d" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292567024-62256950-02e1-442c-9528-f1bad13a2a3d.png" alt="1761292567024-62256950-02e1-442c-9528-f1bad13a2a3d" width="623" height="489" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1213" title="1761292594060-894bcb01-2b9c-4232-97d9-fac0d0403fff" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292594060-894bcb01-2b9c-4232-97d9-fac0d0403fff.png" alt="1761292594060-894bcb01-2b9c-4232-97d9-fac0d0403fff" width="623" height="470" /></p>
<h3 id="2安装wireshark网络抓包分析工具"><strong>2、安装Wireshark（网络抓包分析工具）</strong></h3>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1215" title="1761292977106-1a801a6d-23b7-43e5-ba61-ef60f17b44ff-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292977106-1a801a6d-23b7-43e5-ba61-ef60f17b44ff-1.png" alt="1761292977106-1a801a6d-23b7-43e5-ba61-ef60f17b44ff-1" width="679" height="45" /></p>
<p>运行 <code>**Wireshark-win64-2.6.6.exe**</code></p>
<p>点击Next。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1214" title="1761293067800-9bd4e03a-78bf-4afc-857e-869854a66caf" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293067800-9bd4e03a-78bf-4afc-857e-869854a66caf.png" alt="1761293067800-9bd4e03a-78bf-4afc-857e-869854a66caf" width="636" height="477" /></p>
<p>点击“I Agrre”。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1216" title="1761293078388-1c2daf31-bdfa-4f34-a174-32d48eb1abf5-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293078388-1c2daf31-bdfa-4f34-a174-32d48eb1abf5-1.png" alt="1761293078388-1c2daf31-bdfa-4f34-a174-32d48eb1abf5-1" width="629" height="490" /></p>
<p>这里默认即可，继续Next。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1217" title="1761293089152-d41d9ec0-e907-4c46-85db-e0c52bd9a950-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293089152-d41d9ec0-e907-4c46-85db-e0c52bd9a950-1.png" alt="1761293089152-d41d9ec0-e907-4c46-85db-e0c52bd9a950-1" width="632" height="495" /><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1218" title="1761293097127-432eaa73-38c5-409f-96ec-9f37e22f52c8-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293097127-432eaa73-38c5-409f-96ec-9f37e22f52c8-1.png" alt="1761293097127-432eaa73-38c5-409f-96ec-9f37e22f52c8-1" width="636" height="483" /></p>
<p>选择自定义路径</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1219" title="1761293106650-1d013013-784a-4c31-b4e4-7671dcccf895-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293106650-1d013013-784a-4c31-b4e4-7671dcccf895-1.png" alt="1761293106650-1d013013-784a-4c31-b4e4-7671dcccf895-1" width="624" height="487" /></p>
<p>点击Next。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1220" title="1761293119043-3ddd9797-36ce-4ff3-a7aa-ef79410ebebe-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293119043-3ddd9797-36ce-4ff3-a7aa-ef79410ebebe-1.png" alt="1761293119043-3ddd9797-36ce-4ff3-a7aa-ef79410ebebe-1" width="629" height="475" /></p>
<p>点击“Install”，开始安装。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1221" title="1761293141750-b16f6ec9-4d71-46f0-8afd-cd316b6fdfe9-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293141750-b16f6ec9-4d71-46f0-8afd-cd316b6fdfe9-1.png" alt="1761293141750-b16f6ec9-4d71-46f0-8afd-cd316b6fdfe9-1" width="655" height="496" /></p>
<p>完成安装</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1222" title="1761293286135-8aa70a92-b53c-4ad6-ac69-b83701c7a8ce-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293286135-8aa70a92-b53c-4ad6-ac69-b83701c7a8ce-1.png" alt="1761293286135-8aa70a92-b53c-4ad6-ac69-b83701c7a8ce-1" width="641" height="490" /></p>
<h3 id="3安装virtualbox关键"><strong>3、安装VirtualBox（关键！）</strong></h3>
<p><strong>以管理员身份运行</strong> <code>VirtualBox-5.2.26-128414-Win.exe</code></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1223" title="1761292667784-2e3135d4-5aae-4858-9e4a-5ce7957ac3d1-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292667784-2e3135d4-5aae-4858-9e4a-5ce7957ac3d1-1.png" alt="1761292667784-2e3135d4-5aae-4858-9e4a-5ce7957ac3d1-1" width="619" height="34" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1224" title="1761292832290-77a6fd57-3f49-4854-966e-966c9b6588bd-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292832290-77a6fd57-3f49-4854-966e-966c9b6588bd-1.png" alt="1761292832290-77a6fd57-3f49-4854-966e-966c9b6588bd-1" width="624" height="478" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1226" title="1761292887746-b6731c8e-7a1a-4ddf-9674-f7897b855aa8-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292887746-b6731c8e-7a1a-4ddf-9674-f7897b855aa8-1.png" alt="1761292887746-b6731c8e-7a1a-4ddf-9674-f7897b855aa8-1" width="750" height="429" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1225" title="1761292877001-3be098f0-d284-4ccb-8239-5222e3187329-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292877001-3be098f0-d284-4ccb-8239-5222e3187329-1.png" alt="1761292877001-3be098f0-d284-4ccb-8239-5222e3187329-1" width="717" height="469" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1228" title="1761292898714-22ae9639-6b3a-4a93-8008-0db95890d488-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292898714-22ae9639-6b3a-4a93-8008-0db95890d488-1.png" alt="1761292898714-22ae9639-6b3a-4a93-8008-0db95890d488-1" width="750" height="439" /><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1227" title="1761292904492-0b64e812-e088-4c10-a55a-11d90b216f3f-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292904492-0b64e812-e088-4c10-a55a-11d90b216f3f-1.png" alt="1761292904492-0b64e812-e088-4c10-a55a-11d90b216f3f-1" width="753" height="433" /></p>
<p>选择安装<img loading="lazy" decoding="async" class="alignnone size-full wp-image-1229" title="1761292909759-cd0accd2-7688-4582-8b91-0e2b27f8f3bf-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761292909759-cd0accd2-7688-4582-8b91-0e2b27f8f3bf-1.png" alt="1761292909759-cd0accd2-7688-4582-8b91-0e2b27f8f3bf-1" width="748" height="247" /></p>
<h3 id="4安装ensp">4、安装eNSP</h3>
<p>双击“eNSP V100R003C00SPC100 Setup.exe”</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1230" title="1761293313520-881f66c4-ce7a-4078-8274-16ac08ae1d8b-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293313520-881f66c4-ce7a-4078-8274-16ac08ae1d8b-1.png" alt="1761293313520-881f66c4-ce7a-4078-8274-16ac08ae1d8b-1" width="504" height="41" /></p>
<p>默认选择中文，点击确定。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1231" title="1761293417430-4cdc46b5-57e4-4865-b616-9e5fa0202496-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293417430-4cdc46b5-57e4-4865-b616-9e5fa0202496-1.png" alt="1761293417430-4cdc46b5-57e4-4865-b616-9e5fa0202496-1" width="405" height="185" /></p>
<p>点击下一步。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1232" title="1761293450737-eda30c2f-5a8e-40e2-9da4-21541b5c4df6-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293450737-eda30c2f-5a8e-40e2-9da4-21541b5c4df6-1.png" alt="1761293450737-eda30c2f-5a8e-40e2-9da4-21541b5c4df6-1" width="672" height="465" /></p>
<p>接受协议 → <code>**下一步**</code></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1233" title="1761293467620-2221f0d1-54da-40fc-9daf-f9ab7689e505-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293467620-2221f0d1-54da-40fc-9daf-f9ab7689e505-1.png" alt="1761293467620-2221f0d1-54da-40fc-9daf-f9ab7689e505-1" width="672" height="478" /></p>
<p><strong>安装路径不要有中文！</strong> （如 <code>D:\eNSP\</code>）</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1234" title="1761293511462-c2e38b64-0a71-4eb0-80b0-419b82745d01-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293511462-c2e38b64-0a71-4eb0-80b0-419b82745d01-1.png" alt="1761293511462-c2e38b64-0a71-4eb0-80b0-419b82745d01-1" width="662" height="472" /><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1235" title="1761293525373-b5649663-baca-4212-a5bf-cd4d32935274-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293525373-b5649663-baca-4212-a5bf-cd4d32935274-1.png" alt="1761293525373-b5649663-baca-4212-a5bf-cd4d32935274-1" width="671" height="468" /></p>
<p>勾选 <code>**创建桌面快捷方式**</code></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1236" title="1761293538999-8ae9e28d-902d-4570-8d1c-6e526be95c8f-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293538999-8ae9e28d-902d-4570-8d1c-6e526be95c8f-1.png" alt="1761293538999-8ae9e28d-902d-4570-8d1c-6e526be95c8f-1" width="662" height="474" /></p>
<p><strong>跳过依赖安装</strong>（因为前面已经装好了）</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1238" title="1761293549901-ab4bcce4-aaec-4890-b4c4-729a6dfbfa9f-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293549901-ab4bcce4-aaec-4890-b4c4-729a6dfbfa9f-1.png" alt="1761293549901-ab4bcce4-aaec-4890-b4c4-729a6dfbfa9f-1" width="670" height="480" /></p>
<p>点 <code>**安装**</code> → 完成后点 <code>**完成**</code></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1237" title="1761293560648-eea8c4f7-4a9e-450d-85f5-0afc0fe14d06-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293560648-eea8c4f7-4a9e-450d-85f5-0afc0fe14d06-1.png" alt="1761293560648-eea8c4f7-4a9e-450d-85f5-0afc0fe14d06-1" width="670" height="482" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1239" title="1761293901692-62f7ab76-d11e-4e96-b74f-a7e8b3cfe8df-1" src="http://cdn.hyclive.cn/dixunblog/2026/02/1761293901692-62f7ab76-d11e-4e96-b74f-a7e8b3cfe8df-1.png" alt="1761293901692-62f7ab76-d11e-4e96-b74f-a7e8b3cfe8df-1" width="672" height="482" /></p>

            <div class="download-box mg-b" id="download-box" ref="downloadBox">
            <div>
                
                <div class="down-ready">
                    <div class="download-list gujia" ref="gujia">
                        <div class="download-item">
                            <div class="download-thumb" style="'background-image: url();'">
                            </div>
                            <div class="download-rights">
                                <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                </ul>
                            </div>
                            <div class="download-info">
                            <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                </ul>
                                <div class="download-current">
                                    <div class=""></div>
                                </div>
                                <div class="download-button-box">
                                    <div class=""></div>
                                    <div class=""></div>
                                    <div class=""></div>
                                </div>
                            </div>
                        </div> 
                    </div>
                </div>
                <div class="download-list" v-cloak>
                    <div v-for="(item,index) in list" :class="'download-item b2-radius '+(item.current_user.can.allow ? 'allow-down' : 'not-allow-down')" v-show="picked == index" v-cloak>
                        <div class="download-rights" v-cloak>
                        <div class="download-rights-title"><i class="b2font b2-download-cloud-line1 "></i>下载权限</div><span class="mobile-show" @click="item.show_role = !item.show_role">查看</span>
                            <ul v-if="item.show_role">
                                <li v-for="right in item.rights" :class="right.lv == item.current_user.lv.lv.lv || right.lv == item.current_user.lv.vip.lv ? 'red' : ''">
                                    <div><span v-text="right.lv_name+'：'"></span></div>
                                    <div v-if="right.type == 'money'">￥<span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'credit'"><i class="b2font b2-coin-line "></i><span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'free'">免费下载</div>
                                    <div v-if="right.type == 'comment'">评论并刷新后下载</div>
                                    <div v-if="right.type == 'login'">登录后下载</div>
                                    
                                </li>
                            </ul>
                        </div>
                        
                        <div class="download-info">
                        <div class="download-rights-title"><span v-text="item.name"></span><a :href="item.view" target="_blank" class="download-view button empty text" v-if="item.view">查看演示<i class="b2font b2-arrow-right-s-line "></i></a></div>
                            <ul v-show="item.attrs.length >0">
                                <li v-for="attr in item.attrs">
                                    <span class="download-attr-name">{{attr.name}}：</span>
                                    <span v-html="attr.value"></span>
                                </li>
                            </ul>
                            <div class="download-current">
                                <span>您当前的等级为</span>
                                <span v-if="item.current_user.lv.lv" v-html="item.current_user.lv.lv.icon"></span>
                                <span v-if="item.current_user.lv.vip" v-html="item.current_user.lv.vip.icon"></span>
                                <div class="" v-if="!item.current_user.can.allow">
                                    <span v-if="item.current_user.can.type == 'login'">
                                    登录后免费下载<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'dark_room'">
                                    小黑屋反思中，不准下载！
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'comment'">
                                    评论后刷新页面下载<a href="#respond">评论</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'guest' && !item.current_user.guest">
                                        <span v-show="list[index].rights[0].lv == 'all'" v-cloak>支付<b><template v-if="item.current_user.can.type == 'credit'"><i class="b2font b2-coin-line "></i></template><template v-else>￥</template><i v-html="list[index].current_user.can.value"></i></b>以后下载</span>
                                        请先<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'full'" class="green">
                                        您今天的下载次数（<b v-text="item.current_user.can.total_count"></b>次）用完了，请明天再来
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'credit'">
                                        支付积分<b><i class="b2font b2-coin-line "></i><i v-html="list[index].current_user.can.value"></i></b>以后下载<a href="javascript:void(0)" @click="credit(index)">立即支付</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'money'">
                                        支付<b v-text="'￥'+list[index].current_user.can.value"></b>以后下载<a href="javascript:void(0)" @click="pay(index)">立即支付</a>
                                    </span>
                                    
                                    <span v-else>
                                        您当前的用户组不允许下载<a href="https://www.dixunblog.cn/vips" target="_blank">升级会员</a>
                                    </span>
                                </div>
                                <div class="" v-else>
                                    <span v-if="item.current_user.current_guest == 0 || item.current_user.can.free_down" class="green">
                                        您已获得下载权限
                                    </span>
                                    <span class="green" v-else>
                                        您可以每天下载资源<b v-text="item.current_user.can.total_count"></b>次，今日剩余<b v-text="item.current_user.can.count"></b>次
                                    </span>
                                </div>
                            </div>
                            <div class="download-button-box">
                                <button @click="go(b.link,item.current_user.can.allow,item,index)" class="button" v-text="b.name" v-for="b in item.button"></button>
                            </div>
                        </div>
                    </div>
                </div>
                </div>
            </div>
        <p><a href="https://www.dixunblog.cn/1180.html">最强华为eNSP安装教程（100%成功）—— 含全版本安装包+避坑指南</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dixunblog.cn/1180.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>回家抢票Bypass分流抢票 v1.16.62绿色版</title>
		<link>https://www.dixunblog.cn/1121.html</link>
					<comments>https://www.dixunblog.cn/1121.html#respond</comments>
		
		<dc:creator><![CDATA[老大]]></dc:creator>
		<pubDate>Mon, 05 Jan 2026 04:03:40 +0000</pubDate>
				<category><![CDATA[电脑软件]]></category>
		<category><![CDATA[Bypass分流抢票]]></category>
		<category><![CDATA[分流抢票]]></category>
		<category><![CDATA[回家抢票]]></category>
		<category><![CDATA[抢票软件]]></category>
		<guid isPermaLink="false">https://www.dixunblog.cn/?p=1121</guid>

					<description><![CDATA[<p>软件介绍 12306Bypass分流抢票软件，易操作强大的12306抢票软件，全程自动抢票，云识别验证码打码，多线程秒单、稳定捡漏，支持抢候补票、抢到票自动付款，支持多天、多车次、多席别、多乘客、短信提醒等功能。 软件截图 更新日志 bypass.cn/changelog 1、同步官网起售时间变化的相关改动 2、增加车次列表可恢复滚动位置功能 3、修正多屏用户不记录软件位置问题 4、修正图标悬浮统计中不正确的问题 关于软件赞助与识别验证码的问题 1、Bypass分流抢票本身附带云识别模块帮助识别，但实际测试即便是不</p>
<p><a href="https://www.dixunblog.cn/1121.html">回家抢票Bypass分流抢票 v1.16.62绿色版</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>软件介绍</strong></p>
<p>12306Bypass分流抢票软件，易操作强大的12306抢票软件，全程自动抢票，云识别验证码打码，多线程秒单、稳定捡漏，支持抢候补票、抢到票自动付款，支持多天、多车次、多席别、多乘客、短信提醒等功能。</p>
<p><strong>软件截图</strong></p>
<p><strong><img loading="lazy" decoding="async" class="size-full wp-image-1122 aligncenter" title="202601041767529047642946" src="http://cdn.hyclive.cn/dixunblog/2026/01/202601041767529047642946.jpg" alt="202601041767529047642946" width="1262" height="833" /></strong></p>
<p><strong>更新日志</strong></p>
<p><a href="https://www.bypass.cn/changelog">bypass.cn/changelog</a></p>
<p>1、同步官网起售时间变化的相关改动</p>
<p>2、增加车次列表可恢复滚动位置功能</p>
<p>3、修正多屏用户不记录软件位置问题</p>
<p>4、修正图标悬浮统计中不正确的问题</p>
<p>关于软件赞助与识别验证码的问题</p>
<p>1、Bypass分流抢票本身附带云识别模块帮助识别，但实际测试即便是不使用也不需要手动选择验证码。</p>
<p>2、识别模块会占用大量服务器开销，开发者要求用户在赞助后注册为会员后才可以开启自动验证码功能。</p>
<p>3、实际测试中除登录12306的账号时需要手动选择验证码外，自动提交订单、刷票等都无需开启该功能。</p>
<p>4、<span style="color: #ff6600;">作者承诺赞助后不保证%100能刷到票，验证码云识别、抢到票自动支付等功能现在需要赞助才能用！</span></p>
<p>2025年Bypass分流抢票12306抢票攻略（技巧）</p>
<p><span style="color: #ff9900;">1、打开Bypass-分流抢票，登录后参数设置如下：</span></p>
<p><span style="color: #ff9900;">2、设置只抢候补不抢票，设置自动支付，定时抢票定时定到8：55或者12：55</span></p>
<p><span style="color: #ff9900;">3、改间隔调到100，小黑屋调到120，全国CDN前面打勾，然后坐等候补票出票</span></p>
<p>为什么直接冲着候补票去，而不是直接抢票，因为12306去年开始就请了阿里帮忙升级打怪，推出两个措施，一个叫区间限售（也就是不一次性放票），一个叫候补功能（为了打击黄牛，大多票其实都在候补里头），只要你候补排名靠前，基本稳拿票，如果不信，整点抢一次票你就明白了，一是放票少，二是万人过独木桥根本挤不进，三是12306现在会对部分抢票或者第三方软件进行屏蔽或限制。因此，在别人都在为了票而在整点走独木桥的时候，你绕开直接抢候补（设置只抢候补不抢票），本质上就是在抢最实在最稳的票，这叫非对称竞争思维。另外，上面叫你设置自动支付就是为了候补排名靠前，因为官方是以实际付款先后顺序来决定候补排名前后的，所以设置自动支付就让你成为前几名抢到候补票的人，你还慌什么，稳到不能再稳了。</p>

            <div class="download-box mg-b" id="download-box" ref="downloadBox">
            <div>
                
                <div class="down-ready">
                    <div class="download-list gujia" ref="gujia">
                        <div class="download-item">
                            <div class="download-thumb" style="'background-image: url();'">
                            </div>
                            <div class="download-rights">
                                <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                </ul>
                            </div>
                            <div class="download-info">
                            <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                </ul>
                                <div class="download-current">
                                    <div class=""></div>
                                </div>
                                <div class="download-button-box">
                                    <div class=""></div>
                                    <div class=""></div>
                                    <div class=""></div>
                                </div>
                            </div>
                        </div> 
                    </div>
                </div>
                <div class="download-list" v-cloak>
                    <div v-for="(item,index) in list" :class="'download-item b2-radius '+(item.current_user.can.allow ? 'allow-down' : 'not-allow-down')" v-show="picked == index" v-cloak>
                        <div class="download-rights" v-cloak>
                        <div class="download-rights-title"><i class="b2font b2-download-cloud-line1 "></i>下载权限</div><span class="mobile-show" @click="item.show_role = !item.show_role">查看</span>
                            <ul v-if="item.show_role">
                                <li v-for="right in item.rights" :class="right.lv == item.current_user.lv.lv.lv || right.lv == item.current_user.lv.vip.lv ? 'red' : ''">
                                    <div><span v-text="right.lv_name+'：'"></span></div>
                                    <div v-if="right.type == 'money'">￥<span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'credit'"><i class="b2font b2-coin-line "></i><span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'free'">免费下载</div>
                                    <div v-if="right.type == 'comment'">评论并刷新后下载</div>
                                    <div v-if="right.type == 'login'">登录后下载</div>
                                    
                                </li>
                            </ul>
                        </div>
                        
                        <div class="download-info">
                        <div class="download-rights-title"><span v-text="item.name"></span><a :href="item.view" target="_blank" class="download-view button empty text" v-if="item.view">查看演示<i class="b2font b2-arrow-right-s-line "></i></a></div>
                            <ul v-show="item.attrs.length >0">
                                <li v-for="attr in item.attrs">
                                    <span class="download-attr-name">{{attr.name}}：</span>
                                    <span v-html="attr.value"></span>
                                </li>
                            </ul>
                            <div class="download-current">
                                <span>您当前的等级为</span>
                                <span v-if="item.current_user.lv.lv" v-html="item.current_user.lv.lv.icon"></span>
                                <span v-if="item.current_user.lv.vip" v-html="item.current_user.lv.vip.icon"></span>
                                <div class="" v-if="!item.current_user.can.allow">
                                    <span v-if="item.current_user.can.type == 'login'">
                                    登录后免费下载<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'dark_room'">
                                    小黑屋反思中，不准下载！
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'comment'">
                                    评论后刷新页面下载<a href="#respond">评论</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'guest' && !item.current_user.guest">
                                        <span v-show="list[index].rights[0].lv == 'all'" v-cloak>支付<b><template v-if="item.current_user.can.type == 'credit'"><i class="b2font b2-coin-line "></i></template><template v-else>￥</template><i v-html="list[index].current_user.can.value"></i></b>以后下载</span>
                                        请先<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'full'" class="green">
                                        您今天的下载次数（<b v-text="item.current_user.can.total_count"></b>次）用完了，请明天再来
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'credit'">
                                        支付积分<b><i class="b2font b2-coin-line "></i><i v-html="list[index].current_user.can.value"></i></b>以后下载<a href="javascript:void(0)" @click="credit(index)">立即支付</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'money'">
                                        支付<b v-text="'￥'+list[index].current_user.can.value"></b>以后下载<a href="javascript:void(0)" @click="pay(index)">立即支付</a>
                                    </span>
                                    
                                    <span v-else>
                                        您当前的用户组不允许下载<a href="https://www.dixunblog.cn/vips" target="_blank">升级会员</a>
                                    </span>
                                </div>
                                <div class="" v-else>
                                    <span v-if="item.current_user.current_guest == 0 || item.current_user.can.free_down" class="green">
                                        您已获得下载权限
                                    </span>
                                    <span class="green" v-else>
                                        您可以每天下载资源<b v-text="item.current_user.can.total_count"></b>次，今日剩余<b v-text="item.current_user.can.count"></b>次
                                    </span>
                                </div>
                            </div>
                            <div class="download-button-box">
                                <button @click="go(b.link,item.current_user.can.allow,item,index)" class="button" v-text="b.name" v-for="b in item.button"></button>
                            </div>
                        </div>
                    </div>
                </div>
                </div>
            </div>
        <p><a href="https://www.dixunblog.cn/1121.html">回家抢票Bypass分流抢票 v1.16.62绿色版</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dixunblog.cn/1121.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>安卓任意修改水印相机-照片/视频一键修改水印 v1.25.1203 解锁VIP会员版</title>
		<link>https://www.dixunblog.cn/1117.html</link>
					<comments>https://www.dixunblog.cn/1117.html#respond</comments>
		
		<dc:creator><![CDATA[老大]]></dc:creator>
		<pubDate>Mon, 05 Jan 2026 03:55:50 +0000</pubDate>
				<category><![CDATA[手机软件]]></category>
		<category><![CDATA[任意修改水印]]></category>
		<category><![CDATA[修改水印]]></category>
		<category><![CDATA[水印软件]]></category>
		<guid isPermaLink="false">https://www.dixunblog.cn/?p=1117</guid>

					<description><![CDATA[<p>软件介绍 任意修改水印相机会员版是一款强大的应用程序，专为照片和视频添加水印而设计。它能够一键快速地为您的媒体文件加上水印，非常适合用于各类场合，包括但不限于工作进度记录、考勤打卡、工程管理、外勤拍照、品牌宣传、现场取证、会议记录、执勤巡逻以及日常生活记录等。还能通过任意修改水印相机破解版改变水印的内容，满足用户对水印的各种需求。非常的简单好用，有需要的用户赶紧来本站下载任意修改水印相机vip版吧！ 软件截图 功能特色 这款应用提供了多种水印类型，包括品牌标志、时间、地点、天气状况、经纬度、海拔高度、编号、速度、分</p>
<p><a href="https://www.dixunblog.cn/1117.html">安卓任意修改水印相机-照片/视频一键修改水印 v1.25.1203 解锁VIP会员版</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><strong>软件介绍</strong></p>
<p>任意修改水印相机会员版是一款强大的应用程序，专为照片和视频添加水印而设计。它能够一键快速地为您的媒体文件加上水印，非常适合用于各类场合，包括但不限于工作进度记录、考勤打卡、工程管理、外勤拍照、品牌宣传、现场取证、会议记录、执勤巡逻以及日常生活记录等。还能通过任意修改水印相机破解版改变水印的内容，满足用户对水印的各种需求。非常的简单好用，有需要的用户赶紧来本站下载任意修改水印相机vip版吧！</p>
<p><strong>软件截图</strong></p>
<p><img loading="lazy" decoding="async" class="size-full wp-image-1118 aligncenter" title="202512201766232748668433" src="http://cdn.hyclive.cn/dixunblog/2026/01/202512201766232748668433.jpg" alt="202512201766232748668433" width="924" height="651" /></p>
<p><strong>功能特色</strong></p>
<p>这款应用提供了多种水印类型，包括品牌标志、时间、地点、天气状况、经纬度、海拔高度、编号、速度、分贝级别、个人名片等，以适应不同用户的需求。此外，任意修改水印相机还配备了一系列专业的水印模板，便于用户根据具体用途快速选择，如：</p>
<p>&#8211; 考勤打卡：可自动添加真实的时间和工作地点水印，方便记录工作出勤情况。</p>
<p>&#8211; 工作记录拍照：为物业管理、工程管理、执勤记录、品牌宣传、会议记录等提供特定的工作记录模板。</p>
<p>&#8211; 实时更新功能：能够自动更新并加上实时的日期、地点、天气等信息，保持信息的最新性。</p>
<p>&#8211; 自定义水印内容：用户可以自由地开关和编辑水印内容选项，以满足个性化需求。</p>
<p>任意修改水印相机的这些功能使其成为了一个多用途的水印添加工具，无论是专业场合还是日常生活，都可以提供有效、便捷的水印解决方案。</p>
<p><strong>版本特点</strong></p>
<p>解锁会员版功能</p>

            <div class="download-box mg-b" id="download-box" ref="downloadBox">
            <div>
                
                <div class="down-ready">
                    <div class="download-list gujia" ref="gujia">
                        <div class="download-item">
                            <div class="download-thumb" style="'background-image: url();'">
                            </div>
                            <div class="download-rights">
                                <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                    <li><span class="gujia-bg"></span></li>
                                </ul>
                            </div>
                            <div class="download-info">
                            <div class="download-rights-title"><span class="gujia-bg"></span></div>
                                <ul>
                                </ul>
                                <div class="download-current">
                                    <div class=""></div>
                                </div>
                                <div class="download-button-box">
                                    <div class=""></div>
                                    <div class=""></div>
                                    <div class=""></div>
                                </div>
                            </div>
                        </div> 
                    </div>
                </div>
                <div class="download-list" v-cloak>
                    <div v-for="(item,index) in list" :class="'download-item b2-radius '+(item.current_user.can.allow ? 'allow-down' : 'not-allow-down')" v-show="picked == index" v-cloak>
                        <div class="download-rights" v-cloak>
                        <div class="download-rights-title"><i class="b2font b2-download-cloud-line1 "></i>下载权限</div><span class="mobile-show" @click="item.show_role = !item.show_role">查看</span>
                            <ul v-if="item.show_role">
                                <li v-for="right in item.rights" :class="right.lv == item.current_user.lv.lv.lv || right.lv == item.current_user.lv.vip.lv ? 'red' : ''">
                                    <div><span v-text="right.lv_name+'：'"></span></div>
                                    <div v-if="right.type == 'money'">￥<span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'credit'"><i class="b2font b2-coin-line "></i><span v-text="right.value"></span></div>
                                    <div v-if="right.type == 'free'">免费下载</div>
                                    <div v-if="right.type == 'comment'">评论并刷新后下载</div>
                                    <div v-if="right.type == 'login'">登录后下载</div>
                                    
                                </li>
                            </ul>
                        </div>
                        
                        <div class="download-info">
                        <div class="download-rights-title"><span v-text="item.name"></span><a :href="item.view" target="_blank" class="download-view button empty text" v-if="item.view">查看演示<i class="b2font b2-arrow-right-s-line "></i></a></div>
                            <ul v-show="item.attrs.length >0">
                                <li v-for="attr in item.attrs">
                                    <span class="download-attr-name">{{attr.name}}：</span>
                                    <span v-html="attr.value"></span>
                                </li>
                            </ul>
                            <div class="download-current">
                                <span>您当前的等级为</span>
                                <span v-if="item.current_user.lv.lv" v-html="item.current_user.lv.lv.icon"></span>
                                <span v-if="item.current_user.lv.vip" v-html="item.current_user.lv.vip.icon"></span>
                                <div class="" v-if="!item.current_user.can.allow">
                                    <span v-if="item.current_user.can.type == 'login'">
                                    登录后免费下载<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'dark_room'">
                                    小黑屋反思中，不准下载！
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'comment'">
                                    评论后刷新页面下载<a href="#respond">评论</a>
                                    </span>
                                    <span v-else-if="item.current_user.lv.lv.lv == 'guest' && !item.current_user.guest">
                                        <span v-show="list[index].rights[0].lv == 'all'" v-cloak>支付<b><template v-if="item.current_user.can.type == 'credit'"><i class="b2font b2-coin-line "></i></template><template v-else>￥</template><i v-html="list[index].current_user.can.value"></i></b>以后下载</span>
                                        请先<a href="javascript:void(0)" onclick="login.show = true;login.loginType = 1">登录</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'full'" class="green">
                                        您今天的下载次数（<b v-text="item.current_user.can.total_count"></b>次）用完了，请明天再来
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'credit'">
                                        支付积分<b><i class="b2font b2-coin-line "></i><i v-html="list[index].current_user.can.value"></i></b>以后下载<a href="javascript:void(0)" @click="credit(index)">立即支付</a>
                                    </span>
                                    <span v-else-if="item.current_user.can.type == 'money'">
                                        支付<b v-text="'￥'+list[index].current_user.can.value"></b>以后下载<a href="javascript:void(0)" @click="pay(index)">立即支付</a>
                                    </span>
                                    
                                    <span v-else>
                                        您当前的用户组不允许下载<a href="https://www.dixunblog.cn/vips" target="_blank">升级会员</a>
                                    </span>
                                </div>
                                <div class="" v-else>
                                    <span v-if="item.current_user.current_guest == 0 || item.current_user.can.free_down" class="green">
                                        您已获得下载权限
                                    </span>
                                    <span class="green" v-else>
                                        您可以每天下载资源<b v-text="item.current_user.can.total_count"></b>次，今日剩余<b v-text="item.current_user.can.count"></b>次
                                    </span>
                                </div>
                            </div>
                            <div class="download-button-box">
                                <button @click="go(b.link,item.current_user.can.allow,item,index)" class="button" v-text="b.name" v-for="b in item.button"></button>
                            </div>
                        </div>
                    </div>
                </div>
                </div>
            </div>
        <p><a href="https://www.dixunblog.cn/1117.html">安卓任意修改水印相机-照片/视频一键修改水印 v1.25.1203 解锁VIP会员版</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dixunblog.cn/1117.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Net Tools-网络运维工具箱</title>
		<link>https://www.dixunblog.cn/1079.html</link>
					<comments>https://www.dixunblog.cn/1079.html#comments</comments>
		
		<dc:creator><![CDATA[老大]]></dc:creator>
		<pubDate>Tue, 30 Dec 2025 07:21:50 +0000</pubDate>
				<category><![CDATA[技术教程]]></category>
		<category><![CDATA[电脑软件]]></category>
		<category><![CDATA[Net Tools]]></category>
		<category><![CDATA[网络运维]]></category>
		<category><![CDATA[运维工具]]></category>
		<guid isPermaLink="false">https://www.dixunblog.cn/?p=1079</guid>

					<description><![CDATA[<p>软件简介 软件名称：Net Tools 版本：1.0.0 应用类型：Electron 桌面应用（Windows） 核心定位：网络运维工具箱，包含 SSH/Telnet/串口终端、批量执行、设备管理、网络工具（Speed Test、端口探测、Ping、IPv4 子网划分等） 功能说明 1) 设备与连接管理 设备列表管理：集中维护设备信息，便于统一运维入口 2) 远程终端能力 多标签会话：同时管理多个设备/会话，切换高效。 网络工具箱（内置常用工具） Speed Test 测速：内置内网测速服务，快速验证链路质量与带宽</p>
<p><a href="https://www.dixunblog.cn/1079.html">Net Tools-网络运维工具箱</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p><strong><span style="font-size: large;"><span style="color: #ff0000;">软件简介</span></span></strong><br />
软件名称：Net Tools<br />
版本：1.0.0<br />
应用类型：Electron 桌面应用（Windows）<br />
核心定位：网络运维工具箱，包含 SSH/Telnet/串口终端、批量执行、设备管理、网络工具（Speed Test、端口探测、Ping、IPv4 子网划分等）<br />
<strong>功能说明</strong><br />
<strong>1) 设备与连接管理</strong></p>
<ul>
<li>设备列表管理：集中维护设备信息，便于统一运维入口</li>
</ul>
<p><strong>2) 远程终端能力</strong></p>
<ul>
<li>多标签会话：同时管理多个设备/会话，切换高效。</li>
</ul>
<p><strong>网络工具箱（内置常用工具）</strong><strong><br />
</strong></p>
<ul>
<li>Speed Test 测速：内置内网测速服务，快速验证链路质量与带宽表现。</li>
<li>等等！！！！</li>
</ul>
<p><strong>软件亮点</strong></p>
<ul>
<li>一站式网络运维工具箱<br />
将“连接 + 终端 + 测试工具”整合在一个应用内，减少在多个工具之间来回切换。</li>
</ul>
<p><strong>常见问题（FAQ）</strong><br />
<strong>Q1：Speed Test 打不开或无法访问</strong></p>
<ul>
<li>检查端口 8888 是否被占用</li>
<li>检查 Windows 防火墙是否阻止</li>
<li>如需局域网访问，确认本机 IP 正确、同网段可达</li>
</ul>
<p><strong><span style="font-size: large;"><span style="color: #ff0000;">软件部分截图（目前发布版本未测试版，会存在部分未知bug问题，有问题可以回帖哈）</span></span></strong><br />
<img loading="lazy" decoding="async" class="size-full wp-image-1080 aligncenter" title="141149rtmm4cttgxgt8sqx" src="http://cdn.hyclive.cn/dixunblog/2025/12/141149rtmm4cttgxgt8sqx.png" alt="141149rtmm4cttgxgt8sqx" width="2774" height="1632" /> <img loading="lazy" decoding="async" class="alignnone size-full wp-image-1082" title="141228djuymofoo0smmxj4" src="http://cdn.hyclive.cn/dixunblog/2025/12/141228djuymofoo0smmxj4.png" alt="141228djuymofoo0smmxj4" width="2774" height="1632" /> <img loading="lazy" decoding="async" class="alignnone size-full wp-image-1081" title="141251fzzb5t5m3h5s3hgg" src="http://cdn.hyclive.cn/dixunblog/2025/12/141251fzzb5t5m3h5s3hgg.png" alt="141251fzzb5t5m3h5s3hgg" width="2774" height="1632" /></p>
<table class="t_table" cellspacing="0">
<tbody>
<tr>
<td><strong><span>更新日志<br />
</span></strong><strong>v1.1.0 (2025-12-27 至 2025-12-29)<br />
</strong>修复与优化：</p>
<ul>
<li><strong>核心功能新增</strong>：<br />
<blockquote><p><span style="color: #6a737d;">分组管理功能：支持设备/列表的分组创建、编辑与展示。</span><br />
<span style="color: #6a737d;">连通性测试进度可视化：新增连通性测试进度条，实时展示测试状态。<br />
远程操作记录存储：支持远程命令执行记录的本地存储（可自定义路径），并兼容 MD（Markdown）格式。<br />
路由追踪特性：新增网络诊断工具——路由追踪（Traceroute），可视化展示数据包路径。<br />
端口扫描导出：端口扫描结果支持导出（格式兼容常用工具），解决重复数据问题。<br />
ping 测试波形图：ping 测试结果新增波形图展示，TCP模拟ping 改为调用系统ping。<br />
集成抓包工具：集成抓包功能。</span></p></blockquote>
</li>
<li><strong>设备管理优化</strong>：
<ul>
<li>批量测试优化<br />
优化批量连通性测试逻辑，解决 相同 IP 无法测试 的问题</li>
<li>稳定性修复<br />
修复连通性测试失败的偶发问题，提升测试成功率</li>
<li>进度可视化<br />
新增连通性测试进度条，实时反馈测试进展</li>
</ul>
</li>
<li><strong>配置与备份优化</strong>：
<ul>
<li>备份可靠性提升<br />
解决配置备份文件乱码问题，移除文件中的控制符（如换行/制表符），优化备份内容排版</li>
<li>对比配置提示<br />
对比配置文件时，仅当文件数量超过 2 个时提示时间问题，避免冗余提示</li>
</ul>
</li>
<li><strong>模板与导入导出优化</strong>：
<ul>
<li>模板分组功能<br />
设备管理导入模板时，支持新增分组。</li>
<li>分组名称优化<br />
优化设备编辑时分组名称过长导致的显示不美观问题。</li>
</ul>
</li>
<li><strong>用户体验优化</strong>：
<ul>
<li>批量执行<br />
华为退出命令由 “exit” 改为 “quit”</li>
<li>性能优化<br />
修复页面刷新重加载时卡死的问题，提升页面响应速度</li>
<li>视觉一致性<br />
网络工具统一界面风格</li>
</ul>
</li>
<li><strong>设备管理优化</strong>：
<ul>
<li>厂商设备支持<br />
优化 Ruijie（锐捷）设备的连接与批量执行功能，解决第三方设备兼容性问题</li>
<li>模板导入导出优化<br />
新增设备管理/命令模板导入功能特性，优化 JSON 格式为csv格式</li>
<li>列表视图增强优化<br />
优化列表默认分组显示（解决默认不显示问题），支持按组展示数据</li>
<li>搜索与筛选优化<br />
增强设备管理的搜索/筛选功能，支持多条件组合查询</li>
</ul>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #ff0000;"><span style="font-size: x-large;">下载链接（本次发布版本为X64便携、安装版，其他系统后续依次上传）：</span><br />
</span><span style="font-size: large;"><span style="font-family: Segoe UI, Tahoma, Geneva, Verdana, sans-serif;"><span><span style="color: #ff0000;"></span></span></span></span></strong></p>
<p><a href="https://www.dixunblog.cn/1079.html">Net Tools-网络运维工具箱</a>最先出现在<a href="https://www.dixunblog.cn">帝讯博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dixunblog.cn/1079.html/feed</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
