OpenHarmony上跑Flutter做字典查询:跨端复用的实战指南
OpenHarmony 上跑 Flutter做字典查询到底值不值我先说结论值而且比你想的省事。这套组合让我用一套 Dart 代码同时覆盖了移动端的日常需求又在 OpenHarmony 设备上直接跑通了从搜索到详情页的完整链路。这篇文章从环境准备、搜索交互、数据组织到详情渲染把整个实现过程从头到尾拆开讲适合想在这条路上少踩坑的人参考。1. 为什么在 OpenHarmony 上还要用 Flutter而不是直接 ArkTS1.1 跨端复用不是唯一理由维护成本才是很多人一听 OpenHarmony第一反应就是用 ArkTS 重写一套。如果是全新项目这没问题。但如果你已经有 Flutter 的代码资产或者团队主力在 Flutter 上那在 OpenHarmony 上引入 Flutter 的第一优先级不是“跨端炫技”而是降低维护成本。字典查询这类工具型应用逻辑并不复杂核心是三块词库查询、结果展示、词条详情。这三大块在 Flutter 里一旦写稳ArkTS 那边几乎不用再动。后续改 UI、加词库、调搜索逻辑Flutter 里改完两个端同时生效省掉的开发时间是实打实的。1.2 Flutter for OpenHarmony 的现状与选型判断Flutter for OpenHarmony 是社区为 OpenHarmony 移植的 Flutter 引擎分支它不替代官方 Flutter而是让 Flutter 应用能跑在 OpenHarmony 设备上。选型时我评估了几个维度供你参考评估项判断API 对齐度Flutter 核心 API 基本可用但部分插件需要单独适配渲染性能自绘引擎列表和动画表现不错和原生差距可接受生态插件官方插件有一部分能用纯 OpenHarmony 插件仍在补全中维护活跃度更新节奏稳定大型应用已有落地案例学习成本会 Flutter 就能上手不需要额外学 ArkTS 语法我用的是某设备上跑 OpenHarmony 的模拟器做验证整体 UI 流畅度没有问题。特别说明一下环境搭建需要耐心因为 Flutter for OpenHarmony 的工程结构和官方 Flutter 有差异很多配置项一旦对不上编译期会直接抛错。2. 环境准备Flutter for OpenHarmony 的搭建过程和最容易翻车的三处2.1 版本组合和下载渠道先明确一点Flutter for OpenHarmony 不是从官方 Flutter SDK 直接拉下来的它有独立的仓库和维护分支。我使用的版本组合是 OpenHarmony SDK 配合 Flutter 的 OpenHarmony 分支IDE 用的是 DevEco Studio 配套的版本。搭建过程可以浓缩成四步安装 OpenHarmony SDK配置好环境变量。拉取 Flutter 的 OpenHarmony 分支代码切换到稳定标签。在 Flutter 工程里启用 OpenHarmony 平台的编译支持。用 DevEco 打开生成的 ohos 工程目录连接设备或模拟器运行。这四步看起来简单实际操作时每一步都有细节。先说最容易翻车的第一处环境变量配对。OpenHarmony SDK 需要的OHOS_SDK_HOME路径必须指向你实际安装 SDK 的目录路径不能带空格否则构建脚本会在解析依赖时直接卡死。2.2 翻车点NDK 版本和 C 编译链第二处容易翻车的是 NDK 版本。Flutter 引擎在 OpenHarmony 上需要依赖 OpenHarmony 提供的 Native 编译链如果你本机还装了别的 NDK版本冲突会导致引擎编出来的 so 文件在运行时崩溃。我在第一次真机尝试时就遇到libflutter.so加载失败最终发现是 NDK 版本太新和 OpenHarmony 的 C 接口不兼容。解决办法是严格按照 Flutter for OpenHarmony 仓库文档里锁定的 NDK 版本安装不要随手拿最新的用。这属于“文档怎么写你就怎么来”的典型场景自由发挥的成本很高。2.3 翻车点签名配置和模拟器选择第三处是签名。OpenHarmony 的调试运行和真机安装绕不开签名配置模拟器可以直接走 auto signature但真机调试如果没配好签名应用会一直卡在安装阶段。我一开始没配签名直接跑真机控制台报错内容还很迷惑不是“签名错误”而是“安装失败”排查了好一阵子才发现是 keystore 没有配置到 Build 配置里。提示先用模拟器跑通全流程再上真机。模拟器能帮你过滤掉大部分环境问题真机保留的才是真正的运行时问题。3. 搜索交互设计从输入框到候选词联想这一层决定了 App 的观感3.1 搜索框的基础布局与输入监听字典查询 App 里搜索是用户接触最多的部分。我用 Flutter 的TextField做了搜索入口配置了圆角背景、左侧搜索图标、右侧清空按钮。这样一个基础布局代码量不大但体验细节都在代码之外。搜索触发逻辑我用的是onChanged监听而不是提交按钮。因为字典查询场景里用户输入一个字母就想看到候选词每多一步点击都会增加无谓的操作成本。监听输入变化的代码结构大致是TextField( controller: _searchController, onChanged: (value) { // 进入防抖逻辑不要在这里直接查词库 _debounce(value); }, decoration: InputDecoration( hintText: 输入英文单词或中文释义, prefixIcon: Icon(Icons.search), suffixIcon: _searchController.text.isNotEmpty ? IconButton( icon: Icon(Icons.clear), onPressed: () { _searchController.clear(); // 清空时重置列表 _fetchSuggestions(); }, ) : null, ), )这段代码里有几个点值得展开。3.2 为什么搜索一定要加防抖如果不做防抖每敲一个字母就去查一次词库本地词库可能还好但如果你用的是在线词典 API服务器压力加上网络延迟会让体验变得很碎。防抖的原理很简单你在某个时间窗口内只执行最后一次操作。我用的防抖时长是 300ms实现方法不依赖第三方库直接用一个Timer就能搞定Timer? _debounceTimer; void _debounce(String query) { if (_debounceTimer ! null) { _debounceTimer!.cancel(); } _debounceTimer Timer(Duration(milliseconds: 300), () { _fetchSuggestions(query); }); }这里有个小细节防抖 Timer 一定要在dispose里取消否则页面销毁后 Timer 回调还会触发 setState会报 “setState called after dispose” 的异常这在真实测试中很容易遇到。3.3 候选词列表的“预测式搜索”实现候选词列表是字典搜索的关键交互。它的逻辑是用户输入前缀时列表实时展示匹配的单词和释义预览用户点击词条直接跳详情页。我用ListView.builder渲染候选词列表项展示四个信息层次单词本身加粗音标灰色小字词性和中文释义最多两行省略右侧的跳转箭头候选词的匹配逻辑我用了组合方式优先匹配前缀再匹配包含关系。前缀匹配的结果排前面因为用户输入的通常就是单词开头包含匹配排后面覆盖模糊搜索的场景。ListSuggestionItem buildSuggestionList(String query) { final trimmed query.trim().toLowerCase(); if (trimmed.isEmpty) { return _popularWords; // 空输入时展示热门词 } final prefixMatches _wordList .where((word) word.startsWith(trimmed)) .toList(); final containsMatches _wordList .where((word) word.contains(trimmed) !word.startsWith(trimmed)) .toList(); return [...prefixMatches, ...containsMatches]; }这里我直接用内存列表做过滤词库量级在十万以内时性能完全够。如果你词库达到百万级就要考虑引入 sqlite 的 FTS 或者建立倒排索引这个后面会细说。3.4 关键词高亮显示候选词列表里用户输入的关键词应该高亮。这个细节很容易被忽略但做了之后整个列表的反馈感会强很多。高亮实现方式并不复杂Flutter 的TextSpan天然支持文本分段渲染。我写了一个拼接方法把匹配位置前、匹配部分、匹配后的文本分别包成不同样式的TextSpanListTextSpan _highlightSpans(String text, String keyword) { if (keyword.isEmpty) { return [TextSpan(text: text)]; } final lowerText text.toLowerCase(); final lowerKeyword keyword.toLowerCase(); final spans TextSpan[]; int start 0; while (true) { final index lowerText.indexOf(lowerKeyword, start); if (index -1) { spans.add(TextSpan(text: text.substring(start))); break; } if (index start) { spans.add(TextSpan(text: text.substring(start, index))); } spans.add(TextSpan( text: text.substring(index, index keyword.length), style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold), )); start index keyword.length; } return spans; }这样列表项的单词部分就能清晰看出匹配位置中文释义如果命中了关键词同样可以用这套逻辑高亮。4. 词库数据组织JSON 与 SQLite 的取舍以及索引方案的选择4.1 字典应用的数据形态字典查询 App 的核心资产是词库数据。我使用的词库来源是公开词典数据的解析版本包含单词、音标、词性、中文释义、英文释义、例句和派生词。原始文件的体量在几十万词条级别解析之后以结构化格式存储。数据字段我设计成这样{ word: abandon, phonetic: /əˈbændən/, pos: v., meaning: 放弃抛弃, definition: to leave somebody/something and never return, examples: [ { sentence: He abandoned his car in the snow., translation: 他把汽车丢弃在雪地里。 } ], synonyms: [desert, forsake], tags: [cet4, cet6, 考研] }4.2 JSON 和 SQLite 的取舍逻辑词库量小比如一万以下时直接把一个 JSON 文件加载进内存每次搜索用内存过滤就行简单粗暴。但词库量上来之后每次输入都遍历整个列表性能开销会很可观。我的方案是折中处理常用词表常驻内存完整词库走 SQLite 查询。常用词大概三千到五千条覆盖日常使用频率支持最快的联想完整词库用于详情页的深度查询和生僻词搜索。SQLite 中用到的核心表结构CREATE TABLE words ( id INTEGER PRIMARY KEY AUTOINCREMENT, word TEXT NOT NULL, phonetic TEXT, pos TEXT, meaning TEXT, definition TEXT, examples TEXT, synonyms TEXT, tags TEXT ); CREATE INDEX idx_word ON words(word);这里的examples和synonyms我直接存 JSON 字符串查询出来再用jsonDecode解析。对于字典这种低频写入、高频读取的场景这种设计比拆分多张关联表更实用查询时少走一次 join代码也更好维护。4.3 搜索索引前缀索引到 FTSSQLite 默认的LIKE查询对前缀匹配够用但如果你要支持内容检索比如搜中文释义里包含某个词的字条数据量一大LIKE %关键词%会全表扫描。这时候需要 SQLite FTS5 扩展。FTS5 的使用方式CREATE VIRTUAL TABLE words_fts USING fts5(word, meaning, contentwords, content_rowidid);写入数据后每次词库更新都要同步更新 FTS 表。查询时SELECT w.* FROM words w JOIN words_fts f ON w.id f.rowid WHERE words_fts MATCH ?;FTS 的好处是支持分词和相关性排序对中文内容检索尤其友好。我在实际项目中中文释义的模糊搜索响应速度提升明显。4.4 词库更新策略字典词库不是静态的需要支持追加词条和离线包更新。我的更新方案是首次启动从远端下载完整词库包校验 MD5 之后解压导入 SQLite之后每次启动时检查增量更新更新成功后再导入增量数据。增量更新最容易出问题的点是“更新写一半断电”所以导入要放到事务里失败就回滚保证词库永远处于完整可用的状态。5. 详情展示页布局、动效和复制收藏这些细节如何一次做对5.1 页面跳转与参数传递用户从候选词列表点击某个单词跳转到详情页。跳转时我传的不是单词字符串而是词条的 ID详情页再根据 ID 去 SQLite 查询完整数据。这样避免列表页传大量数据到详情页也保证了数据的实时一致性。Navigator.push( context, MaterialPageRoute( builder: (context) WordDetailPage(wordId: word.id), ), );详情页在initState里异步加载词条数据。由于 SQLite 查询很快这里不需要额外的 loading 圈数据加载完成直接 setState 渲染即可。如果真是需要跨进程加载的超大词条可以加一个FutureBuilder不过字典场景基本用不到。5.2 详情页布局层级详情页的布局我分成了五层信息单词和音标词性和中文释义英文释义例句区域同义词和标签层级清晰的好处是用户一眼就能定位到自己想看的维度。释义是核心放最显眼的位置字号最大例句次之但句子要完整不能截断标签收敛到最底部用 Chip 组件展示。这里有个经验例句的中英对照不要让用户自己来回切换直接上下排列英文在上中文在下灰色小字。这种静态布局比交互切换更省事用户在扫视时也更高效。5.3 动效Hero 动画提升搜索到详情的连贯性搜索列表到详情页的联系感用 Hero 动画能做得非常流畅。字典场景里列表项中的单词文字可以作为 Hero 的 tag跳转时这个文字会从列表位置“飞”到详情页顶部。实现不复杂Hero( tag: word_${word.id}, child: Text( word.word, style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), )详情页同样包一层 Herotag 保持一致就能自动起飞。注意 tag 必须在当前页面内唯一否则会直接报错。我看过不少人在这里踩坑列表页用了固定字符串 “word”导致跳转时崩溃改成word_${word.id}就好了。5.4 复制、发音和收藏详情页有三个高频操作复制单词、发音、收藏。复制直接用Clipboard的 API一行代码。发音部分OpenHarmony 上的 TTS 能力可以用系统能力封装也可以先接一个离线的发音库词条带音标文件就播放本地音频不带就静默忽略。不建议在详情页做网络发音加载延迟会拖垮体验。收藏功能需要一个本地存储。我用的是shared_preferences插件保存收藏单词的 ID 列表数据量小用 JSON 数组存就够了不需要动用 SQLite。Futurevoid toggleFavorite(int wordId) async { final prefs await SharedPreferences.getInstance(); ListString favorites prefs.getStringList(favorites) ?? []; if (favorites.contains($wordId)) { favorites.remove($wordId); } else { favorites.add($wordId); } await prefs.setStringList(favorites, favorites); }收藏按钮的状态变化要立刻反馈点击后图标从空心变成实心颜色变化及时不要等异步完成。5.5 深色模式和字体适配详情页容易踩的隐形坑是深色模式。很多词库数据里带的是黑字白底的假设色值一旦切到深色模式文字颜色就糊成一团。我建议所有文字颜色都用 Flutter 的Theme.of(context)动态获取不要硬编码Colors.black、Colors.white。比如style: TextStyle( color: Theme.of(context).colorScheme.onSurface, )字体方面OpenHarmony 系统字体现状和通用移动端差异不大但如果你要展示音标字符建议用内置的phonetic字体族避免音标显示成乱码。6. 状态管理与页面结构一个字典 App 需要多少状态管理6.1 别一开始就上重型状态管理库很多 Flutter 开发者一上来就 Riverpod、Bloc、GetX 全套安排。对于字典查询这个量级的应用说句实话这些都不是必须的。我的状态管理策略按页面拆搜索页StatefulWidget 本地状态候选词列表、输入框内容、防抖 Timer 都放本地。详情页StatefulWidget加载到的词条数据和收藏状态放本地。收藏列表页读取本地存储用StatefulWidget刷新。整个 App 里没有一个跨页面的共享状态所以根本不需要全局状态管理。6.2 什么时候该考虑全局状态如果你后续要加“最近浏览”“学习计划”“每日一词推送”这类功能跨页面共享数据变多再引入轻量级的状态管理。我看到过一种过渡方案用ValueNotifierValueListenableBuilder不需要任何第三方库。先保证核心链路跑通后续需要复杂状态再重构是更务实的路径。6.3 路由管理路由我用的是Navigator原生方案没有引入 go_router。原因是字典应用页面层级浅最多三层列表页、详情页、设置页。原生 Navigator 的push和pop完全够用引入额外路由框架只会增加学习成本和配置复杂度。如果后续要做深链跳转比如从其他应用直接打开某个单词的详情页再考虑 go_router 的声明式路由也不迟。7. 实测性能与调优列表流畅度、内存占用和冷启动优化7.1 列表流畅度验证词条列表页是性能的关键场景。我用ListView.builder做懒加载列表候选词随输入不断刷新实测在几十万条词库量的内存过滤场景下滚动和输入响应都能维持流畅。提升流畅度主要做了三件事减少重建SuggestionItem的 widget 提取成独立类配合const构造器减少不必要的重建。克制重量组件候选词列表里没有用任何动画组件只用容器和文字。图片缺席整个列表没有图片资源字典场景也用不到避免多余 IO 开销。7.2 内存占用分析完整词库如果以 JSON 形式常驻内存几十万条的数据量会导致内存占用飙升。我的做法是候选词相关的常用词表常驻内存完整词库只在详情页查询时访问 SQLite。这样 App 的常驻内存保持在可接受范围即便词库整体很大内存也不受影响。7.3 冷启动优化冷启动时间主要受词库初始化影响首次启动时把词库从资源目录复制到应用目录再导入 SQLite这个过程在低端设备上可能达到几秒。我的优化策略首屏只加载常用词表完整词库异步导入。进度提示在词库导入完成前用户可以先用常用词表搜索。导入完成后用轻量 SnackBar 提示“词库已完整”。这种方法比启动时弹全屏 Loading 体验好得多用户感知上是秒开。7.4 遇到的一个异常列表快速切换时触摸事件丢失实际测试中我遇到过候选词列表快速滑动时点击偶发不响应的问题。排查下来是 Flutter 默认的GestureDetector在快速滚动的列表项上触摸事件的准确率受影响。解决方案是使用InkWell替代GestureDetector作为列表项的点击组件同时给ListView加上physics: const BouncingScrollPhysics()把滚动事件和点击事件的冲突降到最低。这是很典型的 Flutter 列表交互问题网上案例多但很多人会直接忽略掉。8. 后续扩展思路生词本、每日推荐和离线发音包详情页和搜索链路跑通之后这个 App 已经具备字典工具的核心能力。如果想要进一步丰富有几个方向可以参考生词本模块参考收藏逻辑扩展加分组、学习和遗忘曲线需要引入本地数据库来管理学习记录。每日一词定时任务推送状态管理会复杂一些那时再考虑全局状态库。离线发音包按词库批量下载音频文件本地播放需要建立文件索引和缓存策略。这些扩展都不影响现有的搜索和详情链路这也是当初选择 Flutter 单工程统一维护的价值。后续的测试计划中我会重点验证真机上的性能和 TTS 发音效果后续有新发现再来更新。

相关新闻

VS2010 OpenGL环境配置全指南:从依赖原理到GLEW/freeglut实战

VS2010 OpenGL环境配置全指南:从依赖原理到GLEW/freeglut实战

先说一个很多新手容易踩的坑: VS2010其实不需要你额外安装所谓的“OpenGL开发包” 。Windows系统里早就内置了 opengl32.dll ,Visual Studio 2010 自带的 Windows SDK 里也已经有 gl.h 、 glu.h 这些头文件了。但为什么还是有那么多人把“配置Op…

2026/10/16 12:45:24 阅读更多 →
Doris与Hadoop生态融合实践:Hive外表、HDFS分层与批流协同

Doris与Hadoop生态融合实践:Hive外表、HDFS分层与批流协同

大数据圈里有个很有意思的现象:你问一个团队为什么还在维护一套陈旧的大数据平台,一半人会回答“业务跑得好好的,没人敢动”;可你要是问他们最头疼什么,大概率是那句“报表越跑越慢,数仓越修越胖”。我这两…

2026/10/16 12:44:23 阅读更多 →
阿里云短信接口开发实战:从Spring Boot集成到踩坑优化

阿里云短信接口开发实战:从Spring Boot集成到踩坑优化

简介:阿里云短信接口开发示例压缩包,面向需要快速对接短信服务的后端开发者,适用于用户验证码、通知推送等场景。内容围绕阿里云短信服务的完整接入流程,从账号注册、创建短信服务实例、申请AccessKey密钥,到阅读官方S…

2026/10/16 12:44:23 阅读更多 →

最新新闻

ComfyUI便携包启动报错排查:从CUDA驱动到Python环境修复

ComfyUI便携包启动报错排查:从CUDA驱动到Python环境修复

下载了 ComfyUI 便携包之后,满心期待双击 run_nvidia_gpu.bat ,结果一个黑色窗口刚蹦出来就消失,或者干脆停在一屏红色报错里不动了。这种挫败感我在不同电脑上遇到过不下二十次,从驱动版本不对到 Python 环境损坏,每…

2026/10/16 13:21:29 阅读更多 →
context-mode:开发者多任务并行下的上下文切换与工作区恢复实践

context-mode:开发者多任务并行下的上下文切换与工作区恢复实践

开头你有没有过这样的经历:手头三个需求并行,刚在 A 项目里排查了半天线上报错,临时切到 B 项目改一个小功能,再切回来之后,之前看到一半的那段代码在哪个文件、终端里执行到哪一步、断点打在第几行、搜索框里过滤的是…

2026/10/16 13:21:29 阅读更多 →
基于动态分时电价的电动汽车有序充放电实时优化调度实现

基于动态分时电价的电动汽车有序充放电实时优化调度实现

去年跟一位搞充电运营的朋友聊天,他说最头疼的场景是晚上七点到九点:小区变压器频繁告警,充电桩前堵着车,而凌晨两三点的电价已经低到地板价,桩前一辆车都没有。这就是典型的无序充电——每辆车都"到家即充"…

2026/10/16 13:21:29 阅读更多 →
NS3 WiFi仿真third脚本深度解析:Yans物理层与MAC行为建模

NS3 WiFi仿真third脚本深度解析:Yans物理层与MAC行为建模

1. 项目概述:从third脚本切入NS3中WiFi网络仿真的真实工作流“NS3仿真---WIFI无线网络:third脚本”这个标题看似简单,但背后藏着一个被大量初学者低估的实操断层——很多人跑通了first、second示例,却在third脚本这里卡住超过两周…

2026/10/16 13:21:29 阅读更多 →
Java MQTT客户端生产级消费实践:从连接到消息零丢失

Java MQTT客户端生产级消费实践:从连接到消息零丢失

1. 项目概述:为什么一个简单的“订阅并消费”值得花时间深挖“JAVA实现MQTT客户端订阅消息并消费”——这行字看起来平平无奇,像极了某次课设作业的标题,或是某份技术文档里被折叠在角落的一行小字。但在我过去十年带过的几十个工业物联网项目…

2026/10/16 13:21:29 阅读更多 →
跳表原理与实现:有序动态集合的工程优选方案

跳表原理与实现:有序动态集合的工程优选方案

1. 为什么跳表在工程实践中比红黑树更“顺手”?我第一次在某跨平台系统里看到跳表被用来替代红黑树做有序集合时,第一反应是:这玩意儿真能扛住高并发写入?毕竟教科书里红黑树是“标准答案”,AVL、B树、哈希表都各有定位…

2026/10/16 13:20:23 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →