一条发布链卡了 10 小时:僵尸进程、浏览器生命周期与时间窗编排
一条发布链卡了 10 小时僵尸进程、浏览器生命周期与时间窗编排凌晨两点四平台连发的脚本跑起来了。按经验 20 分钟能收工。第二天中午我回来看它还停在第 3 步进度条纹丝不动。终端输出最后一行是CONTENT_OK之后什么都没了。进程没崩、没报错、CPU 占用 17 秒——它就那么安静地挂着。这一篇写三件事那个挂了 10 小时的进程是怎么来的、我踩过的浏览器生命周期坑、以及把平台限流当成调度资源来排期。一、病根脚本跑完了进程没退出出事的脚本最后一步是发布操作逻辑都执行完了日志打印正常。问题出在结尾// 结尾什么都没有脚本内部开了一个 CDP 的 WebSocket 连接去驱动浏览器业务逻辑结束后没有关闭连接也没有process.exit()。Node 的事件循环里还挂着一个活跃的 socketnode进程就永远不会自然退出。这在交互式终端里看不出问题你以为命令跑完了但在链式脚本里是致命的nodestep1.jsnodestep2.jsnodestep3.js# step3 挂住 → 后面永远不执行链就停在这儿一直停到有人来杀它。修复两条硬规则第一条自研脚本一律显式退出。// 业务逻辑结束后try{ws.close()}catch(e){}process.exit(0);// 别省这一行第二条加超时兜底。就算将来某个环节忘了关连接也不能让它无限挂着constHARD_TIMEOUT8*60*1000;setTimeout((){console.log(HARD_TIMEOUT);process.exit(1);},HARD_TIMEOUT).unref?.();.unref()让这个定时器不阻止进程正常退出只在进程该退没退时才兜底。怎么判断是不是僵尸三个特征凑齐两个基本就是终端输出停在某一行不再增长但命令没返回进程存在、CPU 几乎不动、也不退出后续步骤完全没开始现场确认用进程列表看启动时间——那个挂了 10 小时的进程启动时间戳就是昨晚 02:33一眼就能认出来。顺带一个反直觉的点nohup ... 在这个环境里也会被回收脱离启动方式不管用。长等待必须用工具自带的后台执行能力而不是自己在 shell 里 fork。二、浏览器生命周期命令结束浏览器就没了第二个坑更隐蔽。我习惯分两步走先起浏览器再跑脚本。# 第一步启动调试端口chrome.exe --remote-debugging-port9333--user-data-dir...# 第二步另一条命令nodescript.js# → connect ECONNREFUSED 127.0.0.1:9333第一步那条命令一结束浏览器进程就被环境回收了。第二条命令去连 9333连不上。解法启动和操作必须写在同一条命令里。cmd //c start chrome.exe --remote-debugging-port9333\--user-data-dirC:\...\profile--no-first-run;\sleep16;\nodescript.jssleep不能省——调试端口要几秒才就绪太早连会失败。另外两个配套细节用--user-data-dir指定固定 profilecookie 才能跨命令保留不用每次重新登录新建标签页要用PUT方法curl -X PUT http://127.0.0.1:9333/json/new?urlencoded url。用 GET 会被 Chrome 直接拒绝报unsafe HTTP verb而且是静默失败——返回的内容不是 JSON解析出来是空很容易误判成建标签失败三、后台标签的输入为什么会被吞掉这个是排查最久的。脚本跑在后台标签文字怎么也输不进去insertText和keyDown都像石沉大海。Page.bringToFront只是把标签切到前台但页面的visibilityState仍然是hidden前端框架React 尤其会直接丢弃输入事件。正解是焦点模拟awaitsend(Emulation.setFocusEmulationEnabled,{enabled:true});而且每个新连接都要重新 enable——这是连接级的状态不是页面级的。新开一个 WebSocket 连 CDP就得再调一次。同类问题的还有按钮点击.click()对 React 按钮经常无效因为 DOM 里存在隐藏副本getBoundingClientRect()全为 0你点中的是那个看不见的。正确做法是先按 rect 过滤出可见元素再用真实鼠标事件点击。四、平台限流的三种形态把踩过的限流整理成表这是排期的基础形态典型平台表现重置时机日历日限CSDN约 2 篇/天、掘金1 篇/天编辑器明确提示今日发文额度已用完自然日 00:00滚动 24 小时知乎点发布无反应toast「近期发布频率过高请24小时后重试~」上次发布时刻 24h无日限51CTO、腾讯云开发者社区、简书随时可发—人工闸门博客园首次开通博客需申请后台提示账号未开通博客审核通过滚动 24 小时那种最坑因为它的提示只闪 1–2 秒。我第一次遇到时连点三次都以为是自己脚本没点中按钮——实际上每次平台都拒绝了只是拒绝信息消失得太快。抓它的方法点击后800 毫秒内截图或者挂一个MutationObserver监听 toast 容器。判据别用按钮文字变没变要用线上文章 URL 是否真的可访问。另有一个反直觉的教训博客园卡了 22 小时在申请审核队列其实是走错了入口。真正能自助开通的是另一个创建页填博客地址名 选皮肤不是那个需要人工审核的申请表。五、时间窗编排把限流当排期资源既然限流客观存在就别硬碰。我把任务排成一条流水线T0 探测额度无日限的平台立刻发 T0 把需要等待的任务挂成一次性定时任务 00:05 日历日限平台额度刚重置 上次24h缓冲 滚动限流平台顺序不能反。日限额度重置后如果先被别的任务占掉当天就没机会了而滚动限流是按上次发布时间算的早一秒都发不出去。关键是不用自己熬夜。把00:05 发 CSDN 和掘金写成一次性定时任务让它在点触发人去睡觉。第二天早上起来看结果就行。排期时留缓冲日限平台写 00:05 而不是 00:00滚动限流写 24h 再加 10 分钟。边界踩点失败的概率很高。六、一份自检清单写完自动化发布链按这个过一遍每个自研脚本结尾都有process.exit(0)有超时兜底且用了.unref()浏览器启动与操作在同一条命令内/json/new用的是 PUT 而不是 GET每个新 CDP 连接都调了setFocusEmulationEnabled点击前用getBoundingClientRect过滤可见元素失败判据是线上 URL 可访问不是按钮文字变了有日限的任务排在额度重置之后滚动限流的任务按上次发布时间 24h 缓冲排七、最后这三个坑有个共同点它们都不报错。僵尸进程不报错它只是不退出浏览器被回收不报错它只是连不上后台标签丢输入不报错它只是没反应。真正耗掉 10 小时的不是 bug 本身是看起来没出错所以一直等下去这个判断。所以现在我的默认假设是如果一条自动化命令超过预期时间还没返回先怀疑进程挂起和浏览器生命周期而不是怀疑平台接口。

