退出码 0、日志干净,但一件事也没干成:自动化脚本的 9 种静默失败

发布时间:2026/10/13 3:24:53

退出码 0、日志干净,但一件事也没干成:自动化脚本的 9 种静默失败 自动化脚本的 9 种静默失败不报错、不崩溃、就是不干活脚本跑完退出码 0日志干干净净一件事也没干成。这种失败最难查因为它不留下任何线索。下面 9 种是我实际踩过的每一种都给出现象、真因、一条自检命令、修法。1. 浏览器随父进程一起被回收现象脚本里启动的 Chrome等脚本跑完就消失了下次再连接 CDP 端口直接ECONNREFUSED。真因浏览器进程是命令行会话的子进程会话结束即被清理。用Start-Process、schtasks、WMI 启动也躲不掉。自检curl-s--noproxy*--max-time3http://127.0.0.1:9333/json/version# 空输出 已经没了修法启动和操作必须写在同一条命令里cmd //c startC:/Program Files/Google/Chrome/Application/chrome.exe\--remote-debugging-port9333--user-data-dirC:\...\profile--no-first-run\;sleep14;nodeyour-script.js2. curl 探测本地端口走了代理现象明明服务在跑curl就是超时或返回代理的错误页。真因环境里设了http_proxy本地请求也被送到代理去了。自检env|grep-iproxy修法探测本地端口一律加--noproxy *。这条我记了很久才形成肌肉记忆。3. 运行时版本被静默升级现象昨天还好好的脚本今天报No such file or directory。真因托管运行时被自动升级路径里的版本目录变了比如 Node22.22.2-3→22.22.2-6。写死路径的任务全部失效。自检lsC:/Users/你/.workbuddy/binaries/node/versions/修法脚本里先探测再取用别写死版本号N$(ls-d/path/to/versions/*/|tail-1)/node.exe4. 定时任务到期自动停跑现象任务一直在列表里状态还是 ACTIVE但就是没执行记录。真因任务设了validUntil过期后静默停跑状态字段不更新。自检创建/修改任务时检查有效期字段定期核对最近一次执行时间。修法要么不设validUntil要么设一个远超预期的日期并在任务描述里写明到期前续期。5. 后台标签页里鼠标键盘全部静默失效现象坐标算对了、事件也发了页面上毫无反应同样的代码在前台标签就正常。真因标签处于后台时visibilityState hidden浏览器会抑制输入事件。自检document.visibilityState// hidden 就是它修法操作前先切前台awaitsend(Page.bringToFront);顺带一提后台标签里window.screenX / screenY也会返回 0拿它算坐标就是错的详见滑块验证码那篇。6. 灌入长文本时换行被吞掉现象脚本把 Markdown 塞进编辑器结果所有换行消失全文糊成一坨。真因Input.insertText对换行符处理不可靠富文本编辑器CodeMirror / Tiptap / Draft.js尤其明显。修法走剪贴板 CtrlVimportpyperclip,time pyperclip.copy(markdown_text)# 聚焦编辑器后pyautogui.hotkey(ctrl,v)7. 二维码过期了但页面上没写过期现象脚本一直等扫码等满十几分钟超时退出页面上那个码其实早就失效了。真因过期态的视觉表现是模糊的码 中间一个刷新圈innerText里不含过期两个字按文字判断永远判断不出来。修法要么定时刷新二维码点二维码框中心要么看图——截图后人工确认。别指望文本匹配。8. 接口返回 200业务其实是失败的现象抓包看状态码全 200事情没办成。真因业务错误码藏在响应体里。比如签到接口{code:10001,msg:今天已签到请明天再来}HTTP 状态是 200code才是真相。再比如状态查询接口返回 200 但字段全是零值——那不代表真的为零可能只是它查的是另一套维度。修法断言要打到响应体字段不能只看 HTTP 状态。而且要先搞清楚哪个字段才是权威口径。9. 状态查询接口和实际操作接口口径不一致这是我踩得最狠的一条。同一个签到功能查询接口说today_checked_in: false、streak_days: 0看起来就是没签到、连签断了。但实际调操作接口返回的是今天已签到请明天再来。哪个是真的操作接口的回执是真的。查询接口在这个上下文里返回的是另一套维度的数据赛季维度赛季未开启时字段全零。教训判断做没做成永远以操作接口的回执为准不要用查询接口的状态字段去推断。附一条命令的自检清单把上面最容易犯的几条串起来开工前跑一次#!/usr/bin/env bash# 自检端口 / 代理 / 运行时路径 / 标签前台PORT${1:-9333}echo[1] CDP 端口curl-s--noproxy*--max-time3http://127.0.0.1:${PORT}/json/version\echo OK||echo ✗ 浏览器没起来可能被回收echo[2] 代理环境ifenv|grep-qihttp_proxy;thenecho ⚠ 存在代理本地请求请加 --noproxy *elseecho OKfiecho[3] Node 运行时ls-d$HOME/.workbuddy/binaries/node/versions/*/2/dev/null|tail-1echo[4] Python venvls-d$HOME/.workbuddy/binaries/python/envs/*/2/dev/null|tail-1跑完这四项能挡掉一半的脚本没反应。总结这些坑的共同点失败路径上没有报错。所以写自动化脚本时别只看退出码。关键动作后面要跟断言点完按钮 → 断言 URL 变了 / 出现了成功文案提交表单 → 断言列表里多了一条调用接口 → 断言响应体里的业务码上传文件 → 断言页面上出现了新资源的 URL没有断言的自动化等于没有自动化。它只是在安静地假装成功。
延伸阅读

更多相关文章

2026/10/13 3:24:53

【修炼01】51单片机点灯入门:P2.0口1秒闪烁

前言本实验基于STC89C52单片机,12MHz晶振,通过软件延时控制P2.0引脚LED,实现亮1s、灭1s循环闪烁。采用REGX52.H标准头文件,代码为基础IO输出入门案例,Keil C51编译后可直接烧录测试,适合新手理解IO电平操作…

2026/10/13 3:24:53

eNSP三层架构实验深度排障指南:从HCIA考试到真实项目

1. 为什么这个三层架构实验不是“照着拓扑图连几根线”就完事了?“ensp-三层网络架构实验”——光看标题,很多人第一反应是:不就是用华为eNSP模拟器搭个接入层、汇聚层、核心层,配几条静态路由,ping通就算交差&#xf…

2026/10/13 5:55:00

给 Coding Agent 加一层快速决策网关:Jev 实战

最近大半年,我一直在折腾 Coding Agent,把 Claude Code 和 Codex 同时接进同一个项目里的体验,让我最深的感受不是模型变聪明了,而是决策链路实在太长。每次 Agent 要决定“下一步干什么”,都得把当前状态打包发给大模…

2026/10/13 5:55:00

用鸿蒙开发鸿蒙:DevEco工具链落地PC公测版的实践与避坑指南

1. 为什么说“用鸿蒙开发鸿蒙”是个分水岭去年我还在为“鸿蒙应用只能在Windows/Mac上开发”而头疼,现在这层窗户纸被捅破了。DevEco Studio、DevEco Code、DevEco CLI 随鸿蒙PC公测版一起放出,等于把完整的开发工具链搬到了鸿蒙系统自己家里。简单说&am…

2026/10/13 5:55:00

鸿蒙PC公测版发布:三件套工具链实现“用鸿蒙开发鸿蒙”

“用鸿蒙开发鸿蒙”这句话,初看像一句绕口令,细品其实是这轮更新最核心的信号。鸿蒙PC公测版正式到来,而DevEco Studio、DevEco Code、DevEco CLI这整套开发工具链,也同步在鸿蒙PC上跑了起来。以前我们聊鸿蒙开发,都是…

2026/10/13 5:55:00

QKeyMapper:基于Qt的低级键盘钩子改键工具原理与编译实践

简介:QKeyMapper是一款基于Qt Widget与WinAPI开发的按键映射工具,适配Win10和Win11,全程无需修改注册表、不用重启系统即可生效,适合游戏键位调整、特殊按键替换、办公快捷键重排以及虚拟手柄摇杆模拟等应用。资源包为24.26MB的zi…

2026/10/13 5:50:00

K8s Nacos集群部署避坑指南:Raft一致性与动态配置实战

/* 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 5:19:27

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/12 12:01:26

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/12 12:54:07

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/13 0:04:41

基于Triton部署YOLO目标检测:从训练脚本到线上服务

简介:这份资源面向希望将目标检测模型落地到生产环境的深度学习开发者与算法工程师,聚焦于用 Triton Inference Server 部署 YOLOv9 的完整实战方案,解决从训练权重到线上推理服务之间的工程化难题。压缩包共 16 个文件,约 886KB&…

2026/10/13 0:04:41

手把手教你云端部署Qwen-Image-2.1:从GPU选型到在线文生图服务

Qwen-Image-2.1 这个开源的图像生成模型,最近在内容创作和 AI 应用圈子里热度相当高。它属于通义 Qwen 系列里的视觉生成分支,让我眼前一亮的是它对中文长文本的理解能力——以前用那些老方案生成带中文文字的图,十个里九个是“乱码印刷体”&…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