从零搭建可视化拖拽万能表单系统:Schema驱动与组件扩展实战
去年有段时间我被各类数据收集需求折腾得够呛业务方今天要做一个报名登记明天要搞一个巡检反馈后天又来一个客户回访每个表单字段不一样、校验规则不一样、提交后的处理逻辑也不一样。每次走定制开发从排期到上线基本是一到两周起步业务方急开发也累。后来我下定决心花了几周时间自研了一套可视化拖拽万能表单系统从此这些需求从“排期开发”变成了“业务方自己拖一拖10分钟出表”。这套系统的核心思路就是用零代码的方式构建全场景数据收集表单同时保留源码级别的扩展空间。这篇文章就把我搭建这套系统的完整思路、核心架构、关键实现和踩坑过程分享出来。内容偏实战适合正在做低代码表单方向的前端开发者、有数据收集平台建设需求的技术负责人以及想理解“拖拽表单到底怎么实现”的产品同学。哪怕你是刚接触这个方向看完应该也能复现一套可用的基础版本。1. 为什么我最终还是决定自研一套拖拽表单1.1 商业表单工具与低代码平台各自的尴尬点市面上其实不缺表单工具。简单场景下用现成的在线表单产品确实很快但真到业务集成环节问题就暴露了。我遇到最多的三类需求现成工具很难招架第一类是数据回写与联动。业务方要求“选择地区后自动带出对应的负责人且负责人字段不可修改”“选了某个选项后后续三个字段变成必填”。这种跨字段联动放到现成表单工具里要么不支持要么需要写一坨难以维护的表达式。第二类是提交后的数据流程定制。表单数据收集完之后往往不是简单存库就行而是要对接内部审批流、消息通知、定时汇总、甚至写回业务系统。现成工具的数据出口比较固定想深度定制就要走对方的开放接口限制多、沟通链路长。第三类是部署与数据主权。有些项目对数据存储位置、私有化部署有硬性要求。商业SaaS表单服务很难满足这类合规条件这就直接把我推向了自研。低代码平台呢我也认真调研过。它们确实强大但问题在另一个方向太重了。一个纯粹的表单收集需求引入整套低代码平台的建模、权限、工作流之后业务方的学习成本上去了平台的规则也把自由度限死了。而且很多低代码平台本身的定制能力有边界一旦碰到平台没覆盖的场景照样要等平台发版。1.2 自研表单系统的定位与边界想清楚这些之后我给这套系统定了一个非常明确的边界不做全平台只做一个“以表单为切口的轻量数据收集层”。具体拆解下来核心目标有三个业务方能自己搭表单通过可视化拖拽完成配置不用写代码。开发者能深度介入所有配置最终落到一份结构化的JSON协议上开发者可以绕过界面直接改协议也可以在任意环节插入自定义逻辑。收集的数据能进能出既能对接内部接口做实时入库也能一键导出Excel/CSV还能配置数据回填。这个定位让我在后面的架构设计上少走了很多弯路。它决定了我不需要去实现一个完整的低代码运行时只需要把“表单设计器”“表单渲染器”“数据收集管线”这三件事做扎实。维度商业表单工具通用低代码平台自研轻量表单系统简单表单搭建速度很快中等快需要先完成初始化建设复杂联动/数据回写受限强但规则重完全可控按需实现私有化部署大多不支持支持但成本高天然支持定制业务逻辑受开放API限制受平台扩展点限制源码级自由学习成本低高中2. 抬头先做地基表单Schema协议怎么设计2.1 从“组件即表单”到“数据即表单”的思路转变很多人第一次做可视化表单时第一反应是“把组件拖到画布上最后记录一下组件列表”。这种思路在小工具里能跑但一旦要支持联动、校验、动态渲染、版本迁移就会非常痛苦。因为你存的是一堆组件实例的状态而不是“表单的结构化描述”。我最终采用的方案是把所有表单配置抽象成一份JSON Schema。设计器负责可视化地生成这份Schema渲染器负责根据Schema画出表单。两者之间不直接对话只通过Schema进行数据交换。为什么要用JSON而不是直接存组件树核心原因是JSON具备三样东西可序列化、可校验、可迁移。可序列化意味着表单配置能存库、能分享、能传到任意端可校验意味着在配置阶段就能拦截明显错误可迁移意味着未来加字段、改结构时可以通过脚本做平滑升级。2.2 Schema里的核心字段长什么样一份表单Schema我把它拆成三个层级。表单层定义全局信息{ version: 1.2.0, formKey: customer_feedback, name: 客户反馈收集表, submitConfig: { endpoint: /api/form/customer-feedback, method: POST, autoApprove: false }, fields: [] }字段层定义每个表单控件的具体配置{ id: f_contact_name, type: input, label: 联系人姓名, placeholder: 请输入姓名, required: true, hidden: false, width: full, rules: [ { rule: maxLength, value: 20, message: 姓名不能超过20个字 } ], layout: { gridSpan: 12 } }交互层定义字段之间的联动与动态行为{ id: f_visit_type, type: radio, label: 回访方式, options: [ { label: 电话回访, value: phone }, { label: 上门回访, value: onsite } ], effects: [ { when: f_visit_type onsite, action: show, target: f_visit_address }, { when: f_visit_type phone, action: hide, target: f_visit_address } ] }把“交互层”从字段配置里拆出来是我当时做的最重要决定之一。它让联动逻辑不再散落在各个组件内部而是集中在一个可审计、可测试的规则列表里。后面接可视化联动配置器时这个设计也帮我省了大量工作量。2.3 为什么校验规则要“可配置化”而不是“写死在组件里”校验是数据收集质量的生命线。早期我实现校验功能时习惯在每个组件里直接写死校验逻辑比如输入框组件内部就写一个长度校验。后来发现完全行不通同一个输入框在不同表单里要求的校验可能完全不同同一个校验规则在不同场景下的错误提示文案也不同。现在的做法是校验规则由Schema驱动渲染器只做一个通用执行引擎。所有规则都是数据比如长度限制、正则匹配、必填、自定义函数引用。渲染器拿到规则后统一执行所有校验结果汇总后统一展示。这样换来一个很大的好处业务方能自己在可视化配置里给字段加校验规则不用动代码。需要特殊校验比如身份证校验、手机号校验时我提供自定义校验函数注册口开发者往注册表里加一个函数设计器的规则下拉框里立刻就能选到。{ id: f_id_card, type: input, label: 身份证号, rules: [ { rule: required, message: 身份证号必填 }, { rule: custom, customKey: idCard, message: 身份证号格式不正确 } ] }我还在Schema里加了一个version字段每次升级协议时递增。未来如果字段结构大改可以做版本迁移器老版本表单照样能正常渲染只是会在打开时提示“有可用的升级”。3. 拖拽画布与渲染引擎让设计态和运行态各司其职3.1 为什么要做设计器与渲染器“双引擎”最早我的原型是“所见即所得”拖拽组件到画布时直接操作DOM节点画布里就是最终表单。这个方案第一版就让我吃尽了苦头因为设计态和运行态的需求完全不同。设计态要的是组件面板、拖拽吸附、选中高亮、属性编辑、撤销重做。运行态要的是快速渲染、校验执行、数据收集、提交逻辑。如果共用一套实时渲染逻辑运行时的代码会被设计器的交互逻辑拖累设计器的拖拽体验又会被运行时的校验逻辑干扰。所以我把系统拆成了两个独立入口设计器Builder带边框、选中态、属性面板的可视化编辑环境它编辑的是Schema。渲染器Renderer纯展示和收集数据的运行时环境它只读Schema渲染出表单。两者通过Schema 组件注册表连接。组件注册表是全局的设计器和渲染器都从里面取组件定义但各自渲染逻辑不同。3.2 拖拽交互的具体实现逻辑拖拽部分我使用的是“列表嵌套 分区放置”的方案。左侧是组件面板按控件类型分组中间是表单画布右侧是属性面板。交互上核心要做三件事第一组件面板拖出。面板里的每个组件项绑定draggable拖拽开始时携带组件元信息类型、默认配置、默认宽度。拖到画布上方时画布根据鼠标位置实时计算落点。第二画布插入定位。画布内部采用一个分行式的栅格布局每一行是一个容器组件拖入某一行后自动占据对应的栅格列数。拖拽数据里需要携带targetContainerId和insertIndex这样就能精确控制插入位置。第三选中与属性联动。点击画布中的组件右侧属性面板显示该字段的Schema配置修改属性后实时回写到Schema里画布立刻重新渲染。一个值得注意的细节是拖拽过程中要避免触发太多渲染。早期我是用mousemove实时更新Schema再触发全量渲染结果大表单下拖拽非常卡。后来改成拖拽期间只更新一个“草稿位置”不写回Schema等松手时才真正提交变更。这个改动让拖拽流畅度提升了一个量级。3.3 属性面板驱动的实时预览与防抖属性面板的实时预览需要频繁修改Schema如果每一次修改都触发整棵组件树重绘性能肯定崩。我的处理策略是设计器内部做“受控表单上下文”字段配置修改后先更新局部状态画布中只有对应的那个组件重新渲染等用户停止操作300毫秒后再统一回写Schema并自动保存到本地缓存。这里的防抖不只是为了性能还有一个实际考量用户在输入框里敲字时如果实时回写Schema很容易把未输入完成的状态保存进缓存刷新后出现“字段被截断”的诡异情况。防抖之后回写的都是相对完整的状态明显减少了这类问题。4. 联动、校验与数据收集全场景交付中最容易被低估的三件事4.1 字段联动规则化从“代码写死”到“配置驱动”联动是表单系统“万能感”的重要来源。常见的联动场景有控制显隐、控制禁用、动态设置选项、字段赋值、重新触发校验。我把联动抽象成一个**“事件-条件-动作”**模型事件某个字段的值发生变化。条件基于当前表单状态计算一个布尔结果如“字段A的值等于x”。动作对目标字段执行显隐、禁用、赋值、清空、选项过滤等操作。这是一个很接近“规则引擎”的设计。好处是业务方可以在可视化界面上用下拉框和表达式构建联动规则不用写一行代码且规则没有深度嵌套排查起来清晰明了。举个实际例子。某个巡检表单里有个“异常类型”下拉框选择“设备故障”时显示“故障设备编号”和“故障描述”两个字段选择“环境问题”时隐藏“故障设备编号”显示“所在区域”。这些联动规则全部存在Schema的effects数组里渲染器统一解释执行。4.2 异步校验与提交前兜底表单校验里有一类比较棘手异步校验。比如输入身份证号后调接口确认是否重复登记或者输入手机号后校验是否在黑名单里。这类校验不能同步返回结果必须支持异步。我的做法是在渲染器里内置一个validator模块支持三类规则同步规则必填、长度、正则、枚举。异步规则asyncValidator配置一个已注册的校验函数标识渲染器调用时传入字段值返回Promise结果。联动规则依赖其他字段值来判断是否合法比如“选择了‘其他’原因时必须填写备注”。提交前的兜底校验也很重要。我统一在提交入口做一次全量校验校验不过时滚动定位到第一个错误字段并展开错误提示。这个交互虽然简单但实际体验提升特别明显。4.3 数据收集管线统一收口、清洗入库、导出对接表单跑起来之后真正的价值在数据侧。我设计了统一的数据收集管线所有表单提交的数据都走同一个入口。提交数据的结构不是简单把所有字段值拼成一个对象而是额外带上表单版本号、提交时间、提交设备、渲染器版本等元信息。这组元信息在后期排查线上问题时帮了大忙比如某条数据缺失字段值可以通过版本号快速定位是用哪个版本的Schema渲染的表单判断是配置问题还是改版导致的字段丢失。数据出口方面我实现了三条通道接口直连提交时调用配置的endpoint写入业务库。离线导出后台按表单维度导出Excel/CSV中文字段名和ID字段名双行输出方便非技术同事直接使用。回调通知提交成功后触发一个可配置的Webhook对接消息通知或自动化流程。对于收集到的敏感数据系统内会做身份与权限双层控制查询和导出都会记录操作日志。这个在涉及内部数据合规审查时是硬性要求从一开始就不能省。5. 组件扩展机制从“万能”到“真正覆盖你的场景”5.1 内置组件库的分层设计可视化表单的“万能”不是靠预置一大堆组件实现的而是靠一套让新组件能快速接入的机制。我把内置组件按四层组织基础输入类单行文本、多行文本、数字、金额、电话、邮箱、日期、时间。选择类下拉单选、下拉多选、单选组、复选组、级联选择、开关。布局类栅格行、卡片分组、分隔线、标题说明、折叠面板。高级与业务类图片上传、附件上传、富文本、表格子表单、签名、定位、分步表单。前两层解决通用问题第三层解决表单可读性问题第四层配合扩展机制去逼近具体业务场景。我实际使用中体会很深的一点是布局类组件和业务组件一样重要。没有栅格和卡片一个表单拖出来就是一长条阅读体验很差。5.2 自定义业务组件如何一键接入以我近期遇到的一个“门店定位”需求举例业务方要求表单里有一个地图选点组件拖进表单后能搜索门店地址、确认经纬度同时自动带出省市区行政编码。传统做法是在表单系统里改代码把地图组件硬编码进去。但有了扩展机制我只需要做三件事第一步实现一个标准控件组件。它遵循统一的接口约定外部传入value和onChange内部自行处理地图渲染和交互。interface FormFieldComponentProps { value: any; onChange: (value: any) void; disabled?: boolean; config: Recordstring, any; }第二步注册组件元信息。把组件名、Schema里的type标识、默认配置、缩略图传给全局注册表。registerFormField({ type: storeLocator, name: 门店定位, defaultConfig: { placeholder: 搜索门店地址, showMap: true }, component: StoreLocatorField, builderPlaceholder: 点击配置门店定位组件 });第三步设计器和渲染器共享这份注册表。注册完成的那一刻组件面板里立刻出现“门店定位”拖进画布就能用保存后渲染器也能正常渲染。整体下来接一个定制组件的工时从“开发半天”压缩到了“半小时”而且这个组件还能封装成标准包复用到其他表单里。这就是扩展机制最直接的价值。5.3 扩展机制的三个易踩点自定义组件接入时有三个细节特别容易踩坑提前说一下。组件注册与懒加载。注册表如果用同步机制意味着所有业务组件都要打包进主包里首屏会越来越慢。我采用的是注册表只存组件加载函数等Schema渲染到某个字段类型时再去加载组件文件实现按需加载。设计态能力声明。有些组件在运行时能正常渲染但在设计器里需要有特殊的拖拽占位、模拟数据和选中边框。新接入的组件必须声明自己的“设计态行为”否则会出现“保存后能用拖拽时一片空白”的尴尬情况。版本兼容。业务组件升级后老表单里的配置可能不再兼容。我的方案是在组件元信息里带minSchemaVersion如果老表单的Schema版本低于要求渲染器会给出兼容性降级提示而不是直接崩溃。6. 实测中遇到的坑与优化细节6.1 大表单拖拽卡顿根因不是数据量大而是渲染范围失控自认为架构没问题后我拿一个20字段的表单做压力测试结果拖拽起来明显发肉松手后还要等半秒才能选中。一开始以为是数据量大后来用性能分析工具排查才发现问题出在一个很隐蔽的地方松手时拿到的新Schema被传给了顶层状态随后整个画布从根节点开始重渲染。画布里所有组件的设计态边框、选中态、拖拽标尺全部刷新一遍自然就卡。优化方案分两步。先是给画布内层组件做“按需更新”只有Schema中对应字段发生变化时才触发该字段组件的重新渲染。然后是拖拽中状态分离拖拽期间的视觉反馈只维护在拖拽模块内部不进入Schema主状态松手时才一次性提交。这两步做完后哪怕字段总数增加到60多个拖拽交互也能保持流畅。类似的问题后来在移动端渲染时也遇到过但处理思路一致控制渲染边界修改什么就更新什么。6.2 撤销重做实现中的状态管理陷阱撤销重做是设计器的标配功能但实现难度比想象中大。第一版我用的是“全量快照”每次操作后把整个Schema存一份到历史栈里。结果拖个组件进去操作历史里存了完整表单配置字段多了以后内存肉眼可见地涨。后来改成**“操作反演”模式**每次交互操作不存全量状态而是存一份能反向执行的补丁。比如“新增字段”补丁记录的是“删除哪个字段”“修改属性”补丁记录的是“旧值和新值在哪一层路径”。撤销时执行反向补丁重做时执行正向补丁。这个改造还有一个意外收获因为历史记录是可序列化的补丁我可以把操作步骤同步给协同端未来如果要支持多人同时编辑同一张表单历史记录可以直接作为冲突检测的基础。6.3 移动端适配设计器留在PC端渲染端必须响应式很多表单的使用场景天然在手机端现场巡检、客户拜访、活动签到。但设计动效、属性面板这类交互在手机上根本没法顺手操作。所以我的定位很明确设计器只做PC端应用渲染器必须完整支持响应式。真正压力测试后才发现响应式表单不只是“列宽改成100%”这么简单。Mobile上的交互习惯和PC差异很大日期选择一般需要调起系统原生控件、图片上传通常要拍照直传、下拉框在移动端使用底部弹层比自绘下拉更友好。因此我针对高频移动场景重写了一套“移动端渲染模式”表单设计时组件会标记一个mobileMode属性日期、下拉、上传这三类组件在移动端走各自的原生适配路径其余组件保持统一渲染。这样业务方配置一套表单PC和手机端都能正常收集数据只是交互层做了自动适配。6.4 数据统计与双端一致性校验的小建议最后还想提醒一个容易被忽略的地方表单上线后一定要建立“配置版本跟当前线上实际渲染的表单一致”的校验机制。我遇到过好几次“当时明明改了配置线上收集的却是旧版数据”的情况。后来我每次发布新表单配置时都会对比一次Schema哈希不一致立刻告警。尤其当表单被多个页面引用、或者被嵌入到外部系统里时这种一致性校验能帮你提前发现引用缓存和版本不同步的问题而不是等出了数据事故再去翻日志。回归到这套系统的整体体验我认为最值得投入的其实不是拖拽画布本身而是Schema协议和组件扩展机制这两层底子。这两层稳了业务方在界面上拖出来的每一个表单开发都能在代码层面无缝接管开发加进去的每一个能力业务方都能立刻在设计器里直接使用。这个正向循环一旦跑起来表单需求就不再是开发的负担而变成一条真正能自己去迭代的业务通道。