相关新闻

量化软件推荐 参数搜索和独立验证三款工具怎样选

量化软件推荐 参数搜索和独立验证三款工具怎样选

量化软件推荐,准备反复修改参数的人可以比较BigQuant、牛股王股票和青柠量化。愿意自己记录表达式及模型改动,可评估BigQuant;希望先限定现有因子与交易模型的少量调整,可检查牛股王股票;需要参数实验室及步进样本外验…

2026/10/14 2:30:25 阅读更多 →
【单片机课设毕设项目】基于单片机的智能婴儿床心率体温监测与图像远程监护装置设计 基于WIFI的婴儿监护生理环境监测与哄睡联动系统设计(032709)

【单片机课设毕设项目】基于单片机的智能婴儿床心率体温监测与图像远程监护装置设计 基于WIFI的婴儿监护生理环境监测与哄睡联动系统设计(032709)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/14 2:30:25 阅读更多 →
个人量化软件对比 三款工具如何解释少数交易拉高收益

个人量化软件对比 三款工具如何解释少数交易拉高收益

个人量化软件对比,面对一条收益不错、却可能由少数交易贡献的曲线,可以比较米筐研究工具、牛股王股票和掘金量化。需要自行阅读头寸、流水并设计收益归因,可了解米筐RQAlpha Plus;希望从单次收益、盈亏比和历史明细开始复核&#…

2026/10/14 2:30:25 阅读更多 →

最新新闻

视频卡顿排查指南:从编码端到高通硬解的四层定位

视频卡顿排查指南:从编码端到高通硬解的四层定位

/* 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 3:13:33 阅读更多 →
PyTorch加载LiTS医学影像分割数据集:从NIfTI到DataLoader完整指南

PyTorch加载LiTS医学影像分割数据集:从NIfTI到DataLoader完整指南

做医学影像分割的朋友,应该都绕不开LiTS——肝肿瘤分割挑战数据集。我第一次接触它是在一个腹部器官分割的练习项目里,当时天真地把.nii文件读出来就直接往PyTorch的DataLoader里塞,跑出来的分割图基本“一片黑”,肿瘤区域的Dice掉…

2026/10/14 3:13:33 阅读更多 →
技术生态全解析:概念、构成要素与健康度评估框架

技术生态全解析:概念、构成要素与健康度评估框架

技术在变,术语也在变。"技术生态"这四个字近些年频繁出现在各种技术会议、岗位 JD、产品发布稿里,好像不提生态就显得格局不够大。但问一句"什么叫技术生态",能当场说清楚的人其实不多。有人把它等同于开源社区的活跃度&…

2026/10/14 3:13:33 阅读更多 →
实战|从 Word/Excel 一键生成带备注的汇报 PPT:福昕 Office 助手 Skill 演示助编原理与落地

实战|从 Word/Excel 一键生成带备注的汇报 PPT:福昕 Office 助手 Skill 演示助编原理与落地

教师和企业培训师长期面对同一类需求:把已经打磨过的 Word 讲义或 Excel 数据表"翻译"成可在讲台上放映的 PPT,并附带演讲者备注。手工操作的链路通常是:复制 Word 章节标题到每张幻灯片 → 粘贴正文 → 删减冗余 → 套版式 → 写备…

2026/10/14 3:13:33 阅读更多 →
Zephyr RTOS 开发环境搭建:从工具链到 hello world 完整指南

Zephyr RTOS 开发环境搭建:从工具链到 hello world 完整指南

/* 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 3:13:33 阅读更多 →
Turbulenz SDK 0.17.0 版本解读:Canvas 2D 渲染、InputDevice 重构与游戏本地化支持

Turbulenz SDK 0.17.0 版本解读:Canvas 2D 渲染、InputDevice 重构与游戏本地化支持

游戏开发图形学 【免费下载链接】turbulenz_engine Turbulenz is a modular 3D and 2D game framework for making HTML5 powered games for browsers, desktops and mobile devices. 项目地址: https://gitcode.com/gh_mirrors/tu/turbulenz_engine 点击查看 免费下…

2026/10/14 3:12:33 阅读更多 →

日新闻

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/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →