OpAgent实战:网页操作智能体的感知、决策与执行
1. 从能聊天到能办事OpAgent到底跨过了哪道坎大多数人第一次接触AI智能体体验都差不多问它一个问题它答得头头是道让它帮忙订个票、查个实时数据、填个表单它就开始打太极。这不是模型不够聪明而是它被困在了一个只读的世界里——能理解语言却没法真正操作网页。OpAgent这类智能体框架要解决的核心问题就是让机器从能说变成能做。它要面对的不是一道数学题而是一个活的、会变的、充满意外的网页环境。按钮位置会变、弹窗会突然冒出来、加载速度时快时慢、同一个功能在不同网站上叫法完全不同。这些在人类眼里稀松平常的事对机器来说每一步都是坎。我把它拆成三个层次来理解这样你就能看清它到底突破了什么感知层机器得看见网页。不是拿到一堆HTML源码就完事而是要把页面渲染出来理解哪些元素是可点击的、哪些是输入框、哪些是纯装饰。这中间涉及视觉识别和DOM结构解析的配合。决策层看见之后得知道下一步干什么。当前页面和目标之间差了几步先点搜索框还是先关弹窗这一步走错了会不会掉进死胡同这需要模型具备任务分解和状态追踪的能力。执行层决定之后要真的动手。点击、输入、滚动、等待加载每个动作都要精确落到正确的元素上还要处理执行失败后的重试。这三层里最难的不是单点技术而是它们的耦合。感知错了决策就偏决策偏了执行就白费。OpAgent的价值在于把这套链路串起来并且让它在真实网站上跑得通而不是在实验室的静态页面里自娱自乐。提示如果你之前用过只支持API调用的智能体会发现它们和操作网页的智能体完全是两个物种。前者面对的是结构化数据后者面对的是给人看的界面。这个差异决定了后者的难度要高一个量级。2. 网页操作智能体的技术底座视觉、DOM与动作空间的三角关系2.1 为什么纯视觉方案和纯DOM方案都不够用先说说两种极端思路各自的问题。纯视觉方案就是给网页截图让模型像人一样看图找按钮。听起来很直观但实际用起来问题不少。截图里的文字识别会出错尤其是小字号或者低对比度的按钮模型对坐标的定位精度有限点偏几个像素可能就点到隔壁链接上了更麻烦的是截图丢失了元素的语义信息模型不知道这个div到底是不是可点击的。纯DOM方案就是解析HTML结构把可交互元素提取出来喂给模型。这个方案信息准确但有两个硬伤一是很多现代网页用大量动态渲染DOM结构复杂到爆炸一个页面几千个节点全塞给模型根本处理不过来二是DOM里看不出视觉层级模型不知道哪个元素在视觉上更突出、哪个被遮挡了。OpAgent这类框架通常走的是混合路线用DOM提取候选交互元素用视觉信息辅助判断元素的重要性和可点击性再把两者对齐。这个对齐过程本身就是个技术活——DOM节点和屏幕坐标之间需要建立映射还要处理滚动、iframe嵌套、动态加载这些情况。2.2 动作空间的设计决定了智能体的灵活度动作空间就是智能体能做什么的集合。设计得太窄很多任务做不了设计得太宽模型容易乱来。一个比较合理的动作集合大概包括这几类动作类型具体操作典型难点导航类打开URL、前进后退、切换标签页新标签页的上下文切换交互类点击、双击、右键、悬停元素定位精度、悬停触发菜单输入类文本输入、清空、下拉选择、文件上传输入法联想、动态校验滚动类页面滚动、元素内滚动懒加载触发时机等待类固定等待、条件等待等待时长判断提取类读取文本、读取属性、截图信息筛选与结构化这里面的门道在于每个动作都要考虑失败情况。点击可能因为元素被遮挡而失败输入可能因为焦点没对上而失败滚动可能因为页面已经到底而无效。一个健壮的智能体需要能识别这些失败并做出调整而不是一条路走到黑。2.3 状态表示让模型记住我走到哪了网页操作是个多步任务模型必须知道自己当前在什么状态、已经完成了哪些步骤、还剩哪些没做。这个状态表示如果设计得不好模型就会重复操作或者遗漏步骤。常见的做法是维护一个任务队列加一个历史记录。任务队列记录待完成的子目标历史记录保存已经执行的动作和结果。每执行一步模型根据当前页面状态和历史来决定下一步。这里的关键是历史记录不能太长否则会超出模型的上下文窗口也不能太短否则模型会失去上下文。我见过一些实现会把历史压缩成摘要只保留关键节点比如已经登录成功已经进入目标页面已经填写了三个字段。这种压缩方式在长任务里特别有用能让模型在有限上下文里保持对整体进度的感知。3. 让智能体在真实网站上跑起来从任务分解到异常恢复3.1 任务分解的粒度怎么把握拿到一个任务比如帮我在某个购物网站找一款价格在某个区间内的耳机并加入购物车模型需要把它拆成可执行的步骤。拆得太粗每一步都太复杂模型容易卡住拆得太细步骤数量爆炸执行效率低还容易出错。我的经验是分解粒度应该以一个页面内的连续操作为单位。比如打开网站并进入搜索页算一步输入关键词并提交搜索算一步在结果列表中筛选并点击目标商品算一步。这样每一步都在一个相对稳定的页面环境里完成模型不需要频繁切换上下文。具体拆解的时候可以用这样的思路先识别任务的起点和终点。起点是当前页面终点是任务完成后的状态。找出从起点到终点必须经过的关键页面或关键状态。把每两个关键状态之间的操作合并成一个步骤。对每个步骤明确它的成功判据是什么。这个成功判据特别重要。没有判据模型就不知道自己这一步到底成没成只能盲目往下走。判据可以是页面URL变了、某个元素出现了、某个文本内容变了等等。3.2 元素定位的鲁棒性策略元素定位是网页操作智能体最容易翻车的地方。同一个按钮今天叫提交明天可能改成确认今天在页面底部明天可能挪到顶部。如果定位策略太死智能体就会频繁失败。比较靠谱的做法是多特征融合定位按优先级依次尝试文本内容匹配优先用按钮上的文字或链接文字定位这是最接近人类习惯的方式。但要注意处理文字变化比如提交和提交订单要能模糊匹配。属性匹配用id、name、class、aria-label等属性定位。id通常最稳定但很多网站用动态id这时候就要退而求其次用其他属性。相对位置匹配用元素之间的相对关系定位比如搜索框右边的那个按钮。这种方式在页面结构稳定但属性变化时很有用。视觉特征匹配用元素的外观特征定位比如颜色、大小、位置。这是最后的兜底手段。实际运行时这几层策略是级联的先用文本匹配失败了用属性匹配再失败用相对位置最后用视觉。每一层都记录置信度置信度太低就触发人工确认或者重新规划。注意不要过度依赖单一特征。我见过一些实现只用CSS选择器定位结果网站一改版就全线崩溃。多特征融合虽然实现复杂但长期来看省心得多。3.3 异常恢复智能体真正拉开差距的地方实验室里的演示和真实环境的差距八成体现在异常处理上。真实网站上什么意外都可能发生弹窗广告、登录过期、验证码、网络超时、页面改版、A/B测试导致的不同界面。一个成熟的智能体需要有一套异常检测和恢复机制。我把它分成几个层次第一层是动作级重试。点击没反应等一秒再点一次。输入没成功清空重来。这一层处理的是临时性故障成本最低。第二层是步骤级回退。如果当前步骤反复失败就退回到上一个稳定状态重新尝试。比如填写表单时某个字段一直校验不通过就退回到表单开头重新填。第三层是任务级重规划。如果发现当前路径走不通比如目标页面结构完全变了就重新分析当前状态规划一条新路径。第四层是求助。当所有自动恢复都失败时智能体应该能识别出自己搞不定了然后请求人工介入或者给出明确的失败原因而不是无限循环。这四层里最容易被忽视的是第四层。很多实现宁可让智能体死循环也不愿意承认失败结果浪费大量时间和资源。其实及时止损、把问题暴露出来比假装能搞定要负责任得多。4. 实测中那些文档不会告诉你的坑4.1 等待时机的判断比想象中难网页加载不是瞬间完成的但等多久是个玄学。等太短元素还没渲染出来操作就失败了等太长整个任务耗时爆炸。固定等待是最简单的但也是最不靠谱的。网络好的时候浪费 time网络差的时候又不够。条件等待是更好的选择比如等待某个元素出现、等待某个网络请求完成、等待页面不再变化。但条件等待也有坑。有些页面会一直有动画或者轮询请求页面永远处于变化中条件等待就永远等不到。这时候需要设置一个最大等待时间超时后强制继续。我的做法是组合使用先等一个较短的固定时间让页面初步稳定然后用条件等待等关键元素出现最后再等一个短时间让动态内容加载完。这个组合在大多数场景下都能兼顾速度和稳定性。4.2 登录态和会话管理是个隐形大坑很多任务需要登录才能操作而登录态的管理比想象中复杂。Cookie会过期会话会被踢多标签页之间会互相影响。比较稳妥的做法是把登录态单独管理在任务开始前检查登录状态过期了就重新登录。登录过程本身也可以交给智能体完成但要注意处理验证码、短信验证这些需要人工介入的环节。还有一个容易忽略的点是会话隔离。如果同时跑多个任务它们之间不能互相干扰。每个任务应该有独立的浏览器上下文Cookie和存储空间都要隔离。这个在实现上需要用到浏览器自动化框架的上下文管理功能。4.3 页面结构变化导致的连锁失败网站改版是智能体的天敌。一个元素的定位失败可能导致整个任务链条断裂。更麻烦的是有些改版是渐进的、A/B测试式的同一个网站在不同时间、不同用户看到的界面可能不一样。应对这个问题一方面要靠前面说的多特征融合定位提高鲁棒性另一方面要建立监控和告警机制。当某个任务的失败率突然上升时能及时发现是网站改版了然后更新定位策略。我还见过一种做法是让智能体在失败时自动截图并记录当时的页面结构这样事后排查问题时能有据可查。这个习惯很值得养成尤其是在调试阶段。4.4 性能与成本的平衡网页操作智能体跑起来是很吃资源的。每一步都要截图、解析DOM、调用模型推理一个稍微复杂点的任务可能几十步成本和时间都不低。优化的方向有几个一是减少不必要的模型调用比如一些确定性的操作可以直接用规则完成不需要模型决策二是缓存页面解析结果同一个页面状态不要重复解析三是并行化多个独立子任务可以同时跑。但优化不能牺牲可靠性。我见过为了省成本把模型调用减到最少结果智能体变得很笨遇到一点变化就不知所措。这个平衡点需要根据具体场景来调没有一刀切的标准。5. 这套东西能用在哪些场景边界又在哪里5.1 最适合落地的几类任务网页操作智能体不是万能的但在某些场景下确实能大幅提升效率。我梳理了几类比较适合的任务信息采集与整理类。比如定期从多个网站抓取特定信息汇总成报表。这类任务步骤相对固定页面结构变化不频繁智能体能稳定发挥。表单填写与提交类。比如批量提交某种申请、录入数据。这类任务的难点在于字段识别和校验处理智能体可以配合规则引擎一起用。流程自动化类。比如跨系统的操作流程从一个系统查数据到另一个系统录入。这类任务价值最高但实现难度也最大因为涉及多个系统的状态同步。测试与监控类。比如定期检查网站的关键功能是否正常。智能体可以模拟用户操作发现异常时告警。5.2 目前还搞不定的场景有些场景现阶段还是别为难智能体了强验证码场景。复杂的图形验证码、行为验证智能体基本没辙需要人工介入或者专门的识别服务。高频交易类操作。对时效性要求极高的场景智能体的决策延迟可能无法满足。涉及敏感操作的场景。比如支付、删除数据这类不可逆操作让智能体全自动执行风险太大需要人工确认环节。高度动态的界面。比如实时协作编辑、频繁刷新的数据看板智能体很难跟上变化节奏。认清边界很重要不然容易在不适用的场景上浪费大量精力。5.3 人机协作才是现实路径完全无人值守的网页操作智能体在可预见的未来都很难在所有场景下可靠运行。更现实的路径是人机协作智能体处理常规步骤遇到不确定的情况时请求人工确认人工处理完后智能体继续。这种模式下智能体的价值不是替代人而是把人从重复劳动中解放出来让人专注于需要判断力的环节。比如一个数据录入任务智能体可以自动填写大部分字段只在遇到模糊信息时让人确认一下。实现人机协作的关键是设计好交接点。什么时候该求助、怎么把上下文传递给人工、人工处理完后怎么让智能体接着跑这些都需要仔细设计。交接点设计得好整体效率能提升好几倍设计得不好人工反而更累。6. 自己动手搭一个网页操作智能体的关键决策6.1 浏览器自动化框架怎么选底层框架的选择会影响整个项目的开发效率和运行稳定性。目前主流的选择有几个方向各有取舍Playwright跨浏览器支持好API设计现代自动等待机制比较完善适合新项目。Puppeteer生态成熟资料多但主要面向Chrome跨浏览器支持弱一些。Selenium老牌框架兼容性最广但API相对繁琐自动等待需要自己处理。如果是从零开始做我倾向于Playwright。它的自动等待和选择器引擎能省不少事而且对多标签页、iframe、网络拦截这些场景的支持比较到位。当然如果你的团队已经有Selenium的积累继续用也没问题只是要在等待和异常处理上多花点心思。6.2 模型选型的权衡智能体的大脑用哪个模型直接决定了它的能力和成本。这里有几个维度要考虑推理能力复杂任务分解和异常处理需要较强的推理能力小模型可能搞不定。但简单任务用大模型是浪费。响应速度网页操作是交互式的模型响应太慢会让整个任务卡顿。需要在能力和速度之间找平衡。成本如果任务量大模型调用成本会很可观。可以考虑分级策略简单决策用小模型复杂决策用大模型。多模态能力如果需要理解截图就得用支持视觉的模型。纯文本模型处理不了视觉信息。我的建议是先用一个能力较强的模型把流程跑通然后再根据实际瓶颈做优化。过早优化模型选型可能会因为能力不足导致流程本身就跑不通那就本末倒置了。6.3 提示词工程在智能体里的特殊之处智能体里的提示词和普通对话的提示词很不一样。普通对话只需要模型回答一个问题智能体需要模型在每一步都做出正确的决策而且这些决策是连续的、有依赖的。这意味着提示词需要包含更多上下文当前页面状态、历史操作记录、任务目标、可用动作列表、约束条件。同时还要引导模型输出结构化的决策结果方便程序解析和执行。一个常见的坑是提示词太长导致模型迷失。当历史记录和页面信息塞满上下文时模型可能会忽略关键指令。解决办法是做好信息压缩和优先级排序把最重要的信息放在最显眼的位置。另一个坑是模型输出格式不稳定。有时候输出JSON有时候输出自然语言程序解析起来很麻烦。这时候需要用few-shot示例或者输出约束来规范模型行为。6.4 测试与迭代的节奏网页操作智能体的开发是个迭代过程不可能一次做完美。我的经验是先把最简单的场景跑通比如打开一个页面、点击一个按钮、读取一段文字然后逐步增加复杂度。测试的时候要覆盖几类情况正常流程、元素找不到、页面加载超时、弹窗干扰、登录过期。每类情况都要有对应的处理逻辑并且验证处理逻辑确实生效。还有一个容易被忽视的点是回归测试。网站会变智能体的定位策略和提示词也会调整每次调整后都要跑一遍回归测试确保没有把之前能用的功能搞坏。这个习惯能省很多事后排查的时间。7. 关于智能体冲浪这件事的一些个人判断我跟踪这个方向有一段时间了也动手搭过几个原型。最大的感受是技术上的单点突破已经不少了视觉识别、DOM解析、模型推理每个环节都有可用的方案。真正的难点在于把它们工程化地整合起来让整个系统在真实环境里稳定运行。这个整合过程里最耗时的往往不是算法而是那些琐碎的工程细节等待时机的判断、异常情况的处理、状态的管理、成本的优化。这些东西没有捷径只能在实际跑的过程中一点点打磨。另一个感受是不要对全自动抱有太高的期待。至少在现阶段人机协作是更务实的路径。把智能体当成一个能干的助手而不是一个完全独立的员工这样心态会好很多设计出来的系统也更实用。最后说个具体的建议如果你打算动手做先从一个小而具体的场景开始比如自动填写某个固定表单。把这个场景做扎实把异常处理做完善然后再扩展到更复杂的任务。贪大求全往往什么都做不成小步快跑反而能积累出真正可用的东西。

相关新闻

AgentScope实战:多智能体协作与消息标准化设计

AgentScope实战:多智能体协作与消息标准化设计

最近一个月我一直在用 AgentScope 做多智能体相关的实验,从最开始的单个 Agent 接工具调用,到后面把三个 Agent 串成一条内容生产流水线,再到让它在实际的知识问答场景里做“意图识别—检索—回答—质检”的协作,整体走下来最大的…

2026/10/14 23:06:15 阅读更多 →
应对陪伴决策疲劳:亲子互动游戏推荐工具的设计与实践

应对陪伴决策疲劳:亲子互动游戏推荐工具的设计与实践

孩子三岁半,每天晚上洗完澡就眼巴巴地看着我,我知道她想要我陪她玩,但那一瞬间我经常是空白的。积木刚搭完一轮,绘本读到嗓子冒烟,动画片又不敢让她多看。这种“想陪却不知道玩什么”的窘迫,应该是很多家长…

2026/10/14 23:06:15 阅读更多 →
Sabaki 用户样式(userstyle)完全指南:用 styles.css 定制棋盘与棋子外观

Sabaki 用户样式(userstyle)完全指南:用 styles.css 定制棋盘与棋子外观

桌面应用 【免费下载链接】Sabaki An elegant Go board and SGF editor for a more civilized age. 项目地址: https://gitcode.com/gh_mirrors/sa/Sabaki 点击查看 免费下载 本篇基于 Sabaki 仓库内的 Userstyle Tutorial 展开,讲解如何在不替换任何程…

2026/10/14 23:06:15 阅读更多 →

最新新闻

AI提效后的人往哪放?转向获客侧完整落地指南

AI提效后的人往哪放?转向获客侧完整落地指南

我去年一直在折腾一个特别实际的问题:AI 把团队的重复劳动吃掉之后,省下来的这批人到底应该往哪放?一开始我也跟大多数人想的一样,觉得放着就行,反正效率高了嘛。后来发现完全不是这么回事,人一旦没有明确的…

2026/10/14 23:49:10 阅读更多 →
Python multiprocessing Pool:apply 与 apply_async 性能差异深度实测

Python multiprocessing Pool:apply 与 apply_async 性能差异深度实测

这几天有朋友在群里问了一个很有意思的问题:Python 的multiprocessing.Pool里,apply和apply_async到底差在哪,为什么感觉一个快一个慢,尤其是把multiprocessing.Pool、pool.Pool、pool.ThreadPool这几个概念混在一起时&#xff0c…

2026/10/14 23:49:10 阅读更多 →
酷秒神马9.0 2025版源码拆解:高并发秒杀系统的缓存、削峰与防超卖实战

酷秒神马9.0 2025版源码拆解:高并发秒杀系统的缓存、削峰与防超卖实战

做高并发秒杀系统的人,应该都听过“酷秒神马”这个开源源码系统的名字。9.0 2025版发布之后,我第一时间把源码拉下来完整过了一遍。这套系统主打“低代码配置 高并发底座”,核心思路是把秒杀场景里最难的几个点——热点数据缓存、流量削峰、…

2026/10/14 23:49:10 阅读更多 →
用Go实现doomsday算法:纯计算推算任意日期星期几

用Go实现doomsday算法:纯计算推算任意日期星期几

第一次看到 doomsday 这个词的时候,我第一反应是:这该不会是某种末日倒计时程序吧。后来在日历算法的资料堆里翻了一圈才发现,这是一套相当精巧的日期推算套路,可以让你不看日历、不查手机,也能快速说出任意日期是星期…

2026/10/14 23:49:10 阅读更多 →
基于MATLAB Simulink的MIL与SIL单元测试实战指南

基于MATLAB Simulink的MIL与SIL单元测试实战指南

1. 项目概述:为什么要做MIL和SIL单元测试搞过嵌入式控制开发的朋友应该都有体会,模型越来越大、逻辑越来越复杂之后,光靠眼睛看和手点仿真已经撑不住了。尤其做汽车电控、无人机飞控、机器人控制这类对安全性要求高的项目,一个不起…

2026/10/14 23:49:10 阅读更多 →
304与316不锈钢紧固件怎么选?成分差异、耐腐蚀对比与采购验收全解

304与316不锈钢紧固件怎么选?成分差异、耐腐蚀对比与采购验收全解

看到这个标题,我猜很多人第一反应是"不就是螺丝嘛,304还是316,哪个贵买哪个"。但实际接触过工业采购、设备维护或者出海项目的人,都知道这个选择经常让人头疼——选贵了,成本上去了;选错了&#…

2026/10/14 23:48:05 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战: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/13 22:01:27 阅读更多 →
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 阅读更多 →