大漠插件7.2213 + Python:DmHelper注册调用与桌面自动化避坑指南
简介面向大漠插件7.2213的Python注册示例包内含作者自制的DmHelper脚本用于演示如何通过Python语言调用大漠插件接口完成注册、激活以及基本功能调用。大漠插件在界面自动化、软件测试、网页数据抓取等日常开发场景中应用广泛这个示例能帮助熟悉的开发者避开底层细节快速上手插件能力。压缩包整体共十一个文件其中六个为压缩工具箱分别涉及核心组件、绑定工具、类库生成工具、调试辅助工具另有四个文本说明文件和一个Python脚本整体大小约十一点七六兆。目前已有一千四百四十八人学习下载。通过学习DmHelper脚本读者可以理解大漠插件与Python的集成模式掌握插件初始化、窗口元素定位、数据抓取等典型操作同时配合包内工具能够完成插件绑定、接口类库自动生成以及运行调试方便在不同机器上部署使用。压缩包附带的密码提示也为正确解压和后续使用提供了必要指引整体是一份适合自动化测试与采集学习者的参考资源。1. 大漠插件 7.2213 Python 调用一个能直接抄作业的自动化底座如果你写过 Windows 自动化的脚本大概率听过或碰过这套插件找图、找字、键鼠模拟、窗口绑定一套下来基本把桌面端自动化要做的事全包了。这次拿到的资源是 7.2213 版本里面除了插件本体还有一个DmHelper.py是作者自己写的 Python 注册调用例子。这个版本有几个很实用的点免注册调用、相对稳定的找图性能、以及一套回归到了简单调用的 API 接口。对于想把旧项目从收费组件迁回、或者刚开始接触这类自动化组件的开发者这个包里最关键的就是那个 Py 调用例子——它把最容易劝退新手的注册流程封装好了省去你对着文档折腾初始化的一两个小时。这篇拆解会直接讲清楚怎么注册、怎么封装、怎么避开崩溃和失效的坑最后给你一个可以直接拿去改的增强版调用模板。2. 先把 DmHelper.py 拆开看注册流程、接口选择与返回值约定2.1 从文件里读机器码再算注册码这套初始化到底在做什么插件这类组件的初始化往往不是import完就能用的。它要先确认当前机器的授权状态读机器特征码、拿注册码去校验、然后在内存里生成一个可调用的对象。DmHelper.py的核心作用就是把这一步从“每次手写”变成“封装好”。我拿到手第一件事是把调用链捋清楚import win32com.client def get_dm_instance(reg_code: str): dm win32com.client.Dispatch(dm.dmsoft) ver_info dm.Ver() print(f[INFO] current dm version: {ver_info}) # 传统注册接口返回 0 表示失败1 表示成功-1 表示无法连接服务器 reg_result dm.Reg(reg_code, ) if reg_result ! 1: raise RuntimeError(freg failed, code{reg_result}) return dm这段逻辑很简单但有两个细节值得说。第一win32com.client.Dispatch走的是 COM 组件路径它要求插件在系统里完成过组件注册如果你用的是免注册调用这行代码就得换掉后面我会专门讲。第二dm.Reg()的返回值不是布尔值三种状态你得在文档里查清楚0是参数错误或本地校验失败1是成功负数通常是网络校验超时或服务器拒绝。很多新手写if reg_result:就把0当成失败、1当成功这没问题但遇到-1时容易漏判。DmHelper.py里做得比较聪明的一点是它会先从某个配置文件或注册表里读取机器码然后拼出注册码请求。这个动手的版本是直接传注册码但你在调用时最好也加一个缓存机制避免每次启动都去网络校验。插件初始化这一层稳定优先少一次网络请求就少一次启动失败的可能。2.2 免注册调用Release 版本下不写注册表也能跑传统 COM 组件要先regsvr32注册才能被Dispatch找到这在分发场景里很烦每台机器都要手动注册一次UAC 弹窗、杀软拦截、路径写错任何一个环节出问题都会断在半路。插件 7.2213 支持免注册加载这也是我从这个包里拿到的最大收获之一。import ctypes from comtypes.client import CreateObject dll_path rC:\dm_res\dm.dll dm CreateObject( dm.dmsoft, dynamicTrue, clsid, interfaceNone, ) # 免注册模式下需要手动指定 dll 的加载路径 dm.SetDllPath(dll_path)不过这里我需要说实话SetDllPath本身不是公开的标准接口实际项目中我一般不会依赖它而是用你从包里看到的DmHelper.py同款思路——它里面套了一层目录扫描逻辑先判断当前进程是 32 位还是 64 位然后去加载对应位数的 DLL 副本。这个思路值得抄到你自己脚本里import platform import ctypes is_64bit platform.architecture()[0] 64bit if is_64bit: dll ctypes.WinDLL(rC:\dm_res\dm64.dll) else: dll ctypes.WinDLL(rC:\dm_res\dm.dll)注意64 位系统里 32 位进程访问dm.dll没问题但 64 位进程直接加载 32 位 DLL 会直接报OSError: [WinError 193]。所以免注册调用前先核对 Python 解释器的位数和 DLL 位数是否一致。这是最容易踩又最少被文档明说的点。2.3 返回值约定与失败语义黑匣子接口怎么确认“这次到底成没成”插件里很多接口不会抛异常而是通过返回值告诉你结果。FindStr返回找到的坐标找不到返回-1Capture返回0或1表示是否保存成功BindWindow返回1表示绑定成功。DmHelper.py里有一个统一的封装思路值得借鉴def call_with_check(func, *args, success_values(1,), error_msg): result func(*args) if result not in success_values: raise RuntimeError(f{error_msg}, returned: {result}) return result我一般会这样封装所有关键调用。因为插件接口的报错信息特别贫乏——很多时候就是-1不告诉你到底是不支持这个屏幕分辨率还是窗口句柄失效。把返回值收敛成异常出错时至少能快速定位是哪个环节失败了。后面常见的崩溃和失效问题一大半都能通过返回值-1追到根因上去。3. 把 DmHelper.py 改造成你自己的自动化基座注册、调用与任务落地3.1 一个基础 Demo从找窗口到模拟点击验证整套链路读完注册封装下一步就是跑通一个完整场景。我建议不要把大目标一上来就堆进去先做一个“找到计算器窗口 → 点击按钮 → 截图保存”的闭环。这能同时验证 COM 初始化、窗口绑定、键鼠模拟、图像处理四条核心链路。import time import win32gui from my_dm_helper import get_dm_instance dm get_dm_instance(your_reg_code_here) hwnd win32gui.FindWindow(None, 计算器) if not hwnd: raise RuntimeError(calc window not found) # 绑定窗口normal 模式适合无遮挡的目标窗口 bind_ok dm.BindWindow(hwnd, normal, normal, windows, 0) if bind_ok ! 1: raise RuntimeError(fbind failed: {bind_ok}) # 移动鼠标到窗口标题栏附近并点击 dm.MoveTo(300, 300) dm.LeftClick() time.sleep(0.5) # 全屏截图到本地验证图像链路 dm.Capture(0, 0, 1920, 1080, rC:\tmp\shot.png)BindWindow的第二个到第五个参数分别是显示模式、鼠标模式、键盘模式和模式附加参数。normal显示模式是“不改变目标窗口显示方式”后台绑定就要换dx、gdi等模式。鼠标模式normal是模拟真实物理鼠标windows是发消息模式后者被窗口拦截的几率更高但速度更快。截图时注意分辨率填的是屏幕坐标如果目标窗口只占一部分屏幕填全屏坐标会把旁边的无关内容也截进去后续找图时容易受干扰。这一步跑通之后你的自动化闭环就成立了。后续无论是找图、找色、OCR都是在这个对象上行追加操作不会再有初始化层面的问题。3.2 后台找图与循环监控写一个带超时的重试封装很多自动化任务不是“点一次”就完了而是“等某个状态出现再操作”。比如游戏辅助里等待某个怪物刷新、办公自动化里等待某个加载图标消失。插件的找图接口是同步的没找到会立刻返回-1所以你要自己写轮询逻辑。def wait_for_image(dm, pic_path, timeout10, interval0.5): deadline time.time() timeout while time.time() deadline: x, y dm.FindPic(0, 0, 1920, 1080, pic_path, 202020, 0.9, 0) if x 0 and y 0: return x, y time.sleep(interval) raise TimeoutError(fimage not found in {timeout}s: {pic_path})这里几个参数要解释清楚202020是偏色值三个通道都放宽了20用来适配不同显示器下的颜色微差0.9是相似度阈值目标是精确匹配时调到1.0但实际场景里0.9到0.95更稳因为屏幕渲染会有抗锯齿和色彩抖动0是查找方向0表示从左上向右下找第一个1表示从中心向外扩散。这个轮询方式看着简单但它就是最稳最不容易翻车的做法——你不需要理解图像特征匹配的内部细节只需要控制好超时和重试节奏。需要注意的是FindPic的图片路径别用相对路径。这个接口在工作目录不对时会返回-1而且不会给你任何日志。把所有图片资源放到一个固定绝对路径下或者用os.path.join(os.path.dirname(__file__), images, pic)拼出来能少排查好几小时。3.3 日志、异常与资源释放封装一个不会“用完就崩”的调度壳DmHelper.py 里没有做资源释放这在长驻型任务里会变成隐患。COM 对象如果一直不释放插件内部线程和窗口钩子可能残留长时间跑会出现窗口绑定失效、内容截取异常。我一般会写一个上下文管理器from contextlib import contextmanager contextmanager def dm_session(reg_code: str): dm get_dm_instance(reg_code) try: yield dm finally: # 解绑当前窗口释放插件持有的窗口句柄 try: dm.UnBindWindow() except Exception: pass # 强制释放 COM 引用 dm NoneUnBindWindow在窗口已经销毁时调用会抛异常所以必须包一层 try。另外 Python 的 COM 对象释放有些玄学dm None只解除 Python 里的引用底层组件可能还挂在 COM 运行库里。条件允许的话再调一次ctypes.windll.ole32.CoUninitialize()但要在同一线程里配对使用否则会报CoInitialize has not been called。日志方面建议统一走标准logging而不是print。因为自动化脚本跑起来后哪些步骤成功了、哪些返回了异常值这些信息对排查来说比代码本身更重要。4. 避坑专章7.2213 最常见的五个翻车现场4.1 加载失败AttributeError: module object has no attribute Dispatch这个现象出现在首次安装或换了 Python 环境后。原因多半是pywin32没装或者版本和系统位数不匹配。解决在命令行执行pip install pywin32然后进 Python 环境跑一下import win32com.client确认导入正常。如果装完还报错检查当前 Python 是 32 位还是 64 位和系统不是一回事时先换成和系统同位的解释器。4.2 64 位进程调用 32 位 DLL直接 OSError 193现象脚本一启动就报[WinError 193] %1 不是有效的 Win32 应用程序。原因插件 7.x 的 32 位 DLL 不能进 64 位进程。解决要么强制使用 32 位 Python 解释器跑要么找到你资源目录下对应 64 位的 DLL 副本。这个资源本身带了双版本文件用对即可。还有一个更隐蔽的点即使你的 Python 是 64 位的如果通过虚拟环境激活到了 32 位兼容目录下也可能绕回这个错误。4.3 注册返回值是 -1但网络正常、注册码正确现象Reg返回-1并且没有任何日志提示。原因这通常是字符集问题。注册码如果包含中文以外的特殊字符在传给 COM 组件时编码不一致会导致校验失败。解决在调用Reg之前先import locale看默认编码然后显式用reg_code.encode(utf-8)解码再传。实际项目里我见过有人因此卡了整整一下午最后发现是 Windows 控制台代码页是 GBK而脚本文件是 UTF-8。4.4 绑定窗口后截图全黑或内容错位现象Capture返回成功但图片内容是黑屏或者显示的是桌面而不是目标窗口。原因BindWindow时选了normal模式但目标窗口有硬件加速或视频层覆盖普通 GDI 抓不到内容。解决把显示模式换成dx2或dx3同时把绑定参数里的鼠标和键盘模式调成windows。不同显卡驱动对 dx 模式支持度不同遇到还黑就逐个模式试这个没法用一套参数通吃所有机器。4.5 授权失效重启脚本后 Reg 返回 0现象昨天跑得好好的今天一启动注册失败返回0。原因插件的本地授权有有效期而且有些授权是和机器码绑定的重装系统、换了网卡、甚至调整过系统时间都会导致特征码变化。解决去拿最新的注册码并检查机器码是否和授权绑定时一致。作者在DmHelper.py里其实也做了一件事——把机器码打出来方便你一眼看出到底变没变。我遇到这种问题第一反应就是对比机器码而不是怀疑网络。5. 版本选型与边界7.2213 标配了什么功能哪里会不够用5.1 这个版本的能力清单与配置参数速查7.2213 在自动化领域里算是一个功能很全的版本常用面覆盖找图、找色、找字键鼠模拟、窗口绑定、后台截图到 OCR 文字识别。以下是我用的时候最常用的接口参数速查表功能接口常用参数返回约定找图FindPicx1,y1,x2,y2,pic,偏色,相似度,方向找到返回坐标找不到返回(-1,-1)找色FindColor范围、颜色值、偏色、方向找到返回坐标找字FindStr范围、文字、字体、颜色、偏色找到返回坐标绑定窗口BindWindow窗口句柄、显示/鼠标/键盘模式1成功截图Capture左上右下坐标、保存路径1成功OCROcr图片路径、识别参数返回识别后的字符串这套接口的通用性很好尤其是FindPic和FindStr在办公自动化里最常用。你不需要额外训练模型只需要准备目标图片或文字模板。这个“免训练”的特点也是它在新手手里比现代视觉识别方案更好起步的原因。5.2 边界哪些场景它撑不住你要有预期7.2213 的短板也很明显第一它是为 Windows 桌面设计的Linux 和 macOS 下直接用不了第二后台绑定对窗口类型敏感DirectX 窗口、带硬件解码的视频播放器、有独立渲染进程的现代应用都可能绑不上或者绑上了截图失败第三OCR 能力相对基础对复杂排版和清晰度不高的文字识别率不太稳定。实际用的时候我的习惯是把重 OCR 交给专门的识别库插件只负责取图和切图。这个版本的另一个价值是稳定和经典。新版组件功能更多但随之而来的是接口更复杂、授权策略更严格。如果你只是要完成鼠标键盘模拟、找图找色、窗口处理这三板斧7.2213 完全够用而且资料多、踩坑经验容易搜索到。6. 进阶技巧写一个注册状态自检 多开句柄隔离的增强模板把DmHelper.py拿来现用只是第一步更稳的用法是改成带状态自检和实例隔离的模板。具体做法是在get_dm_instance里增加注册状态缓存防止重复调用Reg导致授权次数被消耗同时在多开场景里为每个自动化任务单独创建对象实例不共享同一个dm句柄避免窗口绑定互相覆盖。_reg_status_cache {} def get_dm_instance_with_cache(reg_code: str, cache_key: str default): if cache_key in _reg_status_cache: return _reg_status_cache[cache_key] dm win32com.client.Dispatch(dm.dmsoft) reg_result dm.Reg(reg_code, ) if reg_result ! 1: raise RuntimeError(freg failed: {reg_result}) _reg_status_cache[cache_key] dm return dm缓存机制的作用不只是省时间。很多授权是限定并发次数的反复做Reg会把授权额度打满然后莫名其妙返回失败。有了缓存同一进程内只注册一次后面全走内存复用。多开隔离方面我一般这样组织任务dm1 get_dm_instance_with_cache(reg_code, cache_keytask_a) dm2 get_dm_instance_with_cache(reg_code, cache_keytask_b)每个任务维护自己的窗口绑定和截图状态互不干扰。如果共用同一个对象后一个任务绑定窗口会把前一个的绑定顶掉如果你正好在跑多窗口自动化很容易发生“只动了最后一个窗口前面的全没反应”的怪象。这个增强模板我后来一直在用。从那以后每次起新项目不管资源包里有没有现成的注册例子我都会强制走一遍“初始化自检 → 返回值校验 → 缓存 → 多实例隔离”这套流程。配合上日志基本上能让插件这种黑匣子组件变得可控不少。希望这篇拆解能帮你把DmHelper.py吃透少走几步弯路。本文还有配套的精品资源点击获取

相关新闻

5 分钟上手 North-Micro-Vision-Instruct-bf16:在 Apple Silicon 上本地跑通图像描述的完整指南

5 分钟上手 North-Micro-Vision-Instruct-bf16:在 Apple Silicon 上本地跑通图像描述的完整指南

【免费下载链接】North-Micro-Vision-Instruct-bf16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/North-Micro-Vision-Instruct-bf16 点击查看 免费下载 North-Micro-Vision-Instruct-bf16 是一个专为 Apple Silicon(M 系列芯片&#x…

2026/10/17 16:14:27 阅读更多 →
鸿蒙下Flutter测试框架反射装载适配与规模化分发

鸿蒙下Flutter测试框架反射装载适配与规模化分发

test_reflective_loader 这个名字,很多 Flutter 开发者可能只在跑测试时瞥见过一眼,但真正能说清它底层在干嘛的人不多。这次我们团队在把一套针对鸿蒙 HarmonyOS 的 Flutter 测试基建落地时,在这个组件上扎扎实实折腾了几周,踩了…

2026/10/17 16:14:27 阅读更多 →
XERJ零配置自动索引教程:一条命令让PDF、CSV、SQLite和日志全部可搜索

XERJ零配置自动索引教程:一条命令让PDF、CSV、SQLite和日志全部可搜索

XERJ零配置自动索引教程:一条命令让PDF、CSV、SQLite和日志全部可搜索 【免费下载链接】xerj XERJ is the new way for AI to search data. Its autoindex capability activates agents to know your data without the token waste of grep and sed. One command in…

2026/10/17 16:14:27 阅读更多 →

最新新闻

Unity虚拟装配中的机械运动仿真:从可视化到工程验证

Unity虚拟装配中的机械运动仿真:从可视化到工程验证

1. 这不是“转个齿轮”那么简单:虚拟装配仿真里藏着的机械逻辑陷阱很多人第一次在Unity里拖进一个齿轮模型,加个Rigidbody和HingeJoint,再写几行代码让电机轴转起来,看到齿轮咬合转动,就以为“机械运动仿真”这事搞定了…

2026/10/17 17:11:17 阅读更多 →
从工具调用到具身执行:AI-Agent走出屏幕的关键跃迁

从工具调用到具身执行:AI-Agent走出屏幕的关键跃迁

1. 为什么AI-Agent必须走出屏幕:工具调用的天花板效应过去半年我一直在折腾AI-Agent,从最早的Function Calling到MCP协议,再到把Agent接进机械臂做抓取实验。说说最直观的感受:工具调用玩到极致之后,你会明显撞上一堵墙…

2026/10/17 17:11:17 阅读更多 →
MailCheap统计功能详解:打开/点击追踪与收件箱分布报告,数据不再虚高

MailCheap统计功能详解:打开/点击追踪与收件箱分布报告,数据不再虚高

【免费下载链接】mailcheap Newsletters where you pay for the emails you send, not for dormant subscribers, at a fraction of the price of beehiiv and the like. Open source: self-host it, or use mailcheap.ai. 项目地址: https://gitcode.com/gh_mirror…

2026/10/17 17:11:17 阅读更多 →
实时识别自定义词库:语音转文字工具的配置与调优指南

实时识别自定义词库:语音转文字工具的配置与调优指南

我做会议记录和视频字幕已经有快五年了,中间换过不少语音转文字工具。这里面最让人头疼的就是那些专业术语,无论什么工具,碰上一堆人名、产品代号、技术名词,识别结果基本就是灾难现场。所以当我看到“实时识别可自定义词库”这个…

2026/10/17 17:11:17 阅读更多 →
Unity中的Task异步编程:线程模型、主线程调度与协程选型

Unity中的Task异步编程:线程模型、主线程调度与协程选型

1. 先搞懂Unity的线程模型1.1 主线程到底是什么很多人刚开始接触Unity多线程的时候,第一反应是:我直接开个线程不就行了?但很快就踩坑了——动不动就报错,或者画面直接卡死,甚至编辑器崩溃。要理解Task在Unity中该怎么…

2026/10/17 17:11:17 阅读更多 →
Claude Code模板体系实战:CLAUDE.md与Slash Commands提效指南

Claude Code模板体系实战:CLAUDE.md与Slash Commands提效指南

说真的,第一次接触 Claude Code 的时候我还是比较谨慎的,命令行式 AI 编程工具听起来很酷,但总觉得差点什么。直到我花了两周时间把所有重复性的工程操作沉淀成了一套模板体系,这工具才真正从"玩具"变成了每天离不开的生…

2026/10/17 17:10:14 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 14:23:36 阅读更多 →