[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"consumer-news-detail-927":3,"consumer-news-interaction-927":41,"consumer-news-related-927":44},{"detail":4,"item":36},{"card":5,"schemaVersion":23,"fields":24,"content":30},{"id":6,"kind":7,"targetType":8,"targetId":9,"subtype":7,"typeLabel":10,"title":11,"subtitle":12,"summary":13,"coverUrl":14,"badgeText":15,"href":16,"sourceName":12,"meta":17,"metrics":20,"tags":21,"resolved":22},"NEWS_ARTICLE:927","news","NEWS_ARTICLE",927,"资讯","HelloCrab - 短视频开源爬虫，仅供学习参考","博客园","HelloCrab 基于 Avalonia、Playwright、AI与 FFmpeg 的跨平台桌面采集器，支持9大平台，以及 Android、iOS、Browser 远程控制端。 Made By ChatGPT &amp; Vincent with ❤ 平台 是否接入 哔哩哔哩 ✅ 抖音 ✅ 快手","https:\u002F\u002Fwww.cnblogs.com\u002Fhupo376787\u002Fp\u002FScreenshot\u002FWindows.jpg","","\u002Fnews\u002F927",[18,19],"2026","软件开发",{},[19],true,"consumer-content-detail-v1",{"sourceName":12,"authorName":25,"categoryName":19,"summary":13,"description":13,"publishTime":26,"updateTime":27,"sourceUrl":28,"language":29},"猫叔Vincent","2026-09-11T13:49","2026-09-11T15:21:59","https:\u002F\u002Fwww.cnblogs.com\u002Fhupo376787\u002Fp\u002F22934908","中文",{"format":31,"policy":32,"normalized":22,"html":33,"text":34,"wordCount":35,"hasBody":22},"HTML","NEWS_CONTENT_V1","HelloCrab\n\u003Cp>基于 Avalonia、Playwright、AI与 FFmpeg 的跨平台桌面采集器，支持9大平台，以及 Android、iOS、Browser 远程控制端。\u003Cbr>\u003Cstrong>Made By ChatGPT &amp; Vincent with ❤\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Ctable>\n \u003Cthead>\n  \u003Ctr>\n   \u003Cth>平台\u003C\u002Fth>\n   \u003Cth>是否接入\u003C\u002Fth>\n  \u003C\u002Ftr>\n \u003C\u002Fthead>\n \u003Ctbody>\n  \u003Ctr>\n   \u003Ctd>哔哩哔哩\u003C\u002Ftd>\n   \u003Ctd>✅\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>抖音\u003C\u002Ftd>\n   \u003Ctd>✅\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>快手\u003C\u002Ftd>\n   \u003Ctd>✅\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>微博\u003C\u002Ftd>\n   \u003Ctd>✅\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>小红书\u003C\u002Ftd>\n   \u003Ctd>✅\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>Instagram\u003C\u002Ftd>\n   \u003Ctd>✅\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>Pinterest\u003C\u002Ftd>\n   \u003Ctd>✅\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>X(Twitter)\u003C\u002Ftd>\n   \u003Ctd>🕘\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n   \u003Ctd>Youtube\u003C\u002Ftd>\n   \u003Ctd>🕘\u003C\u002Ftd>\n  \u003C\u002Ftr>\n \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Screenshot\u003C\u002Fh2>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fi1.wp.com\u002Fwww.cnblogs.com\u002Fhupo376787\u002Fp\u002FScreenshot\u002FWindows.jpg?w=720&amp;quality=65&amp;strip=all\" alt=\"\">\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fi1.wp.com\u002Fwww.cnblogs.com\u002Fhupo376787\u002Fp\u002FScreenshot\u002FWindows2.jpg?w=720&amp;quality=65&amp;strip=all\" alt=\"\">\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F298986\u002F202609\u002F298986-20260911134741037-1750652930.jpg?w=720&amp;quality=65&amp;strip=all\" alt=\"Windows\">\u003Cbr>\u003Cimg src=\"https:\u002F\u002Fi1.wp.com\u002Fimg2024.cnblogs.com\u002Fblog\u002F298986\u002F202609\u002F298986-20260911134748236-1314038662.jpg?w=720&amp;quality=65&amp;strip=all\" alt=\"Android2\">\u003C\u002Fp>\n\u003Cblockquote>\n \u003Cp>截至 2026-07-20，HelloCrab 的共同开发已分布在至少4个连续的长对话中，累计经历至少 100 轮需求确认、问题排查、运行反馈与源码迭代。实际协作内容还包括早期的跨平台架构、远程控制、站点解析和下载流程讨论，因此真实轮次可能更多。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2>共同开发历程\u003C\u002Fh2>\n\u003Cp>HelloCrab 不是一次性生成的示例项目，而是在 Vincent 持续提出真实使用问题、验证运行结果并反馈细节后，由 ChatGPT 与 Vincent 共同逐步打磨出来的。主要迭代包括：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>从桌面采集器扩展为 Avalonia 跨平台架构，并增加 Android、iOS、Browser 远程控制端；\u003C\u002Fli>\n \u003Cli>持续完善抖音、TikTok、Pinterest、快手、小红书、微博、美篇、Instagram、哔哩哔哩等站点的作者主页、分页接口、详情数据和媒体解析；\u003C\u002Fli>\n \u003Cli>修复微博滚动、分页延时、页面切换、无头模式、登录状态、历史记录和下载统计等实际运行问题；\u003C\u002Fli>\n \u003Cli>增加按日文件日志、下载历史排序、作者存储统计、完成通知和新下载\u002F更新作品的差异化提示；\u003C\u002Fli>\n \u003Cli>使用 ffprobe 检测视频音轨，并通过 FFmpeg 为无声视频合并背景音乐，同时支持 Windows 后台自动下载安装 FFmpeg；\u003C\u002Fli>\n \u003Cli>使用 YoloDotNet 与 YOLO11 ONNX 模型实现可选的人像检测，支持 10%～95% 置信度滑块（默认 60%），并通过后台检测队列降低对图片下载流程的阻塞；\u003C\u002Fli>\n \u003Cli>优化 Android 端滚动流畅度、移动端布局、远程状态同步、主题切换和高负载功能的风险说明；\u003C\u002Fli>\n \u003Cli>为采集任务、后台检测、临时文件、异常退出恢复和跨作者切换补充更清晰的状态边界与安全保护。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>每一项功能都来自真实需求、日志、截图、异常信息和反复验证。这个项目也记录了人和 AI 通过持续对话共同完成软件设计、实现、排查与改进的过程。\u003C\u002Fp>\n\u003Ch2>项目结构\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>src\u002F\n├─ HelloCrab.Core\u002F\n│  ├─ Models\u002F                         数据模型\n│  ├─ ViewModels\u002F                     桌面主界面 ViewModel\n│  ├─ Views\u002F                          桌面共享界面\n│  ├─ Services\u002F\n│  │  ├─ Browser\u002F                     浏览器自动化公共接口\n│  │  ├─ Crawling\u002F                    采集编排\n│  │  ├─ Downloading\u002F                 下载、索引、无声音频修复流程\n│  │  ├─ History\u002F                     下载历史\n│  │  ├─ Images\u002F                      图片缓存\n│  │  ├─ Media\u002F                       FFmpeg\u002Fffprobe 公共接口\n│  │  ├─ Platform\u002F                    平台外壳公共接口\n│  │  ├─ Settings\u002F                    settings.json\n│  │  └─ Localization\u002F                JSON 语言包扫描、回退与动态切换\n│  ├─ Languages\u002F                      简体中文、英文、日文语言包\n│  ├─ Sites\u002F\n│  │  ├─ Bilibili\u002F                    B站作者分页、DASH最高画质与音视频合并\n│  │  ├─ Douyin\u002F                      抖音解析器与滚动策略\n│  │  ├─ Instagram\u002F                   Instagram GraphQL、视频、单图与轮播解析器\n│  │  ├─ TikTok\u002F                      TikTok item_list、分页与最高分辨率解析器\n│  │  ├─ Pinterest\u002F                   Pinterest Pin、画板分页、最高质量图片与视频解析器\n│  │  ├─ Kuaishou\u002F                    快手主站与 Live 站解析器\n│  │  ├─ Xiaohongshu\u002F                 小红书首屏、分页与详情解析器\n│  │  ├─ Meipian\u002F                      美篇专栏、分页与 ARTICLE_DETAIL 解析器\n│  │  └─ ISiteAdapter.cs              平台适配接口\n│  ├─ Contracts\u002F                      远程 API DTO\n│  └─ Remote\u002F                         Android\u002FiOS\u002FBrowser 共用远程界面\n│\n├─ HelloCrab.Desktop\u002F\n│  ├─ Windows\u002F                         Windows 文件管理器适配\n│  ├─ Linux\u002F                           Linux 文件管理器适配\n│  ├─ macOS\u002F                           macOS Finder 适配\n│  ├─ Playwright\u002F                      浏览器自动化实现\n│  ├─ Chromium\u002F                        Chromium 安装实现\n│  ├─ FFmpeg\u002F                          FFmpeg\u002Fffprobe 实现\n│  ├─ Platform\u002F                        桌面平台选择器\n│  ├─ Remote\u002F                          可启停的 HTTP 远程服务器\n│  ├─ Assets\u002F                          各桌面系统图标\n│  └─ Program.cs \u002F App.axaml           桌面入口\n│\n├─ HelloCrab.Android\u002F         只运行远程控制界面\n├─ HelloCrab.iOS\u002F             只运行远程控制界面\n└─ HelloCrab.Browser\u002F         只运行远程控制界面\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>依赖方向：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Desktop ────────&gt; Core\nAndroid ────────&gt; Core(Remote)\niOS ───────────&gt; Core(Remote)\nBrowser ───────&gt; Core(Remote)\n\nCore 不引用 Microsoft.Playwright、FFmpeg 可执行程序或桌面系统 API。\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>程序目录中的便携数据\u003C\u002Fh2>\n\u003Cp>桌面端运行后，会把需要随程序一起移动的数据直接保存在 exe 根目录：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>HelloCrab\u002F\n├─ HelloCrab.exe\n├─ browser-profile\u002F       Playwright Chromium 登录状态、Cookie 和站点数据\n├─ image-cache\u002F           作者头像、作品封面等界面图片缓存\n├─ Download\u002F              默认下载目录\n├─ History.json           下载历史\n├─ settings.json          程序设置\n├─ Languages\u002F             可复制和编辑的 JSON 界面语言包\n├─ Logs\u002F                  按日日志\n├─ Models\u002F                YOLO ONNX 模型\n└─ ffmpeg\u002Fbin\u002F            自动安装的 ffmpeg.exe 与 ffprobe.exe\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>首次使用此版本且程序目录中还没有 \u003Ccode>browser-profile\u003C\u002Fcode> 时，会尝试从旧目录\u003Cbr>\u003Ccode>%LOCALAPPDATA%\\HelloCrab\\browser-profile\u003C\u002Fcode> 复制已有登录状态。确认新目录登录正常后，旧目录可自行备份或删除。\u003Cbr>\u003Ccode>image-cache\u003C\u002Fcode> 属于可重新生成的数据，可在桌面端“下载设置”中点击“清空图片缓存”。\u003Cbr>\n  作者目录中的 \u003Ccode>crawler-index.json\u003C\u002Fcode> 现在使用稳定的无版本完成键；旧版带版本前缀的记录在首次读取时会自动迁移并从文件中移除。\u003C\u002Fp>\n\u003Ch2>桌面端与远程端的职责\u003C\u002Fh2>\n\u003Ch3>Desktop：完整采集主机\u003C\u002Fh3>\n\u003Cp>Windows、Linux、macOS 共用 \u003Ccode>HelloCrab.Desktop\u003C\u002Fcode>：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>抖音、TikTok、Pinterest、快手、小红书、微博、美篇、Instagram、哔哩哔哩使用 Playwright Chromium 登录与页面采集；\u003C\u002Fli>\n \u003Cli>微博支持普通视频和图文混排视频，优先从 \u003Ccode>media_info.playback_list\u003C\u002Fcode> 选择 4K\u002F2K\u002F1080p 等最高分辨率 MP4；\u003C\u002Fli>\n \u003Cli>捕获作品接口；\u003C\u002Fli>\n \u003Cli>捕获首个作品列表请求后，优先复用当前登录态和响应游标直接请求后续页，跳过不必要的页面渲染；平台动态签名或风控拒绝请求时自动回退原有滚动方式；\u003C\u002Fli>\n \u003Cli>自动滚动作者主页；\u003C\u002Fli>\n \u003Cli>下载视频、图集、封面、音乐；\u003C\u002Fli>\n \u003Cli>Instagram 捕获 \u003Ccode>\u002Fgraphql\u002Fquery\u003C\u002Fcode> 作者时间线，支持单图、Reels 和图片\u002F视频混合轮播；无文案作品仅按发布时间命名；\u003C\u002Fli>\n \u003Cli>TikTok 捕获 \u003Ccode>\u002Fapi\u002Fpost\u002Fitem_list\u002F\u003C\u002Fcode> 作者作品接口，使用 \u003Ccode>hasMore\u002Fcursor\u003C\u002Fcode> 配合页面滚动连续加载，并从 \u003Ccode>video.bitrateInfo[].PlayAddr\u003C\u002Fcode> 选择像素尺寸最大的档位；\u003C\u002Fli>\n \u003Cli>Pinterest 从作者\u002F画板接口收集 Pin ID，使用 \u003Ccode>bookmark\u003C\u002Fcode> 连续滚动，再读取每个 \u003Ccode>\u002Fpin\u002F{id}\u002F\u003C\u002Fcode> 文档中的 \u003Ccode>__PWS_INITIAL_PROPS__\u003C\u002Fcode>，从 \u003Ccode>blocks.video.video_list\u003C\u002Fcode>、故事页、轮播和图片节点选择最高质量媒体；\u003C\u002Fli>\n \u003Cli>Pinterest HLS 由程序自身下载 m3u8、密钥和视频分片，再让 FFmpeg 仅合并本地文件，避免 FFmpeg 未继承浏览器\u002F系统代理时出现 CDN 连接失败；系统 HTTP 请求失败时还会切换到 Playwright 浏览器上下文请求通道；\u003C\u002Fli>\n \u003Cli>哔哩哔哩捕获 \u003Ccode>\u002Fx\u002Fspace\u002Fwbi\u002Farc\u002Fsearch\u003C\u002Fcode> 作者分页，逐条解析视频页 \u003Ccode>window.__playinfo__.data.dash\u003C\u002Fcode>，选择最高分辨率\u002F帧率视频与最高码率音频并使用 FFmpeg 合并；\u003C\u002Fli>\n \u003Cli>可选开启“检测视频是否有声音”：使用 \u003Ccode>ffprobe\u003C\u002Fcode> 检查音轨；\u003C\u002Fli>\n \u003Cli>检测到无音轨视频且作品提供背景音乐时，下载临时音频并由 \u003Ccode>ffmpeg\u003C\u002Fcode> 合并；\u003C\u002Fli>\n \u003Cli>Windows 可在设置区点击“下载 FFmpeg”，后台访问 gyan.dev 构建页并自动安装到程序目录；\u003C\u002Fli>\n \u003Cli>保存下载历史、作者索引和设置；\u003C\u002Fli>\n \u003Cli>浏览器登录数据保存在 exe 同目录的 \u003Ccode>browser-profile\u003C\u002Fcode>，头像和封面缓存保存在 \u003Ccode>image-cache\u003C\u002Fcode>；\u003C\u002Fli>\n \u003Cli>下载设置区提供“清空图片缓存”按钮，只清理 \u003Ccode>image-cache\u003C\u002Fcode>，不影响作品、历史、设置或登录状态；\u003C\u002Fli>\n \u003Cli>正常结束、手动停止或异常中止后，重新统计本次作者已落盘作品数和目录总大小；\u003C\u002Fli>\n \u003Cli>可选开放远程 HTTP 服务器。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Android、iOS、Browser：远程控制器\u003C\u002Fh3>\n\u003Cp>这三个项目不引用 Playwright，也不在手机或 WebAssembly 内下载作品。它们通过 HTTP 调用正在运行的桌面主机，用于：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>查看状态、进度、日志和历史；\u003C\u002Fli>\n \u003Cli>修改桌面主机下载设置；\u003C\u002Fli>\n \u003Cli>安装 Chromium、打开浏览器；\u003C\u002Fli>\n \u003Cli>开始或停止采集。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>JSON 多语言\u003C\u002Fh2>\n\u003Cp>桌面主界面左侧设置区提供独立的“语言”卡片。程序启动时自动扫描运行目录下的 \u003Ccode>Languages\u003C\u002Fcode> 文件夹，并内置以下语言包：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>zh-CN.json   简体中文\nen-US.json   English\nja-JP.json   日本語\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>新增语言不需要修改或重新编译程序：复制任意一个 JSON 文件，修改顶层 \u003Ccode>code\u003C\u002Fcode>、\u003Ccode>displayName\u003C\u002Fcode>、\u003Ccode>sortOrder\u003C\u002Fcode> 和 \u003Ccode>strings\u003C\u002Fcode>，保存到 \u003Ccode>Languages\u003C\u002Fcode> 文件夹，再点击界面的“重新扫描语言包”。自定义语言包缺少的键会自动回退到简体中文；JSON 语法错误或格式占位符错误不会阻止程序启动。\u003C\u002Fp>\n\u003Cp>语言包结构示例：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"code\": \"fr-FR\",\n  \"displayName\": \"Français\",\n  \"sortOrder\": 30,\n  \"strings\": {\n    \"Browser.Open\": \"Ouvrir le navigateur\"\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Windows、Linux、macOS 桌面版共用同一套语言加载逻辑。程序目录不可写时，语言目录自动回退到当前用户的应用数据目录，实际路径会显示在语言设置卡片中。\u003C\u002Fp>\n\u003Ch2>“开放远程控制服务器”开关\u003C\u002Fh2>\n\u003Cp>桌面端设置区新增开关：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>开放远程控制服务器\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>行为如下：\u003C\u002Fp>\n\u003Cul>\n \u003Cli>开启：立即在 \u003Ccode>0.0.0.0:&lt;端口&gt;\u003C\u002Fcode> 启动 HTTP 服务；\u003C\u002Fli>\n \u003Cli>关闭：立即执行 \u003Ccode>StopAsync\u003C\u002Fcode>，释放监听端口；\u003C\u002Fli>\n \u003Cli>关闭后，Android、iOS、Browser 连健康检查都无法请求；\u003C\u002Fli>\n \u003Cli>状态、端口和访问令牌显示在桌面界面；\u003C\u002Fli>\n \u003Cli>开关状态写入 \u003Ccode>settings.json\u003C\u002Fcode>，下次启动自动恢复（Windows 默认程序目录；macOS\u002FLinux 在用户应用数据目录）；\u003C\u002Fli>\n \u003Cli>除 \u003Ccode>\u002Fapi\u002Fhealth\u003C\u002Fcode> 外，请求需要 \u003Ccode>X-SMC-Token\u003C\u002Fcode>。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>相关设置：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  \"remoteApiEnabled\": false,\n  \"remoteApiPort\": 5088,\n  \"remoteApiToken\": \"自动生成的随机令牌\"\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>新安装默认关闭远程服务器，默认端口为 \u003Ccode>5088\u003C\u002Fcode>。局域网客户端填写桌面端显示的地址和令牌。关闭开关后，即使客户端保存了地址和令牌，也无法连接，因为服务器进程已经停止监听。\u003C\u002Fp>\n\u003Ch2>打开解决方案\u003C\u002Fh2>\n\u003Cp>只开发和编译桌面采集器：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>HelloCrab.Desktop.slnx\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>各平台过滤解决方案：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>HelloCrab.Desktop.slnx\nHelloCrab.Browser.slnx\nHelloCrab.Android.slnx\nHelloCrab.iOS.slnx\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>完整解决方案包含 Android 和 iOS；没有对应 workload 的电脑不应直接生成完整解决方案。\u003C\u002Fp>\n\u003Ch2>HotAvalonia 热重载\u003C\u002Fh2>\n\u003Cp>桌面启动项目和包含 AXAML 控件的 Core 项目都已引用：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>&lt;PackageReference Include=\"Avalonia.Markup.Xaml.Loader\" Version=\"12.1.0\" PrivateAssets=\"All\" Publish=\"True\" \u002F&gt;\n&lt;PackageReference Include=\"HotAvalonia\" Version=\"3.1.3\" PrivateAssets=\"All\" Publish=\"True\" \u002F&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>正常以 Debug 方式启动桌面项目后，保存 AXAML 文件即可触发界面热重载。首次打开新项目需要先完成 NuGet 还原。\u003C\u002Fp>\n\u003Ch2>运行桌面端\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>dotnet run --project src\u002FHelloCrab.Desktop\u002FHelloCrab.Desktop.csproj\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>首次运行后，可以点击界面中的“安装 Chromium”。程序默认安装到：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>程序目录\u002Fchromium\u002F\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>启动浏览器时会优先查找该便携目录；若不存在或安装不完整，再兼容查找 Playwright 原来的默认缓存目录。Windows 通常为：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>%LOCALAPPDATA%\\ms-playwright\n# 通常展开为 C:\\Users\\&lt;用户名&gt;\\AppData\\Local\\ms-playwright\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>因此旧安装不需要删除，新安装也可以随 HelloCrab 文件夹一起移动。\u003C\u002Fp>\n\u003Cp>“检测视频是否有声音”默认关闭。Windows 桌面端可以点击设置区的“下载 FFmpeg”，程序会后台访问\u003Cbr>\u003Ccode>https:\u002F\u002Fwww.gyan.dev\u002Fffmpeg\u002Fbuilds\u002F\u003C\u002Fcode>，下载 latest release essentials ZIP，并安装到\u003Cbr>\u003Ccode>程序目录\u002Fffmpeg\u002Fbin\u002F\u003C\u002Fcode>。关闭音轨检测时不会调用 ffmpeg 或 ffprobe。\u003C\u002Fp>\n\u003Cp>FFmpeg 工具查找顺序：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>程序目录\u002Fffmpeg(.exe)、ffprobe(.exe)\n程序目录\u002Fffmpeg\u002F\n程序目录\u002Fffmpeg\u002Fbin\u002F\n程序目录\u002Ftools\u002Fffmpeg\u002F\n程序目录\u002Ftools\u002Fffmpeg\u002Fbin\u002F\n系统 PATH\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>各平台一键打包发布\u003C\u002Fh2>\n\u003Cp>项目已提供统一发布入口，会自动清理旧目录、执行 \u003Ccode>dotnet publish\u003C\u002Fcode>、收集平台产物并压缩到 \u003Ccode>artifacts\u002F\u003C\u002Fcode>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>.\u002Fscripts\u002Fpublish-platform.ps1 -Target win-x64 -Version 1.0.0\n.\u002Fscripts\u002Fpublish-platform.ps1 -Target browser -Version 1.0.0\n.\u002Fscripts\u002Fpublish-platform.ps1 -Target android -Version 1.0.0\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cpre>\u003Ccode>.\u002Fscripts\u002Fpublish-platform.sh linux-x64 Release 1.0.0\n.\u002Fscripts\u002Fpublish-platform.sh osx-arm64 Release 1.0.0\n.\u002Fscripts\u002Fpublish-platform.sh ios Release 1.0.0\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>一次构建全部可用目标：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>.\u002Fscripts\u002Fpublish-all-platforms.ps1 -Version 1.0.0\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cpre>\u003Ccode>.\u002Fscripts\u002Fpublish-all-platforms.sh Release 1.0.0\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Windows 可直接双击 \u003Ccode>one-click-publish\u002F*.bat\u003C\u002Fcode>，macOS 可双击 \u003Ccode>.command\u003C\u002Fcode>。Android 会同时收集 APK 与 AAB；iOS 需要 macOS\u002FXcode 或配对 Mac，并需要有效签名。完整说明见 \u003Ca href=\"https:\u002F\u002Fwww.cnblogs.com\u002Fhupo376787\u002Fp\u002FPUBLISH-ALL-PLATFORMS.md\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">PUBLISH-ALL-PLATFORMS.md\u003C\u002Fa>。\u003C\u002Fp>\n\u003Ch2>发布桌面端\u003C\u002Fh2>\n\u003Cp>PowerShell：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>.\u002Fscripts\u002Fpublish-desktop.ps1 -Runtime win-x64\n.\u002Fscripts\u002Fpublish-desktop.ps1 -Runtime linux-x64\n.\u002Fscripts\u002Fpublish-desktop.ps1 -Runtime osx-arm64\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Bash：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>.\u002Fscripts\u002Fpublish-desktop.sh linux-x64 Release\n.\u002Fscripts\u002Fpublish-desktop.sh osx-arm64 Release\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>一次发布六个 RID：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>.\u002Fscripts\u002Fpublish-all-desktop.ps1\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cpre>\u003Ccode>.\u002Fscripts\u002Fpublish-all-desktop.sh\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>支持：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>win-x64, win-arm64\nlinux-x64, linux-arm64\nosx-x64, osx-arm64\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>发布结果：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Windows: publish\u002Fdesktop\u002Fwin-x64\u002FHelloCrab.exe\nLinux:   publish\u002Fdesktop\u002Flinux-x64\u002FHelloCrab\nmacOS:   publish\u002Fdesktop\u002Fosx-arm64\u002FHelloCrab.app\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>macOS 正式分发仍需在 macOS 上完成签名与公证。Linux 目标机器需要安装 Chromium\u002FAvalonia 所需系统库。\u003C\u002Fp>\n\u003Ch2>Browser 远程端\u003C\u002Fh2>\n\u003Cp>HelloCrab 全部项目统一使用 .NET 10 平台系列：Desktop 与 Core 为 \u003Ccode>net10.0\u003C\u002Fcode>，Browser 为 \u003Ccode>net10.0-browser\u003C\u002Fcode>，Android 为 \u003Ccode>net10.0-android36.0\u003C\u002Fcode>，iOS 为 \u003Ccode>net10.0-ios\u003C\u002Fcode>。编译任意项目都需要安装 .NET 10 SDK；Browser、Android 和 iOS 还需要安装对应 workload。\u003C\u002Fp>\n\u003Cp>Browser 端直接使用思源黑体 Slim 作为默认字体，确保字体程序集和中文字符资源真正进入 WASM 发布产物。首次还原会从 NuGet 下载字体包。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>dotnet --list-sdks\ndotnet workload install wasm-tools\ndotnet restore src\u002FHelloCrab.Browser\u002FHelloCrab.Browser.csproj\ndotnet run --project src\u002FHelloCrab.Browser\u002FHelloCrab.Browser.csproj\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>发布：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>.\u002Fscripts\u002Fpublish-browser.sh\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>浏览器页面连接局域网 HTTP 主机时，浏览器的 Private Network Access、安全上下文或混合内容策略可能要求通过 HTTPS 部署远程页面。桌面服务器关闭时，Browser 端会显示连接失败。\u003C\u002Fp>\n\u003Ch2>Android\u003C\u002Fh2>\n\u003Cp>Android 项目目标为 \u003Ccode>net10.0-android36.0\u003C\u002Fcode>，对应 Avalonia.Android 12.1.0。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>dotnet workload install android\ndotnet workload restore src\u002FHelloCrab.Android\u002FHelloCrab.Android.csproj\ndotnet build src\u002FHelloCrab.Android\u002FHelloCrab.Android.csproj\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>iOS\u003C\u002Fh2>\n\u003Cp>iOS 项目目标为版本浮动的 \u003Ccode>net10.0-ios\u003C\u002Fcode>，对应 Avalonia.iOS 12.1.0。CI 会固定 .NET SDK、iOS workload set 和 Xcode 组合，避免 Runner 更新后出现 SDK 与模拟器运行时不匹配。\u003C\u002Fp>\n\u003Cpre>\u003Ccode>dotnet workload install ios\ndotnet workload restore src\u002FHelloCrab.iOS\u002FHelloCrab.iOS.csproj\ndotnet build src\u002FHelloCrab.iOS\u002FHelloCrab.iOS.csproj\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>iOS 的编译、签名和真机安装需要 macOS 与 Xcode。\u003C\u002Fp>\n\u003Cp>GitHub Actions 的 iOS 构建固定使用 .NET SDK \u003Ccode>10.0.203\u003C\u002Fcode>、workload set \u003Ccode>10.0.203.1\u003C\u002Fcode> 与 Xcode 26.4.x。该组合对应 Runner 中已安装的 iOS 26.4 Simulator runtime。发布脚本通过当前进程的 \u003Ccode>DEVELOPER_DIR\u003C\u002Fcode> 使用 Xcode，不会永久修改 macOS 的全局 Xcode 选择。Xcode 安装在自定义位置时，可先设置 \u003Ccode>HELLOCRAB_XCODE_PATH\u003C\u002Fcode>。\u003C\u002Fp>\n\u003Ch3>下载历史\u003C\u002Fh3>\n\u003Cul>\n \u003Cli>历史文件固定为可执行文件同目录下的 \u003Ccode>History.json\u003C\u002Fcode>。\u003C\u002Fli>\n \u003Cli>首次运行会兼容迁移旧的 \u003Ccode>download-history.json\u003C\u002Fcode>。\u003C\u002Fli>\n \u003Cli>最近发生下载的作者自动移动到列表第一项；仍可手动拖动排序。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>远程端重新连接\u003C\u002Fh2>\n\u003Cp>远程客户端允许在首次连接失败后直接修改主机地址或访问令牌并再次连接，不再修改已发出请求的 \u003Ccode>HttpClient.BaseAddress\u003C\u002Fcode>，因此不会出现 \u003Ccode>net_http_operation_started\u003C\u002Fcode>。同机浏览器可使用 \u003Ccode>http:\u002F\u002F127.0.0.1:5088\u003C\u002Fcode>；手机或其他电脑必须使用桌面端显示的局域网 IP 地址。\u003C\u002Fp>\n\u003Ch2>本次远程端与手机端调整\u003C\u002Fh2>\n\u003Cul>\n \u003Cli>Android 与 iOS 共用 \u003Ccode>HelloCrab.Core.Remote\u003C\u002Fcode> 的远程客户端和界面；桌面 API 监听 \u003Ccode>0.0.0.0:&lt;端口&gt;\u003C\u002Fcode>。\u003C\u002Fli>\n \u003Cli>Android Manifest 已声明 \u003Ccode>INTERNET\u003C\u002Fcode>，并允许访问局域网 HTTP 主机；iOS 已声明本地网络用途并允许本地 HTTP。\u003C\u002Fli>\n \u003Cli>手机原生端会拒绝 \u003Ccode>127.0.0.1\u003C\u002Fcode>、\u003Ccode>::1\u003C\u002Fcode> 和 \u003Ccode>localhost\u003C\u002Fcode>，必须填写桌面端“远程控制服务器”状态中显示的局域网地址。\u003C\u002Fli>\n \u003Cli>网页端和 Android\u002FiOS 顶部提供独立的亮色\u002F暗色切换，不会修改桌面采集主机的主题设置。\u003C\u002Fli>\n \u003Cli>桌面端远程访问令牌右侧提供“复制”按钮。\u003C\u002Fli>\n \u003Cli>settings v3 将“文件名中添加作品 ID”迁移为默认关闭；旧版 settings.json 首次加载时也会执行一次迁移。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>手机仍需与桌面主机网络互通，并在 Windows 防火墙弹窗中允许 HelloCrab 访问专用网络。手机访问地址示例：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>http:\u002F\u002F192.168.1.20:5088\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>自定义远程访问令牌\u003C\u002Fh3>\n\u003Cp>桌面端“远程控制”区域的访问令牌可直接修改。输入 4–64 位字母、数字或 \u003Ccode>. _ @ -\u003C\u002Fcode>，点击“保存”后立即生效并写入 \u003Ccode>settings.json\u003C\u002Fcode>。网页和手机端需要使用新令牌重新连接。\u003C\u002Fp>\n\u003Ch2>Remote UI updates\u003C\u002Fh2>\n\u003Cul>\n \u003Cli>桌面端自定义访问令牌使用紧凑保存图标按钮，不再显示复制按钮。\u003C\u002Fli>\n \u003Cli>Browser、Android、iOS 连接成功后自动读取桌面主机设置；轮询不会覆盖尚未保存的远程编辑。\u003C\u002Fli>\n \u003Cli>远程端使用亮\u002F暗渐变背景，并为连接、启动、停止和保存操作使用更醒目的渐变按钮。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Remote controller local preferences\u003C\u002Fh2>\n\u003Cp>The Browser, Android, and iOS remote controllers remember their own connection settings independently from the desktop crawler settings:\u003C\u002Fp>\n\u003Cul>\n \u003Cli>remote host address;\u003C\u002Fli>\n \u003Cli>remote access token;\u003C\u002Fli>\n \u003Cli>light\u002Fdark controller theme.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The Browser stores these values in \u003Ccode>localStorage\u003C\u002Fcode> for the current site origin. Android and iOS store them in the application's private local-data directory. The values are restored before the remote view is shown on the next launch. The Android\u002FiOS host action buttons and counters use a two-column phone layout.\u003C\u002Fp>\n\u003Ch2>定时自动下载\u003C\u002Fh2>\n\u003Cp>桌面端“采集策略”区域后提供“定时自动下载”设置。界面使用 \u003Ccode>ScheduleEditor 1.0.0\u003C\u002Fcode>，内部通过 FluentScheduler 在当前应用进程中执行计划：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Install-Package ScheduleEditor -Version 1.0.0\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n \u003Cli>\u003Cp>支持每 N 分钟、每 N 小时、每天、每周、每月和 Cron。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>定时任务固定使用无头浏览器在后台运行，不受主界面手动采集的“无头模式”开关影响；正常情况下不会弹出浏览器窗口。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>登录状态失效时会临时显示浏览器窗口供用户重新登录，登录完成后恢复无头模式。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>到点后按照 \u003Ccode>History.json\u003C\u002Fcode> 中的显示顺序，逐个打开作者主页并调用现有重新采集流程。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>配置保存到 settings.json 同目录的 \u003Ccode>scheduled-download.json\u003C\u002Fcode>。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>软件重新启动后会自动读取配置、恢复调度，并在日志中显示下次执行时间。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>定时任务只在 HelloCrab 运行期间执行；软件关闭、电脑关机或休眠期间不会执行。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>定时批处理运行时，原“停止采集”按钮会停止当前作者，并取消后续历史任务。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>HelloCrab 注入自己的 \u003Ccode>IFluentScheduleService\u003C\u002Fcode> 运行时；每天、每周和每月的\u003Cbr>\n    固定时间触发统一使用 FluentScheduler 6 的 \u003Ccode>Everyday().At(...)\u003C\u002Fcode>，避免\u003Cbr>\u003Ccode>Every(1).Days().At(...)\u003C\u002Fcode> 引发 \u003Ccode>Use Everyday instead.\u003C\u002Fcode> 异常。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>安装 Chromium 时界面实时显示 Playwright 当前组件的下载百分比。确认使用程序目录中的便携 Chromium 后，可在关闭程序后删除旧的 \u003Ccode>ms-playwright\u003C\u002Fcode> 缓存。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>下载历史支持按作者名字、作者 ID、平台名称或平台 ID 实时搜索，清空搜索词后恢复全部记录。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>FFmpeg 下载显示百分比、已下载\u002F总大小和速度；PushPlus 标题使用 \u003Ccode>HelloCrab(昵称)下载完成…\u003C\u002Fcode> 格式。\u003C\u002Fp>\u003C\u002Fli>\n \u003Cli>\u003Cp>支持设置作品媒体总下载速度上限（MB\u002Fs），0 表示不限速。\u003C\u002Fp>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>GitHub Actions 全平台发布\u003C\u002Fh2>\n\u003Cp>\u003Ccode>.github\u002Fworkflows\u002Fbuild-all-platforms.yml\u003C\u002Fcode> 会构建桌面端、Browser、Android 和 iOS。推送 \u003Ccode>v*\u003C\u002Fcode> 标签后，会把所有平台产物与 SHA256 校验文件一起发布到 GitHub Release。iOS 默认生成无需签名的 Simulator 包，配置 Apple 签名 Secrets 后还会生成 IPA。详见 \u003Ccode>GITHUB-ACTIONS-RELEASE.md\u003C\u002Fcode>。\u003C\u002Fp>\n\u003Ch2>完整对话记录\u003C\u002Fh2>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641f2e-a20c-83e8-9bb6-eac5d94eed6c\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641f2e-a20c-83e8-9bb6-eac5d94eed6c\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641f80-50e8-83ee-83ae-908b8c9b5934\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641f80-50e8-83ee-83ae-908b8c9b5934\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641f9c-21dc-83ee-964c-e724bd98d917\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641f9c-21dc-83ee-964c-e724bd98d917\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641fb6-4c60-83e8-81d6-e7f0661a6017\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641fb6-4c60-83e8-81d6-e7f0661a6017\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch2>免责声明\u003C\u002Fh2>\n\u003Cp>本项目仅供学习、研究与技术交流使用，不得用于任何违法违规用途。使用者应自行遵守所在地法律法规、目标平台的服务条款，以及与著作权、隐私权和数据使用相关的规定。\u003C\u002Fp>\n\u003Cp>使用者因下载、安装、运行、修改、分发或以其他方式使用本项目而产生的任何直接或间接后果，均由使用者自行判断并承担责任。在适用法律允许的最大范围内，作者及项目贡献者不对由此造成的任何损失、纠纷、账号限制、数据损坏或其他后果承担责任。使用本项目即表示使用者已阅读、理解并接受本免责声明。\u003C\u002Fp>\n\u003Ch2>开源地址\u003C\u002Fh2>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhupo376787\u002FHelloCrab\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">https:\u002F\u002Fgithub.com\u002Fhupo376787\u002FHelloCrab\u003C\u002Fa>\u003C\u002Fp>","HelloCrab 基于 Avalonia、Playwright、AI与 FFmpeg 的跨平台桌面采集器，支持9大平台，以及 Android、iOS、Browser 远程控制端。 Made By ChatGPT & Vincent with ❤ 平台 是否接入 哔哩哔哩 ✅ 抖音 ✅ 快手 ✅ 微博 ✅ 小红书 ✅ Instagram ✅ Pinterest ✅ X(Twitter) 🕘 Youtube 🕘 Screenshot 截至 2026-07-20，HelloCrab 的共同开发已分布在至少4个连续的长对话中，累计经历至少 100 轮需求确认、问题排查、运行反馈与源码迭代。实际协作内容还包括早期的跨平台架构、远程控制、站点解析和下载流程讨论，因此真实轮次可能更多。 共同开发历程 HelloCrab 不是一次性生成的示例项目，而是在 Vincent 持续提出真实使用问题、验证运行结果并反馈细节后，由 ChatGPT 与 Vincent 共同逐步打磨出来的。主要迭代包括： 从桌面采集器扩展为 Avalonia 跨平台架构，并增加 Android、iOS、Browser 远程控制端； 持续完善抖音、TikTok、Pinterest、快手、小红书、微博、美篇、Instagram、哔哩哔哩等站点的作者主页、分页接口、详情数据和媒体解析； 修复微博滚动、分页延时、页面切换、无头模式、登录状态、历史记录和下载统计等实际运行问题； 增加按日文件日志、下载历史排序、作者存储统计、完成通知和新下载\u002F更新作品的差异化提示； 使用 ffprobe 检测视频音轨，并通过 FFmpeg 为无声视频合并背景音乐，同时支持 Windows 后台自动下载安装 FFmpeg； 使用 YoloDotNet 与 YOLO11 ONNX 模型实现可选的人像检测，支持 10%～95% 置信度滑块（默认 60%），并通过后台检测队列降低对图片下载流程的阻塞； 优化 Android 端滚动流畅度、移动端布局、远程状态同步、主题切换和高负载功能的风险说明； 为采集任务、后台检测、临时文件、异常退出恢复和跨作者切换补充更清晰的状态边界与安全保护。 每一项功能都来自真实需求、日志、截图、异常信息和反复验证。这个项目也记录了人和 AI 通过持续对话共同完成软件设计、实现、排查与改进的过程。 项目结构 src\u002F ├─ HelloCrab.Core\u002F │ ├─ Models\u002F 数据模型 │ ├─ ViewModels\u002F 桌面主界面 ViewModel │ ├─ Views\u002F 桌面共享界面 │ ├─ Services\u002F │ │ ├─ Browser\u002F 浏览器自动化公共接口 │ │ ├─ Crawling\u002F 采集编排 │ │ ├─ Downloading\u002F 下载、索引、无声音频修复流程 │ │ ├─ History\u002F 下载历史 │ │ ├─ Images\u002F 图片缓存 │ │ ├─ Media\u002F FFmpeg\u002Fffprobe 公共接口 │ │ ├─ Platform\u002F 平台外壳公共接口 │ │ ├─ Settings\u002F settings.json │ │ └─ Localization\u002F JSON 语言包扫描、回退与动态切换 │ ├─ Languages\u002F 简体中文、英文、日文语言包 │ ├─ Sites\u002F │ │ ├─ Bilibili\u002F B站作者分页、DASH最高画质与音视频合并 │ │ ├─ Douyin\u002F 抖音解析器与滚动策略 │ │ ├─ Instagram\u002F Instagram GraphQL、视频、单图与轮播解析器 │ │ ├─ TikTok\u002F TikTok item_list、分页与最高分辨率解析器 │ │ ├─ Pinterest\u002F Pinterest Pin、画板分页、最高质量图片与视频解析器 │ │ ├─ Kuaishou\u002F 快手主站与 Live 站解析器 │ │ ├─ Xiaohongshu\u002F 小红书首屏、分页与详情解析器 │ │ ├─ Meipian\u002F 美篇专栏、分页与 ARTICLE_DETAIL 解析器 │ │ └─ ISiteAdapter.cs 平台适配接口 │ ├─ Contracts\u002F 远程 API DTO │ └─ Remote\u002F Android\u002FiOS\u002FBrowser 共用远程界面 │ ├─ HelloCrab.Desktop\u002F │ ├─ Windows\u002F Windows 文件管理器适配 │ ├─ Linux\u002F Linux 文件管理器适配 │ ├─ macOS\u002F macOS Finder 适配 │ ├─ Playwright\u002F 浏览器自动化实现 │ ├─ Chromium\u002F Chromium 安装实现 │ ├─ FFmpeg\u002F FFmpeg\u002Fffprobe 实现 │ ├─ Platform\u002F 桌面平台选择器 │ ├─ Remote\u002F 可启停的 HTTP 远程服务器 │ ├─ Assets\u002F 各桌面系统图标 │ └─ Program.cs \u002F App.axaml 桌面入口 │ ├─ HelloCrab.Android\u002F 只运行远程控制界面 ├─ HelloCrab.iOS\u002F 只运行远程控制界面 └─ HelloCrab.Browser\u002F 只运行远程控制界面 依赖方向： Desktop ────────> Core Android ────────> Core(Remote) iOS ───────────> Core(Remote) Browser ───────> Core(Remote) Core 不引用 Microsoft.Playwright、FFmpeg 可执行程序或桌面系统 API。 程序目录中的便携数据 桌面端运行后，会把需要随程序一起移动的数据直接保存在 exe 根目录： HelloCrab\u002F ├─ HelloCrab.exe ├─ browser-profile\u002F Playwright Chromium 登录状态、Cookie 和站点数据 ├─ image-cache\u002F 作者头像、作品封面等界面图片缓存 ├─ Download\u002F 默认下载目录 ├─ History.json 下载历史 ├─ settings.json 程序设置 ├─ Languages\u002F 可复制和编辑的 JSON 界面语言包 ├─ Logs\u002F 按日日志 ├─ Models\u002F YOLO ONNX 模型 └─ ffmpeg\u002Fbin\u002F 自动安装的 ffmpeg.exe 与 ffprobe.exe 首次使用此版本且程序目录中还没有 browser-profile 时，会尝试从旧目录 %LOCALAPPDATA%\\HelloCrab\\browser-profile 复制已有登录状态。确认新目录登录正常后，旧目录可自行备份或删除。 image-cache 属于可重新生成的数据，可在桌面端“下载设置”中点击“清空图片缓存”。 作者目录中的 crawler-index.json 现在使用稳定的无版本完成键；旧版带版本前缀的记录在首次读取时会自动迁移并从文件中移除。 桌面端与远程端的职责 Desktop：完整采集主机 Windows、Linux、macOS 共用 HelloCrab.Desktop： 抖音、TikTok、Pinterest、快手、小红书、微博、美篇、Instagram、哔哩哔哩使用 Playwright Chromium 登录与页面采集； 微博支持普通视频和图文混排视频，优先从 media_info.playback_list 选择 4K\u002F2K\u002F1080p 等最高分辨率 MP4； 捕获作品接口； 捕获首个作品列表请求后，优先复用当前登录态和响应游标直接请求后续页，跳过不必要的页面渲染；平台动态签名或风控拒绝请求时自动回退原有滚动方式； 自动滚动作者主页； 下载视频、图集、封面、音乐； Instagram 捕获 \u002Fgraphql\u002Fquery 作者时间线，支持单图、Reels 和图片\u002F视频混合轮播；无文案作品仅按发布时间命名； TikTok 捕获 \u002Fapi\u002Fpost\u002Fitem_list\u002F 作者作品接口，使用 hasMore\u002Fcursor 配合页面滚动连续加载，并从 video.bitrateInfo[].PlayAddr 选择像素尺寸最大的档位； Pinterest 从作者\u002F画板接口收集 Pin ID，使用 bookmark 连续滚动，再读取每个 \u002Fpin\u002F{id}\u002F 文档中的 __PWS_INITIAL_PROPS__，从 blocks.video.video_list、故事页、轮播和图片节点选择最高质量媒体； Pinterest HLS 由程序自身下载 m3u8、密钥和视频分片，再让 FFmpeg 仅合并本地文件，避免 FFmpeg 未继承浏览器\u002F系统代理时出现 CDN 连接失败；系统 HTTP 请求失败时还会切换到 Playwright 浏览器上下文请求通道； 哔哩哔哩捕获 \u002Fx\u002Fspace\u002Fwbi\u002Farc\u002Fsearch 作者分页，逐条解析视频页 window.__playinfo__.data.dash，选择最高分辨率\u002F帧率视频与最高码率音频并使用 FFmpeg 合并； 可选开启“检测视频是否有声音”：使用 ffprobe 检查音轨； 检测到无音轨视频且作品提供背景音乐时，下载临时音频并由 ffmpeg 合并； Windows 可在设置区点击“下载 FFmpeg”，后台访问 gyan.dev 构建页并自动安装到程序目录； 保存下载历史、作者索引和设置； 浏览器登录数据保存在 exe 同目录的 browser-profile，头像和封面缓存保存在 image-cache； 下载设置区提供“清空图片缓存”按钮，只清理 image-cache，不影响作品、历史、设置或登录状态； 正常结束、手动停止或异常中止后，重新统计本次作者已落盘作品数和目录总大小； 可选开放远程 HTTP 服务器。 Android、iOS、Browser：远程控制器 这三个项目不引用 Playwright，也不在手机或 WebAssembly 内下载作品。它们通过 HTTP 调用正在运行的桌面主机，用于： 查看状态、进度、日志和历史； 修改桌面主机下载设置； 安装 Chromium、打开浏览器； 开始或停止采集。 JSON 多语言 桌面主界面左侧设置区提供独立的“语言”卡片。程序启动时自动扫描运行目录下的 Languages 文件夹，并内置以下语言包： zh-CN.json 简体中文 en-US.json English ja-JP.json 日本語 新增语言不需要修改或重新编译程序：复制任意一个 JSON 文件，修改顶层 code、displayName、sortOrder 和 strings，保存到 Languages 文件夹，再点击界面的“重新扫描语言包”。自定义语言包缺少的键会自动回退到简体中文；JSON 语法错误或格式占位符错误不会阻止程序启动。 语言包结构示例： { \"code\": \"fr-FR\", \"displayName\": \"Français\", \"sortOrder\": 30, \"strings\": { \"Browser.Open\": \"Ouvrir le navigateur\" } } Windows、Linux、macOS 桌面版共用同一套语言加载逻辑。程序目录不可写时，语言目录自动回退到当前用户的应用数据目录，实际路径会显示在语言设置卡片中。 “开放远程控制服务器”开关 桌面端设置区新增开关： 开放远程控制服务器 行为如下： 开启：立即在 0.0.0.0:\u003C端口> 启动 HTTP 服务； 关闭：立即执行 StopAsync，释放监听端口； 关闭后，Android、iOS、Browser 连健康检查都无法请求； 状态、端口和访问令牌显示在桌面界面； 开关状态写入 settings.json，下次启动自动恢复（Windows 默认程序目录；macOS\u002FLinux 在用户应用数据目录）； 除 \u002Fapi\u002Fhealth 外，请求需要 X-SMC-Token。 相关设置： { \"remoteApiEnabled\": false, \"remoteApiPort\": 5088, \"remoteApiToken\": \"自动生成的随机令牌\" } 新安装默认关闭远程服务器，默认端口为 5088。局域网客户端填写桌面端显示的地址和令牌。关闭开关后，即使客户端保存了地址和令牌，也无法连接，因为服务器进程已经停止监听。 打开解决方案 只开发和编译桌面采集器： HelloCrab.Desktop.slnx 各平台过滤解决方案： HelloCrab.Desktop.slnx HelloCrab.Browser.slnx HelloCrab.Android.slnx HelloCrab.iOS.slnx 完整解决方案包含 Android 和 iOS；没有对应 workload 的电脑不应直接生成完整解决方案。 HotAvalonia 热重载 桌面启动项目和包含 AXAML 控件的 Core 项目都已引用： \u003CPackageReference Include=\"Avalonia.Markup.Xaml.Loader\" Version=\"12.1.0\" PrivateAssets=\"All\" Publish=\"True\" \u002F> \u003CPackageReference Include=\"HotAvalonia\" Version=\"3.1.3\" PrivateAssets=\"All\" Publish=\"True\" \u002F> 正常以 Debug 方式启动桌面项目后，保存 AXAML 文件即可触发界面热重载。首次打开新项目需要先完成 NuGet 还原。 运行桌面端 dotnet run --project src\u002FHelloCrab.Desktop\u002FHelloCrab.Desktop.csproj 首次运行后，可以点击界面中的“安装 Chromium”。程序默认安装到： 程序目录\u002Fchromium\u002F 启动浏览器时会优先查找该便携目录；若不存在或安装不完整，再兼容查找 Playwright 原来的默认缓存目录。Windows 通常为： %LOCALAPPDATA%\\ms-playwright # 通常展开为 C:\\Users\\\u003C用户名>\\AppData\\Local\\ms-playwright 因此旧安装不需要删除，新安装也可以随 HelloCrab 文件夹一起移动。 “检测视频是否有声音”默认关闭。Windows 桌面端可以点击设置区的“下载 FFmpeg”，程序会后台访问 https:\u002F\u002Fwww.gyan.dev\u002Fffmpeg\u002Fbuilds\u002F，下载 latest release essentials ZIP，并安装到 程序目录\u002Fffmpeg\u002Fbin\u002F。关闭音轨检测时不会调用 ffmpeg 或 ffprobe。 FFmpeg 工具查找顺序： 程序目录\u002Fffmpeg(.exe)、ffprobe(.exe) 程序目录\u002Fffmpeg\u002F 程序目录\u002Fffmpeg\u002Fbin\u002F 程序目录\u002Ftools\u002Fffmpeg\u002F 程序目录\u002Ftools\u002Fffmpeg\u002Fbin\u002F 系统 PATH 各平台一键打包发布 项目已提供统一发布入口，会自动清理旧目录、执行 dotnet publish、收集平台产物并压缩到 artifacts\u002F： .\u002Fscripts\u002Fpublish-platform.ps1 -Target win-x64 -Version 1.0.0 .\u002Fscripts\u002Fpublish-platform.ps1 -Target browser -Version 1.0.0 .\u002Fscripts\u002Fpublish-platform.ps1 -Target android -Version 1.0.0 .\u002Fscripts\u002Fpublish-platform.sh linux-x64 Release 1.0.0 .\u002Fscripts\u002Fpublish-platform.sh osx-arm64 Release 1.0.0 .\u002Fscripts\u002Fpublish-platform.sh ios Release 1.0.0 一次构建全部可用目标： .\u002Fscripts\u002Fpublish-all-platforms.ps1 -Version 1.0.0 .\u002Fscripts\u002Fpublish-all-platforms.sh Release 1.0.0 Windows 可直接双击 one-click-publish\u002F*.bat，macOS 可双击 .command。Android 会同时收集 APK 与 AAB；iOS 需要 macOS\u002FXcode 或配对 Mac，并需要有效签名。完整说明见 PUBLISH-ALL-PLATFORMS.md。 发布桌面端 PowerShell： .\u002Fscripts\u002Fpublish-desktop.ps1 -Runtime win-x64 .\u002Fscripts\u002Fpublish-desktop.ps1 -Runtime linux-x64 .\u002Fscripts\u002Fpublish-desktop.ps1 -Runtime osx-arm64 Bash： .\u002Fscripts\u002Fpublish-desktop.sh linux-x64 Release .\u002Fscripts\u002Fpublish-desktop.sh osx-arm64 Release 一次发布六个 RID： .\u002Fscripts\u002Fpublish-all-desktop.ps1 .\u002Fscripts\u002Fpublish-all-desktop.sh 支持： win-x64, win-arm64 linux-x64, linux-arm64 osx-x64, osx-arm64 发布结果： Windows: publish\u002Fdesktop\u002Fwin-x64\u002FHelloCrab.exe Linux: publish\u002Fdesktop\u002Flinux-x64\u002FHelloCrab macOS: publish\u002Fdesktop\u002Fosx-arm64\u002FHelloCrab.app macOS 正式分发仍需在 macOS 上完成签名与公证。Linux 目标机器需要安装 Chromium\u002FAvalonia 所需系统库。 Browser 远程端 HelloCrab 全部项目统一使用 .NET 10 平台系列：Desktop 与 Core 为 net10.0，Browser 为 net10.0-browser，Android 为 net10.0-android36.0，iOS 为 net10.0-ios。编译任意项目都需要安装 .NET 10 SDK；Browser、Android 和 iOS 还需要安装对应 workload。 Browser 端直接使用思源黑体 Slim 作为默认字体，确保字体程序集和中文字符资源真正进入 WASM 发布产物。首次还原会从 NuGet 下载字体包。 dotnet --list-sdks dotnet workload install wasm-tools dotnet restore src\u002FHelloCrab.Browser\u002FHelloCrab.Browser.csproj dotnet run --project src\u002FHelloCrab.Browser\u002FHelloCrab.Browser.csproj 发布： .\u002Fscripts\u002Fpublish-browser.sh 浏览器页面连接局域网 HTTP 主机时，浏览器的 Private Network Access、安全上下文或混合内容策略可能要求通过 HTTPS 部署远程页面。桌面服务器关闭时，Browser 端会显示连接失败。 Android Android 项目目标为 net10.0-android36.0，对应 Avalonia.Android 12.1.0。 dotnet workload install android dotnet workload restore src\u002FHelloCrab.Android\u002FHelloCrab.Android.csproj dotnet build src\u002FHelloCrab.Android\u002FHelloCrab.Android.csproj iOS iOS 项目目标为版本浮动的 net10.0-ios，对应 Avalonia.iOS 12.1.0。CI 会固定 .NET SDK、iOS workload set 和 Xcode 组合，避免 Runner 更新后出现 SDK 与模拟器运行时不匹配。 dotnet workload install ios dotnet workload restore src\u002FHelloCrab.iOS\u002FHelloCrab.iOS.csproj dotnet build src\u002FHelloCrab.iOS\u002FHelloCrab.iOS.csproj iOS 的编译、签名和真机安装需要 macOS 与 Xcode。 GitHub Actions 的 iOS 构建固定使用 .NET SDK 10.0.203、workload set 10.0.203.1 与 Xcode 26.4.x。该组合对应 Runner 中已安装的 iOS 26.4 Simulator runtime。发布脚本通过当前进程的 DEVELOPER_DIR 使用 Xcode，不会永久修改 macOS 的全局 Xcode 选择。Xcode 安装在自定义位置时，可先设置 HELLOCRAB_XCODE_PATH。 下载历史 历史文件固定为可执行文件同目录下的 History.json。 首次运行会兼容迁移旧的 download-history.json。 最近发生下载的作者自动移动到列表第一项；仍可手动拖动排序。 远程端重新连接 远程客户端允许在首次连接失败后直接修改主机地址或访问令牌并再次连接，不再修改已发出请求的 HttpClient.BaseAddress，因此不会出现 net_http_operation_started。同机浏览器可使用 http:\u002F\u002F127.0.0.1:5088；手机或其他电脑必须使用桌面端显示的局域网 IP 地址。 本次远程端与手机端调整 Android 与 iOS 共用 HelloCrab.Core.Remote 的远程客户端和界面；桌面 API 监听 0.0.0.0:\u003C端口>。 Android Manifest 已声明 INTERNET，并允许访问局域网 HTTP 主机；iOS 已声明本地网络用途并允许本地 HTTP。 手机原生端会拒绝 127.0.0.1、::1 和 localhost，必须填写桌面端“远程控制服务器”状态中显示的局域网地址。 网页端和 Android\u002FiOS 顶部提供独立的亮色\u002F暗色切换，不会修改桌面采集主机的主题设置。 桌面端远程访问令牌右侧提供“复制”按钮。 settings v3 将“文件名中添加作品 ID”迁移为默认关闭；旧版 settings.json 首次加载时也会执行一次迁移。 手机仍需与桌面主机网络互通，并在 Windows 防火墙弹窗中允许 HelloCrab 访问专用网络。手机访问地址示例： http:\u002F\u002F192.168.1.20:5088 自定义远程访问令牌 桌面端“远程控制”区域的访问令牌可直接修改。输入 4–64 位字母、数字或 . _ @ -，点击“保存”后立即生效并写入 settings.json。网页和手机端需要使用新令牌重新连接。 Remote UI updates 桌面端自定义访问令牌使用紧凑保存图标按钮，不再显示复制按钮。 Browser、Android、iOS 连接成功后自动读取桌面主机设置；轮询不会覆盖尚未保存的远程编辑。 远程端使用亮\u002F暗渐变背景，并为连接、启动、停止和保存操作使用更醒目的渐变按钮。 Remote controller local preferences The Browser, Android, and iOS remote controllers remember their own connection settings independently from the desktop crawler settings: remote host address; remote access token; light\u002Fdark controller theme. The Browser stores these values in localStorage for the current site origin. Android and iOS store them in the application's private local-data directory. The values are restored before the remote view is shown on the next launch. The Android\u002FiOS host action buttons and counters use a two-column phone layout. 定时自动下载 桌面端“采集策略”区域后提供“定时自动下载”设置。界面使用 ScheduleEditor 1.0.0，内部通过 FluentScheduler 在当前应用进程中执行计划： Install-Package ScheduleEditor -Version 1.0.0 支持每 N 分钟、每 N 小时、每天、每周、每月和 Cron。 定时任务固定使用无头浏览器在后台运行，不受主界面手动采集的“无头模式”开关影响；正常情况下不会弹出浏览器窗口。 登录状态失效时会临时显示浏览器窗口供用户重新登录，登录完成后恢复无头模式。 到点后按照 History.json 中的显示顺序，逐个打开作者主页并调用现有重新采集流程。 配置保存到 settings.json 同目录的 scheduled-download.json。 软件重新启动后会自动读取配置、恢复调度，并在日志中显示下次执行时间。 定时任务只在 HelloCrab 运行期间执行；软件关闭、电脑关机或休眠期间不会执行。 定时批处理运行时，原“停止采集”按钮会停止当前作者，并取消后续历史任务。 HelloCrab 注入自己的 IFluentScheduleService 运行时；每天、每周和每月的 固定时间触发统一使用 FluentScheduler 6 的 Everyday().At(...)，避免 Every(1).Days().At(...) 引发 Use Everyday instead. 异常。 安装 Chromium 时界面实时显示 Playwright 当前组件的下载百分比。确认使用程序目录中的便携 Chromium 后，可在关闭程序后删除旧的 ms-playwright 缓存。 下载历史支持按作者名字、作者 ID、平台名称或平台 ID 实时搜索，清空搜索词后恢复全部记录。 FFmpeg 下载显示百分比、已下载\u002F总大小和速度；PushPlus 标题使用 HelloCrab(昵称)下载完成… 格式。 支持设置作品媒体总下载速度上限（MB\u002Fs），0 表示不限速。 GitHub Actions 全平台发布 .github\u002Fworkflows\u002Fbuild-all-platforms.yml 会构建桌面端、Browser、Android 和 iOS。推送 v* 标签后，会把所有平台产物与 SHA256 校验文件一起发布到 GitHub Release。iOS 默认生成无需签名的 Simulator 包，配置 Apple 签名 Secrets 后还会生成 IPA。详见 GITHUB-ACTIONS-RELEASE.md。 完整对话记录 https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641f2e-a20c-83e8-9bb6-eac5d94eed6c https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641f80-50e8-83ee-83ae-908b8c9b5934 https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641f9c-21dc-83ee-964c-e724bd98d917 https:\u002F\u002Fchatgpt.com\u002Fshare\u002F6a641fb6-4c60-83e8-81d6-e7f0661a6017 免责声明 本项目仅供学习、研究与技术交流使用，不得用于任何违法违规用途。使用者应自行遵守所在地法律法规、目标平台的服务条款，以及与著作权、隐私权和数据使用相关的规定。 使用者因下载、安装、运行、修改、分发或以其他方式使用本项目而产生的任何直接或间接后果，均由使用者自行判断并承担责任。在适用法律允许的最大范围内，作者及项目贡献者不对由此造成的任何损失、纠纷、账号限制、数据损坏或其他后果承担责任。使用本项目即表示使用者已阅读、理解并接受本免责声明。 开源地址 https:\u002F\u002Fgithub.com\u002Fhupo376787\u002FHelloCrab",11108,{"id":6,"kind":7,"title":11,"summary":13,"image":14,"href":16,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":40},"2026 · 软件开发","#2563eb","16 \u002F 10",[19],{"targetType":8,"targetId":9,"likedByMe":42,"likeCount":43,"commentCount":43,"contentLikeCount":43,"contentCommentCount":43,"sourceLikeCount":43,"sourceCommentCount":43},false,0,[45,51,58,65,72,78,84,91],{"id":46,"kind":7,"title":47,"summary":48,"image":15,"href":49,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":50},"NEWS_ARTICLE:929",".NET 异常处理的\"暗门\"：代码里写满 catch，你依然能抓住它——从一个 AI Agent 运行时的源码说起","一个健壮的系统，必然到处都是有意的 catch；异常被消化不等于问题不存在。 观测与韧性，是一个硬币的两面——降级逻辑保证系统不崩，FirstChance 保证你能看见它为什么降级。","\u002Fnews\u002F929",[19],{"id":52,"kind":7,"title":53,"summary":54,"image":55,"href":56,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":57},"NEWS_ARTICLE:933","写给 C++ 工程师的 OpenClaw.NET 上手指南：用你熟悉的 C++ 思维，跑起一个生产级 AI Agent","它像一个「基于 boost.asio + REST 端点的常驻服务」——对外是 HTTP \u002F WebSocket \u002F 各 IM 的 webhook，对内跑着一个能调工具、读写记忆、跨渠道对话的 AI Agent——只不过协程不用你手写 promise_type，内存不用你管 new\u002Fdelete。","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F510\u002F202609\u002F510-20260905070811424-1837144874.jpg","\u002Fnews\u002F933",[19],{"id":59,"kind":7,"title":60,"summary":61,"image":62,"href":63,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":64},"NEWS_ARTICLE:952",".NET 11 RC1 发布：拿到\"准生证\"，生产环境可以上了！","从 Preview 1 到 RC1，.NET 11 的拼图基本完整了：Runtime Async 反超状态机模型、CoreCLR 登陆 WebAssembly、CLI 全面 NativeAOT 化（dotnet tool list 快 5.5 倍）、C# 15 补齐 union 和 labeled","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F510\u002F202609\u002F510-20260909153805786-850851443.png","\u002Fnews\u002F952",[19],{"id":66,"kind":7,"title":67,"summary":68,"image":69,"href":70,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":71},"NEWS_ARTICLE:961","从零搭建ELK日志采集系统：Filebeat + Logstash + ES + Kibana 保姆级教程","轻量级架构，一份配置全搞定 一、前言 你是不是还在用 tail -f 和 grep 在多台服务器上翻日志？系统一出问题，就要登录三五台机器，来回切换窗口，定位一个Bug耗时半小时。 ELK 是业界最成熟的日志集中管理方案。本文将带你用 Docker Compose 一键部署 Filebeat + L","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F1465907\u002F202609\u002F1465907-20260909162947190-195439361.png","\u002Fnews\u002F961",[19],{"id":73,"kind":7,"title":74,"summary":75,"image":55,"href":76,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":77},"NEWS_ARTICLE:980","写给 Rust 工程师的 OpenClaw.NET 上手指南：用你熟悉的 Rust 思维，跑起一个生产级 AI Agent","它像一个「axum 应用」——对外是 HTTP \u002F WebSocket \u002F 各 IM 的 webhook，对内跑着一个能调工具、读写记忆、跨渠道对话的 AI Agent——只不过 async 不用选 runtime，也不用和借用检查器格斗。","\u002Fnews\u002F980",[19],{"id":79,"kind":7,"title":80,"summary":81,"image":15,"href":82,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":83},"NEWS_ARTICLE:999","Vane.Dispatch 1.0.0 发布：一个与容器、传输层零耦合的 .NET 服务分发引擎","Vane.Dispatch 1.0.0 发布：一个与容器、传输层零耦合的 .NET 服务分发引擎 它的前身，可以追溯到一个叫 Ndf 的项目。从那时算起，已经过去了十多年。今天，它以 Vane.Dispatch 1.0.0 的名字正式发布。 序：十年磨一剑 做后端的人大抵都绕不开同一个问题：如何把&","\u002Fnews\u002F999",[19],{"id":85,"kind":7,"title":86,"summary":87,"image":88,"href":89,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":90},"NEWS_ARTICLE:1002","从对标 Java 到对标 Go：Native AOT 的\"无痛化\"之路，走到哪一站了？","从 .NET 7 的 demo 到 .NET 12 的无痛化，这条路要走五年。慢吗？慢。但对比一下：Java 的 GraalVM Native Image 折腾了更久，至今 Spring 生态的 AOT 体验仍在打补丁；Go 则是天生就站在终点线上——.NET 是在背着二十年的反射遗产追赶一个轻装上","https:\u002F\u002Fimg2024.cnblogs.com\u002Fblog\u002F510\u002F202609\u002F510-20260907133134585-1733425989.png","\u002Fnews\u002F1002",[19],{"id":92,"kind":7,"title":93,"summary":94,"image":15,"href":95,"meta":37,"badge":10,"author":12,"stats":-1,"accent":38,"coverRatio":39,"tags":96},"NEWS_ARTICLE:1012","java 多线程开发系列之八：玩转多线程（线程的中断）","之前的线程协作，讲的是通过wait和notify方法，多线程之间进行互相条件唤醒的办法。除此之外我们还需要进行中断操作。等待和唤醒可参考前文https:\u002F\u002Fwww.cnblogs.com\u002Fjilodream\u002Fp\u002F22770136设想这样一个场景：长工在给地主家干活，日出而作，日落而息。思路很简单：","\u002Fnews\u002F1012",[19]]