相关新闻

C语言数组深度解析:从内存模型到二维数组扫雷实战

C语言数组深度解析:从内存模型到二维数组扫雷实战

1. 从花名册说起:数组到底解决了什么问题不管是学C语言还是学其他编程语言,数组都是绕不开的第一个“数据结构”。很多人刚开始学的时候,觉得数组不就是“一堆变量放一起”吗?确实,这个直觉方向是对的,但如…

2026/10/14 23:12:46 阅读更多 →
FastReport 4.10.1源码版Delphi/BCB编译安装与中文修正

FastReport 4.10.1源码版Delphi/BCB编译安装与中文修正

简介:一套面向 Delphi 与 Borland C Builder 开发者的报表工具完整源码,即 FastReport v4.10.1 中文修正版。它重点修复原版在中文排版中的空格自动换行、标点符号行首行尾错位等问题,并新增自动调节字间距、自动缩小填充选项,让报…

2026/10/14 23:12:46 阅读更多 →
从“前主体性”重返现象学源初场域:质性研究中的身体与生活世界

从“前主体性”重返现象学源初场域:质性研究中的身体与生活世界

这些年做学术研究,一个越来越强烈的感受是:我们似乎已经习惯了在“主体性”的框架里打转。大家都在谈人的能动性、自我意识、身份认同,谈研究者与被研究者之间的主体间性,却很少有人愿意再往深处追问一句——在那个被称作“主体”…

2026/10/14 23:12:46 阅读更多 →

最新新闻

OLAP数据立方体增量更新技术与实践

OLAP数据立方体增量更新技术与实践

1. OLAP数据立方体增量更新的核心价值在传统数据分析场景中,每次数据变动都需要全量重建数据立方体(Data Cube),当数据量达到TB级别时,这种操作会消耗数小时甚至数天的计算资源。我曾在金融行业的数据仓库项目中&#…

2026/10/15 0:43:39 阅读更多 →
域环境中 LDAP 查询技巧,不用工具手工搜集域资产

域环境中 LDAP 查询技巧,不用工具手工搜集域资产

🔒免责声明:本文内容仅用于授权渗透测试、红蓝对抗、安全运维学习研究,仅可在自己拥有书面授权的靶场环境执行操作,未经授权访问、查询企业域资产属于违法行为,请遵守网络安全相关法律法规。 前言 做域渗透信息收集的…

2026/10/15 0:43:39 阅读更多 →
AI配音生成后怎么检查?这几个细节容易影响视频效果

AI配音生成后怎么检查?这几个细节容易影响视频效果

用 AI 配音制作视频,最容易忽略的一个环节,就是语音生成后的检查。很多人把文案输入工具,生成声音后就直接放进视频里。结果发布前才发现,有些地方停顿奇怪,数字读得不对,或者一句话还没说完,语…

2026/10/15 0:42:38 阅读更多 →
其实A市场博弈是在和自己博弈--心理账户陷阱:亏了 5000 → 你想“这够我吃半年早餐

其实A市场博弈是在和自己博弈--心理账户陷阱:亏了 5000 → 你想“这够我吃半年早餐

行为金融学里最经典的"坑"——处置效应 目录 行为金融学里最经典的"坑"——处置效应 一、先给你的症状起个名字 二、为什么会这样?——4 个心理机制同时发作 1. 损失厌恶(Loss Aversion) 2. 心理账户(Mental Accounting)—— 这是你的最大陷阱 3. 沉…

2026/10/15 0:42:38 阅读更多 →
视频旁白里的英文和数字总读错,怎么处理?

视频旁白里的英文和数字总读错,怎么处理?

制作教程、数码分享或知识类短视频时,有一种问题很容易被忽略:文案看起来没有问题,转换成语音后,却可能出现英文缩写读得奇怪、数字不符合语境、符号被直接念出来等情况。这类问题不一定是配音工具不好用,也可能与文字…

2026/10/15 0:42:38 阅读更多 →
西安奕致格客服热线上线:怎么联系、该打哪个号、咨询前准备什么

西安奕致格客服热线上线:怎么联系、该打哪个号、咨询前准备什么

活动策划项目的沟通有一个共同特点:问题往往集中在筹备期的最后几周集中出现。场地确认、流程调整、物料变更、现场衔接,每一件都需要快速找到对的人。过去,西安奕致格文化传媒有限公司(简称奕致格)对外的沟通主要依赖…

2026/10/15 0:41:38 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →