Gauge-Python 自动化测试实战:语言运行器原理与用例管理
简介这是Gauge测试框架的Python语言运行器源码包面向使用Python编写自动化测试的开发者、测试工程师以及希望深入理解Gauge插件机制的技术人员主要解决Gauge项目与Python语言之间的测试执行衔接和结果解析问题。压缩包共56个文件体积约70KB内容以34个Python源码文件为主体涵盖解析器、执行器、校验器、消息处理器、静态加载器、重构器等核心模块同时包含若干Markdown说明文档、YAML和JSON配置、Shell与Bat构建脚本以及requirements等依赖文件便于在本地或CI环境完成编译、测试和安装。目前已有372人学习下载。通过源码可以梳理Gauge语言运行器的工作流程理解插件协议、步骤实现发现、参数解析等关键机制参考其测试用例和覆盖率脚本还能掌握一套完整的语言运行器验证方法。对计划开发自定义测试框架插件或排查Gauge集成问题的开发者这份体积紧凑、模块清晰的源码包具有直接的学习与参考价值。1. 为什么自动化团队值得给 Gauge 配一个 Python 语言运行器从用例失控说起维护过两套以上自动化脚本的团队多少都会遇到同一个问题用例文本散在文档里执行代码散在仓库里产品、测试、开发各看各的改一次步骤描述就要全局搜一遍。Gauge 的做法是把用例写成纯文本 spec用例和执行代码之间通过语言运行器连起来gauge-python 就是这条链路上最常用的 Python 语言运行器让熟悉 Python 的测试人员直接写步骤、做断言、接 requests 和 Selenium。对已经在用 Python 做接口或 UI 自动化、但用例管理开始失控的团队来说这是把「测试逻辑」和「用例表达」分离的轻量方案。读用例的人不用看代码写代码的人不用纠结措辞两边通过 step 文本这一层契约对齐。2. 语言运行器的原理与安装gauge-python 是怎么和 Gauge 对话的2.1 语言运行器不是普通插件Runner 进程与协议很多人第一次接触 gauge-python 时会有一个误区以为它只是个代码高亮插件或者只是 Gauge 的一个「语言扩展」。实际上语言运行器language runner是 Gauge 执行链路里跑在主进程之外的独立子进程。Gauge 核心负责读 spec、解析步骤、调度用例、生成报告但它不关心步骤里的逻辑用什么语言写。当 spec 里出现一行步骤Gauge 核心会把这行文本发给当前激活的 runnerrunner 在自己的进程里找到对应的函数并执行再把执行结果、日志、报错信息回传给 Gauge。这意味着你的 Python 代码不是在 Gauge 的 JVM 或 Go 进程里跑的而是在一个独立的 Python 解释器里跑。这套设计的直接收益是隔离Python 包冲突、依赖崩溃、全局变量脏掉最多拖垮 runner 本身不会让整个测试调度崩掉。代价是你要额外管理一个子进程的环境。早期版本里 Gauge 与 runner 之间走的是标准输出上的消息协议后来的版本逐步迁移到更稳定的远程调用协议这个细节对日常写步骤没有影响但能解释清楚一个现象为什么装完 Gauge 还要单独pip install gauge-python为什么报错经常出现在「runner 启动阶段」。2.2 对比其他 runner为什么 Python 值得选Gauge 生态里常见的语言运行器有 Java、JavaScriptNode.js、Python、Ruby 等。如果你的团队主力是 Java那用 Java runner 没有任何问题但如果你像我一样维护的是一堆 requests 脚本、pytest 用例和 Selenium 页面对象那选 Python 有很实际的理由不需要编译和 JVM 启动runner 子进程起来很快单个步骤的反馈循环短。Python 生态里现成的断言、重试、参数化、数据生成工具可以直接在步骤函数里用不需要额外包装。requests、Selenium、Playwright、SQLAlchemy 这些库在 Python 测试栈里几乎是标配团队里招人、交接的成本低。和 pytest 不是非此即彼的关系你完全可以保留 pytest 跑底层冒烟用 Gauge 承接需要业务方可读的端到端用例。我一般会在一个项目里同时保留两种形态纯技术校验用 pytest涉及多角色、多步骤、需要业务评审的用 Gauge。这样 Gauge 的 spec 不会被技术细节淹没。2.3 安装与初始化三步拉起一个可运行骨架安装 Gauge 本身的方式和操作系统有关常见做法是包管理器安装或官方脚本。装完 Gauge 之后再装 Python runner然后初始化项目骨架# macOS 上安装 Gauge 的一种常见方式 brew install gauge # 安装 Python 语言运行器 pip install gauge-python # 初始化一个 python 项目骨架 gauge init python三条命令干的事情不一样。第一条装的是 Gauge 核心负责 spec 解析、执行调度、报告生成。第二条装的是 runner 包它会被 Gauge 在启动时拉起。第三条是在当前目录生成一套最小可运行的骨架里面包含 specs 目录、step_impl 目录、env 目录和一份示例 spec。初始化之后先不要急着写自己的用例直接跑一遍骨架验证链路是通的gauge run specs如果这条命令能正常出报告说明 Gauge 核心找到了 Python runnerrunner 也能正常加载 step 实现链路已经打通。这一步是很多人忽略的装完不先跑骨架一上来就写几十行步骤出问题时分不清是环境问题还是代码问题。2.4 骨架目录与关键配置初始化出来的目录结构大致是下面这样不同 Gauge 版本细节略有差异但骨架逻辑一致目录或文件作用specs/存放 .spec 用例文本一个文件就是一个业务场景集合step_impl/存放 Python 步骤实现文件env/环境配置env/default 下放当前环境的变量和 runner 参数reports/执行后自动生成报告的位置有一个配置在 Python runner 下特别值得提前看一眼解释器路径。Gauge 拉起 runner 时用的是环境配置里指定的 Python而不是你当前终端激活的那个。如果你用 pyenv、venv 或 Homebrew 的 Python很可能出现「终端里能 importGauge 里 import 失败」的情况。常见做法是在 env/default 下放一个 python.properties 之类的配置文件把解释器路径写清楚PYTHON_PATH /usr/local/bin/python3不同版本的字段名可能有差异以脚手架生成的文件为准。我的习惯是先用which python3拿到绝对路径再写进去尽量避免用python3这种软链防止 shell 环境和 runner 环境解析到不同位置。3. 写第一个 Python 步骤装饰器、参数转换与数据驱动3.1 step 装饰器把自然语言映射到函数骨架跑通之后最核心的动作就是把 spec 里的一行行自然语言「挂」到 Python 函数上。gauge-python 提供的核心工具是 step 装饰器。# step_impl/login_steps.py from gauge.python import step step(用户输入用户名 username 和密码 password) def login(username: str, password: str) - None: print(f尝试登录{username} / {password}) assert username and password, 用户名和密码不能为空这里的关键是step装饰器里那串文本必须和 spec 里的步骤文本对得上尖括号里是参数占位符。Gauge 在解析 spec 时看到「用户输入用户名 demo 和密码 123456」会把demo映射到username把123456映射到password然后调用login函数。占位符名称与函数参数名保持一致是硬要求否则 runner 会报找不到参数。尖括号的顺序由 spec 文本决定和函数签名顺序一致即可。还有一个小习惯步骤文本里别写之外的特殊符号尤其是、*这类在 spec 里有特殊含义的字符容易触发解析上的玄学问题。3.2 参数类型与隐式转换别全都写 str初学者最容易犯的错是参数注解全部写 str。Gauge 的 runner 会把 spec 里拿到的原始文本按函数注解做转换注解写错了转换失败会直接挂在执行阶段而不是启动阶段。from gauge.python import step step(计算商品总价 单价 price 数量 count) def calc_total(price: float, count: int) - float: total price * count assert total 0, 总价必须大于 0 return total这里price声明为 floatcount声明为 int。spec 里写「计算商品总价 单价 9.9 数量 3」runner 会分别转成 9.9 和 3然后参与计算。支持的类型可以按需选用注解类型说明常见坑str默认原文传入表格里的数字也会变成字符串int转整数空字符串会抛 ValueErrorfloat转浮点数空值和带单位文本会转换失败bool转布尔只有 true/false 这类词可靠别传 0 或 1参数转换失败的报错信息通常不太直观它会告诉你某个步骤执行失败但不会直接说「这行的类型转不了」。我遇到这类问题时的排查路径固定是先看 spec 里的值再看函数注解最后看异常栈里有没有could not convert之类的关键字。3.3 表格驱动一个场景跑多组数据Gauge 的表格是数据驱动的基础形态。spec 里直接写一张表步骤里的参数占位符引用列名每一行数据都会独立执行一遍场景。## 登录校验 | 用户名 | 密码 | 期望结果 | | demo | 123456 | success | | admin | wrong | fail | * 使用 用户名 和 密码 登录 * 断言结果是 期望结果对应的步骤实现from gauge.python import step step(使用 用户名 和 密码 登录) def do_login(username: str, password: str) - None: # 这里接 requests 或 Selenium print(f登录{username} / {password}) step(断言结果是 期望结果) def check_result(expected: str) - None: # expected 是 success 或 fail assert expected in (success, fail)表格驱动的好处是加数据不用改代码测试同学直接在 spec 里追加一行就能扩用例。需要注意列名就是参数名别在 spec 里用同名的中文列名和英文列名混在一起容易看花眼一行失败不会阻塞后续行执行因为每一行是独立的一次执行这符合数据驱动的预期但如果你希望某一行失败就停住整个场景就得在步骤代码里自己做中断控制Gauge 默认不提供这种「短路」开关。4. 把 requests 和浏览器自动化收进同一条用例链接口与 UI 混排实战4.1 接口测试步骤里直接封装 requests接口自动化是 Python 团队最顺手的切入点。把 requests 调用封装成步骤spec 里的每行文本就变成一个可读的接口动作。import os import requests from gauge.python import step BASE_URL os.getenv(BASE_URL, http://localhost:8080) step(调用登录接口 用户 u 密码 p) def call_login_api(u: str, p: str) - dict: resp requests.post( f{BASE_URL}/login, json{username: u, password: p}, timeout5, ) assert resp.status_code 200, fHTTP {resp.status_code} return resp.json()BASE_URL 从环境变量读取是值得养成习惯的别写死在步骤函数里。Gauge 的环境配置支持在每个 env 目录下设置变量CI、本地、预发各用一个 env切换环境时不需要改代码。注意这个场景下 token、cookie 这类状态怎么在步骤之间传递。常见做法是存到 Gauge 提供的 DataStore 里suite 级和 scenario 级都有对应作用域不同小版本导入路径略有差别以本地安装的 gauge-python 包导出为准。from gauge.python import step, data_store step(保存登录返回的 token) def save_token(): data_store.scenario[token] call_login_api(demo, 123456)[token]用 scenario 级存储的好处是每个场景自动隔离不会出现上一个场景的登录态污染下一个场景的问题。4.2 UI 测试Selenium 集成与全局 driver 管理UI 自动化和接口自动化在 Gauge 里可以混在同一个 spec 里这也是 Gauge 相对 pytest 更顺的一点业务场景本来就是跨端到端的先调接口拿数据再打开页面断言展示这种流程在一个场景里自然表达出来。from gauge.python import step from selenium import webdriver driver None step(打开首页) def open_home(): global driver driver webdriver.Chrome() driver.get(http://localhost:8080) step(页面上出现 text) def assert_page_text(text: str): assert text in driver.page_source, f页面中找不到文本{text}driver 用全局变量管理是常见的做法因为步骤函数之间没有天然的实例共享全局变量是最直接的办法。但全局变量随之而来的问题是要手动清理否则跑完一轮Chrome 进程还挂在系统里。后面避坑章节里我会专门说清理的问题这里先记住一个原则在哪打开就在哪负责关掉。4.3 失败截图与报告让执行结果能追溯Gauge 默认生成的 HTML 报告对接口自动化来说已经够用每一行步骤的执行状态、耗时、标准输出都会展示。真正需要额外处理的是 UI 步骤失败时的截图。常见做法是把截图保存到项目里约定好的目录然后在步骤里通过 Gauge 的执行消息接口把文件附加到报告或者在打印日志里输出截图路径。如果你安装的版本没有暴露附加文件的接口直接打印路径到标准输出也能接受只是追溯体验差一点。step(页面上出现 text) def assert_page_text(text: str): if text not in driver.page_source: driver.save_screenshot(freports/assert_fail_{text[:20]}.png) raise AssertionError(f页面中找不到文本{text})这个做法的价值是让失败信息里不只有「找不到文本」还有当时的页面状态。截图文件名里带上关键词和步骤名排障时能少翻很多日志。4.4 执行方式单文件、标签、并行用例写得差不多了执行层面有几种常用姿势# 跑整个 specs 目录 gauge run specs # 只跑某个 spec 文件 gauge run specs/登录.spec # 只跑打了 smoke 标签的场景 gauge run specs --tags smoke并行执行也是 Gauge 的优势点之一常见做法是加--parallel参数并指定并发数具体参数名以gauge run --help输出为准。并行时的第一个认知要建立起来每个 runner 是独立进程全局变量、模块级变量、内存中的登录态全部不共享。你要想在并行的用例之间共享数据必须用外部存储或者 DataStore 里明确跨进程的机制别指望模块里的全局字典能保住。5. 避坑与排查gauge-python 最常见的五个坑与处理记录5.1 步骤定义冲突与文本匹配现象gauge run启动时报 step 重复注册或者更隐蔽的——某行步骤没匹配到预期函数反而被另一个措辞相近的步骤吃掉。原因两个 step_impl 文件里定义了完全相同的步骤文本或者占位符用词不同但其余部分完全一样导致 Gauge 在注册步骤时发生冲突。解决全局搜一遍所有 step 文本grep -r step step_impl/肉眼核对有没有重复文本。步骤文本尽量短、具体动词不要泛化。比如「点击按钮 」这种文本在多个模块里重复出现的概率极高改成「点击登录页的登录按钮」这类带上下文边界的文本冲突和误匹配的概率会小很多。5.2 虚拟环境和解释器路径不同现象终端里pip list能看到 gauge-python但gauge run报ModuleNotFoundError: gauge。更有意思的是pytest 能跑Gauge 就是跑不了。原因Gauge 拉起 runner 时用的解释器不是你当前 shell 激活的那个。常见于 macOS 自带的/usr/bin/python3和 Homebrew、pyenv、venv 里的 Python 不是同一个pip 装进了一个Gauge 用了另一个。解决先确认自己当前用的是哪个解释器which python3然后把绝对路径写进 env 配置里。如果你用 venv路径一般在项目目录下的.venv/bin/python3用 pyenv则在~/.pyenv/shims/python3附近。这一步是全局环境问题里最常见的翻车点几乎每个新接 gauge-python 的同事都会踩一遍。5.3 参数类型转换失败现象表格驱动跑数据时某些行执行到一半挂了报错信息是ValueError: could not convert string to float或类似。原因表格里的空单元格被传成了而函数注解写的是float或int转换器拿到空字符串直接抛错。另一类原因是 spec 里写了1,000这种带格式的数字转换器认不出。解决参数注解保持明确同时在步骤函数开头做一次空值校验step(计算总价 单价 price 数量 count) def calc_total(price: str, count: str) - float: if not price or not count: raise ValueError(price 和 count 不能为空) return float(price) * int(count)如果数据本身可能带分隔符在进入步骤前就清洗掉别把清洗逻辑散落在每个步骤函数里。5.4 中文与编码问题现象Windows 上跑gauge run控制台报UnicodeDecodeError或者 spec 里的中文步骤文本明明和 step 装饰器里的文本一致却匹配不上。原因spec 文件被系统默认编码保存成了 GBK 或其它非 UTF-8 编码Gauge 读取时按 UTF-8 解析失败Python 侧的标准输出编码也可能不一致导致报错信息乱码。解决所有 spec、py、properties 文件统一使用 UTF-8 保存这条在 Windows 上尤其要重视。CI 或命令行执行时可以显式指定 Python 的 IO 编码PYTHONIOENCODINGutf-8 gauge run specs另外别用系统自带记事本编辑 spec 文件它默认保存编码不直观这是经验之谈。5.5 执行后子进程残留现象跑完一轮用例系统里出现一堆 chrome 进程或者 python 子进程没有退出终端一直挂着。原因Selenium 的 webdriver 没有在结束时 quit或某些步骤里开了线程、长连接没有回收。Gauge 的 runner 是子进程主进程不强制杀掉它它就容易因为非守护线程卡住。解决把清理逻辑集中在 after_suite 钩子里from gauge.python import after_suite after_suite def clean_up(): global driver if driver is not None: driver.quit() driver None如果发现已经残留了进程手动兜底清理pkill -f chromedriver pkill -f chrome习惯上我会在连续跑完几轮后扫一眼进程列表确认没有越积越多再走下一步。6. 进阶使用hook 生命周期、并行执行与项目目录组织Gauge 的 hook 机制值得花半小时摸一遍。before_suite、after_suite、before_step、after_step 这些钩子分别对应执行链路上的关键节点可以统一处理环境准备、数据清理、步骤耗时记录。from gauge.python import before_suite, before_step before_suite def prepare_env(): print(suite 开始前准备数据) before_step def log_step(step_text: str): print(f即将执行{step_text})hook 里别放重逻辑尤其是 before_step 这种每行步骤都会触发的钩子放一次数据库连接或者 sleep 三秒整个 suite 的执行时间会肉眼可见地膨胀。并行执行时建议先在单进程把用例跑稳定再开 --parallel。直接上并行会把「用例本身的问题」和「并发隔离的问题」混在一起排障难度翻倍。我一般先在默认环境跑一遍确认没有 shared 状态污染再加并行和并发数。项目目录组织上我现在的固定套路是按业务模块拆 spec按技术职责拆 step_impl目录放什么specs/login/登录相关场景specs/order/订单相关场景step_impl/http/接口封装步骤step_impl/ui/页面操作步骤spec 按业务模块拆业务方评审时只看对应目录step_impl 按技术职责拆接口步骤和 UI 步骤不会互相污染 import。公共的 driver 管理、数据清理放一个单独的 base 文件其它步骤文件从那里引用。最后分享一个踩出来的教训。某次在模拟项目X里我把所有步骤堆在一个 step_impl 文件里写到两千行之后公共步骤改了文本三个模块的 spec 一起挂掉找匹配错误找了一下午。从那以后我每个项目都强制走一遍「spec 按业务模块拆目录、step_impl 按技术职责拆文件、全局 grep 去重步骤文本」这个流程。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

PyTorch buffers() 详解:模型隐形状态管理工程实践

PyTorch buffers() 详解:模型隐形状态管理工程实践

有人问“BatchNorm的running_mean到底存在哪”的时候,我的第一反应是直接把 torch.nn.Module.buffers(recurseTrue) 丢给他。刚开始用PyTorch的开发者,绝大多数都把模型状态等同于 parameters() ,好像一个模型的状态全在可学习参数里。但…

2026/10/17 16:20:30 阅读更多 →
PyTorch named_buffers全解析:从buffer机制到实战踩坑

PyTorch named_buffers全解析:从buffer机制到实战踩坑

有一次我在排查一个模型导出问题,发现在model.state_dict()里多出了几个既不是卷积核也不是偏置的张量,加载权重的时候还因此报出了 missing keys。查来查去,才意识到这段代码里的自定义模块特意用register_buffer()注册了一些均值向量。而要…

2026/10/17 16:20:30 阅读更多 →
麦田物语毕业设计:Vue3+SpringBoot可运行工程包

麦田物语毕业设计:Vue3+SpringBoot可运行工程包

简介:本资源是一份以‘麦田物语’为美术与叙事主题的Unity课程设计项目,面向高校数字媒体、游戏开发及相关专业本科生,适用于毕业设计、课程实训或独立游戏原型开发场景。项目完整呈现了2D横版角色动画系统、场景交互逻辑与资源管理结构&…

2026/10/17 16:20:30 阅读更多 →

最新新闻

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 阅读更多 →