<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>文玑阁</title><link>https://imwen.com/</link><description>玑琢算法万象，文藏俗世烟火-IT技术基于ZBLOG模板</description><item><title>别只顾着学工具！优秀数据分析师，拼的是底层思维</title><link>https://imwen.com/post/363.html</link><description>&lt;p&gt;不少踏入数据分析领域的朋友，都会走进同一个误区：埋头苦练 Excel 函数、钻研 SQL 语法、学习 Python 代码、打磨可视化图表，以为把工具练熟，就算吃透数据分析了。&lt;/p&gt;&lt;p&gt;可真当业务问题找上门，难题就来了：老板问销售额为何下滑，只会甩出一张趋势图；业务纠结渠道预算分配，只会简单对比转化率；财务疑惑利润缩水，也只是罗列收入、成本和费用。等到会议上被追问解决方案，更是哑口无言。&lt;/p&gt;&lt;p&gt;其实工具只是入门敲门砖，底层分析逻辑，才是数据分析师拉开差距的核心。今天就用通俗的语言，拆解 9 大核心底层逻辑，帮你跳出 “只会做报表” 的困境。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一、先理清问题，别急着拉数据&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061664190561.png&quot; width=&quot;640&quot; height=&quot;358&quot; title=&quot;数据分析&quot; alt=&quot;1.png&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; style=&quot;width: 640px; height: 358px;&quot;/&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;接到需求第一反应不是打开系统取数，而是搞懂对方真正想解决什么事。&lt;/p&gt;&lt;p&gt;一句 “分析下近期销售情况” 范围太广：是看业绩有没有达标？找销量下滑的原因？还是规划下月销售策略？使用报告的人又是谁？&lt;/p&gt;&lt;p&gt;没理清核心问题就盲目做表画图，忙活半天的成果，大概率和对方需求背道而驰。拿到需求先问清 4 个关键点：服务什么决策、核心业务问题、要分析结果 / 原因还是方案、报告给谁看。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、翻译业务语言，搭建指标体系&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061664219449.png&quot; width=&quot;640&quot; height=&quot;352&quot; title=&quot;数据分析&quot; alt=&quot;2.png&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; style=&quot;width: 640px; height: 352px;&quot;/&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;业务口中 “销售变差”“用户质量下降”“经营压力大”，都是模糊的感受，不能作为分析依据。我们要做的，就是把口语转化成实打实的数据指标。&lt;/p&gt;&lt;p&gt;销售好坏：看销售额、订单量、转化率、客单价、复购率&lt;/p&gt;&lt;p&gt;用户质量：看留存率、退款率、投诉率、复购周期&lt;/p&gt;&lt;p&gt;经营状况：看毛利率、费用率、库存周转、回款周期&lt;/p&gt;&lt;p&gt;资深分析师脑海里都有一套完整指标树：看销售拆解流量、转化、客单；看利润拆解收入、成本、费用；看客户拆解新增、活跃、流失…… 围绕问题搭建指标，分析才有方向。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三、层层拆解，从现象深挖根源&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;只描述 “销售额降了、转化率低了”，相当于只说出了 “症状”，远远不够。分析的关键，是顺着业务链路拆解，找到问题根源。&lt;/p&gt;&lt;p&gt;举个简单例子：&lt;/p&gt;&lt;p&gt;销售额 = 流量 × 转化率 × 客单价&lt;/p&gt;&lt;p&gt;整体销量下滑，就逐一排查：是各个渠道流量集体减少？还是客户下单转化率变低？或是主推低价产品拉低了客单价？是全国所有区域都出问题，还是个别区域拖了后腿？&lt;/p&gt;&lt;p&gt;利润下滑也同理，沿着「收入 - 成本 - 费用」逐层拆分，从结果指标追到过程指标，才能精准定位病灶。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;四、学会对比，单独数字毫无意义&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;脱离对比的数字，只是一串冰冷字符。“本月销售额 500 万”，没人知道这是好是坏，判断标准全靠对比。&lt;/p&gt;&lt;p&gt;日常分析常用 5 类对比方式：&lt;/p&gt;&lt;p&gt;和历史比：同比、环比，查看长期趋势&lt;/p&gt;&lt;p&gt;和目标比：对照业绩预算，看清完成差距&lt;/p&gt;&lt;p&gt;和结构比：拆分产品、渠道、区域，看各自贡献&lt;/p&gt;&lt;p&gt;和标杆比：对标行业、优秀团队，找准自身水平&lt;/p&gt;&lt;p&gt;和投入比：核算 ROI、人效、坪效，判断投入价值&lt;/p&gt;&lt;p&gt;同样是收入上涨 20%，若行业整体涨幅 50%，说明发展滞后；若费用涨幅远超收入，也代表增长质量堪忧。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;五、扎根业务，读懂数据背后的场景&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;很多分析师犯的错：死守数据，脱离实际业务，凭数字妄下结论。&lt;/p&gt;&lt;p&gt;看到库存增加，就认定采购盲目囤货？有可能是新品备货、供应链锁货；看到费用上涨，就判定铺张浪费？也可能是新项目前期投入。&lt;/p&gt;&lt;p&gt;数据是表象，业务才是本质。多走进一线，了解获客、成交、备货、回款全流程，才能避免 “数据正确，结论跑偏” 的尴尬。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;六、区分相关与因果，不盲目下定论&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;两个数据同步变化，不代表二者存在因果关系，这是数据分析的一大坑。&lt;/p&gt;&lt;p&gt;广告投放增加、销量跟着上涨，不一定是广告起了作用，也可能恰逢行业旺季；活动期间转化率提升，未必是活动策略优秀，也可能是进店客户质量变高。&lt;/p&gt;&lt;p&gt;判断真正原因，要排除季节、活动、客群等干扰项，结合对照组、长期数据和业务逻辑综合验证，严谨求证再输出结论。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;七、打造分析闭环，让报告落地成行动&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061664255465.png&quot; width=&quot;640&quot; height=&quot;193&quot; title=&quot;数据分析&quot; alt=&quot;3.png&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; style=&quot;width: 640px; height: 193px;&quot;/&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;一份合格的分析报告，终点从来不是文档和图表，而是落地执行。&lt;/p&gt;&lt;p&gt;只指出 “转化率下降、库存积压” 毫无价值，业务更想知道：问题出在哪个环节？由谁负责整改？什么时候落地？整改后要跟踪哪些指标？&lt;/p&gt;&lt;p&gt;完整分析闭环：发现问题→定位原因→给出方案→推动执行→跟踪数据→复盘优化，让数据真正指导业务动作。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;八、善用工具，工具为分析逻辑服务&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Excel、SQL、Python、BI 工具都很实用，但它们永远只是辅助。&lt;/p&gt;&lt;p&gt;工具的作用是整合零散数据、统一数据口径、自动生成报表、快速下钻查询，帮我们节省重复劳作的时间。真正决定分析深度的，永远是思考逻辑。用好 FineBI 这类自助 BI 工具打通各系统数据，能让分析流程更顺畅，但核心能力依旧在人。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;九、核心总结：三大分析准则&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;把复杂的逻辑浓缩成三句实操口诀，吃透就能进阶：&lt;/p&gt;&lt;p&gt;先问清业务问题，再动手找数据&lt;/p&gt;&lt;p&gt;先拆解核心指标，再解读数据结果&lt;/p&gt;&lt;p&gt;先得出合理判断，再推动业务闭环&lt;/p&gt;&lt;p&gt;&lt;strong&gt;分析师成长三阶段&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;入门阶段：会取数、做表、做可视化，完成 “做出数据”；&lt;/p&gt;&lt;p&gt;进阶阶段：会拆指标、找原因、写结论，做到 “讲清问题”；&lt;/p&gt;&lt;p&gt;高阶阶段：懂业务、做决策、推落地，实现 “数据变现”。&lt;/p&gt;&lt;p&gt;工具会更新、软件会迭代，但分析思维是终身受用的硬实力。工具决定你起步快慢，底层逻辑，决定你能走多远。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 16 Jun 2026 17:45:15 +0800</pubDate></item><item><title>[编程]Python自制完整版扫雷游戏｜双计时模式+音效+撒花特效（附完整源码）</title><link>https://imwen.com/post/362.html</link><description>&lt;p&gt;&lt;strong&gt;一、项目前言&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;扫雷是Windows经典休闲小游戏，也是非常适合Python初学者练手的图形界面游戏项目。相比简单的控制台程序，本次我们使用 Pygame 开发可视化扫雷游戏，全程面向对象+模块化编程。&lt;/p&gt;&lt;p&gt;本次开发的扫雷游戏不仅仅是基础开格子、插旗、地雷判定，还新增了两大特色功能，完全媲美成品小游戏：&lt;/p&gt;&lt;p&gt;双游戏模式：正计时（记录通关用时）/ 倒计时（限时挑战）自由切换&lt;/p&gt;&lt;p&gt;全套音效系统：背景音乐、插旗音效、点击音效、踩雷爆炸音效&lt;/p&gt;&lt;p&gt;胜利撒花粒子特效：通关自动彩色粒子飘落喝彩&lt;/p&gt;&lt;p&gt;完整游戏逻辑：递归空白展开、地雷随机生成、胜负判定、游戏重试/退出&lt;/p&gt;&lt;p&gt;人性化UI：顶部计时栏、倒计时不足30秒红字预警、弹窗提示&lt;/p&gt;&lt;p&gt;适合Python初学者学习：图形化编程、游戏逻辑、递归算法、粒子动画、音频播放、GUI弹窗交互。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、开发环境与素材准备&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 依赖库安装&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;本项目基于 pygame-ce （适用python 3.14以上版本，3.12及以下版本安装pygame）新版游戏库，执行安装命令：&lt;/p&gt;&lt;pre class=&quot;brush:plain;toolbar:false&quot;&gt;pip&amp;nbsp;install&amp;nbsp;pygame-ce&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;2. 项目文件结构&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;需要提前准备图片素材和音效素材，目录结构如下：&lt;/p&gt;&lt;pre class=&quot;brush:plain;toolbar:false&quot;&gt;saolei/
├─&amp;nbsp;saolei.py&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;主程序代码
├─&amp;nbsp;扫雷素材/&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;游戏格子图片（0-11.png）
└─&amp;nbsp;扫雷素材/
&amp;nbsp;&amp;nbsp;&amp;nbsp;├─&amp;nbsp;start.mp3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;背景音乐
&amp;nbsp;&amp;nbsp;&amp;nbsp;├─&amp;nbsp;click.wav&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;插旗音效
&amp;nbsp;&amp;nbsp;&amp;nbsp;├─&amp;nbsp;rightClick.wav&amp;nbsp;#&amp;nbsp;普通点击音效
&amp;nbsp;&amp;nbsp;&amp;nbsp;└─&amp;nbsp;zero.wav&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;踩雷爆炸音效&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;三、整体开发思路与核心原理&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 游戏地图设计&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我们使用二维列表存储游戏地图数据，通过数值区分格子状态：&lt;/p&gt;&lt;p&gt;200：地雷格子&lt;/p&gt;&lt;p&gt;100-108：未翻开的空白/数字格子&lt;/p&gt;&lt;p&gt;0-8：已翻开的数字格子（代表周围地雷数）&lt;/p&gt;&lt;p&gt;10200：插旗标记的地雷&lt;/p&gt;&lt;p&gt;-1：已触发的地雷&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. 核心算法：递归展开空白格子&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;扫雷最核心的功能就是点击空白格自动连片展开，这里使用递归算法实现：&lt;/p&gt;&lt;p&gt;当点击无雷空白格时，自动遍历周围8格，若依旧是空白格则继续递归展开，遇到数字格停止递归，完美还原原版扫雷效果。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. 双计时模式原理&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;正计时模式：游戏开始从零秒累加，通关展示总用时，无时间压力，适合休闲游玩&lt;/p&gt;&lt;p&gt;倒计时模式：固定180秒限时，剩余30秒文字变红预警，时间耗尽直接判定游戏失败，适合挑战速通&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4. 粒子撒花特效&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;自定义粒子类，通关瞬间生成大量彩色粒子，模拟重力下落、自由飘散、生命周期消失，实现动态喝彩效果。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;四、核心功能代码详解&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 游戏模式选择界面&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;使用Tkinter制作启动选择窗口，采用Grid布局，彻底解决按钮被遮挡、无法点击的问题，自适应窗口大小：&lt;/p&gt;&lt;pre class=&quot;brush:python;toolbar:false&quot;&gt;def&amp;nbsp;select_game_mode():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root&amp;nbsp;=&amp;nbsp;tk.Tk()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.title(&amp;quot;选择游戏模式&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.resizable(False,&amp;nbsp;False)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.minsize(320,&amp;nbsp;150)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mode&amp;nbsp;=&amp;nbsp;tk.IntVar(value=0)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk.Label(root,&amp;nbsp;text=&amp;quot;请选择游戏模式：&amp;quot;,&amp;nbsp;font=(&amp;quot;simhei&amp;quot;,&amp;nbsp;12)).grid(row=0,&amp;nbsp;column=0,&amp;nbsp;columnspan=2,&amp;nbsp;pady=10)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk.Radiobutton(root,&amp;nbsp;text=&amp;quot;计时模式（记录通关用时）&amp;quot;,&amp;nbsp;variable=mode,&amp;nbsp;value=0).grid(row=1,&amp;nbsp;column=0,&amp;nbsp;sticky=&amp;quot;w&amp;quot;,&amp;nbsp;padx=20)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk.Radiobutton(root,&amp;nbsp;text=&amp;quot;倒计时模式（限时挑战180秒）&amp;quot;,&amp;nbsp;variable=mode,&amp;nbsp;value=1).grid(row=2,&amp;nbsp;column=0,&amp;nbsp;sticky=&amp;quot;w&amp;quot;,&amp;nbsp;padx=20)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;confirm():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.destroy()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tk.Button(root,&amp;nbsp;text=&amp;quot;开始游戏&amp;quot;,&amp;nbsp;command=confirm,&amp;nbsp;width=12).grid(row=3,&amp;nbsp;column=0,&amp;nbsp;columnspan=2,&amp;nbsp;pady=15)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.update_idletasks()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.geometry(&amp;quot;&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;root.mainloop()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;mode.get()&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061432280965.png&quot; width=&quot;316&quot; height=&quot;185&quot; title=&quot;Python制作扫雷游戏-选择游戏模式.png&quot; alt=&quot;选择游戏模式.png&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; style=&quot;width: 316px; height: 185px;&quot;/&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. 地雷地图生成逻辑&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;随机生成地雷，遍历地图计算每个格子周围地雷数量，赋值到二维数组，为后续渲染做铺垫：&lt;/p&gt;&lt;pre class=&quot;brush:python;toolbar:false&quot;&gt;def&amp;nbsp;reset_game():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;global&amp;nbsp;map_data,&amp;nbsp;game_over,&amp;nbsp;game_win,&amp;nbsp;particles,&amp;nbsp;time_start,&amp;nbsp;current_time
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;game_over&amp;nbsp;=&amp;nbsp;False
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;game_win&amp;nbsp;=&amp;nbsp;False
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;particles.clear()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;current_time&amp;nbsp;=&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time_start&amp;nbsp;=&amp;nbsp;pygame.time.get_ticks()

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;map_data&amp;nbsp;=&amp;nbsp;[[0&amp;nbsp;for&amp;nbsp;_&amp;nbsp;in&amp;nbsp;range(COL&amp;nbsp;+&amp;nbsp;2)]&amp;nbsp;for&amp;nbsp;_&amp;nbsp;in&amp;nbsp;range(ROW&amp;nbsp;+&amp;nbsp;2)]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;随机布置地雷
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count&amp;nbsp;=&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;count&amp;nbsp;&amp;lt;&amp;nbsp;NUM:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r&amp;nbsp;=&amp;nbsp;random.randint(1,&amp;nbsp;ROW)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c&amp;nbsp;=&amp;nbsp;random.randint(1,&amp;nbsp;COL)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;map_data[r][c]&amp;nbsp;!=&amp;nbsp;200:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;map_data[r][c]&amp;nbsp;=&amp;nbsp;200
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;count&amp;nbsp;+=&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;计算周围地雷数量
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;range(1,&amp;nbsp;ROW&amp;nbsp;+&amp;nbsp;1):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;j&amp;nbsp;in&amp;nbsp;range(1,&amp;nbsp;COL&amp;nbsp;+&amp;nbsp;1):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;map_data[i][j]&amp;nbsp;!=&amp;nbsp;200:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mine_num&amp;nbsp;=&amp;nbsp;0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;m&amp;nbsp;in&amp;nbsp;range(i&amp;nbsp;-&amp;nbsp;1,&amp;nbsp;i&amp;nbsp;+&amp;nbsp;2):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;n&amp;nbsp;in&amp;nbsp;range(j&amp;nbsp;-&amp;nbsp;1,&amp;nbsp;j&amp;nbsp;+&amp;nbsp;2):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;map_data[m][n]&amp;nbsp;==&amp;nbsp;200:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mine_num&amp;nbsp;+=&amp;nbsp;1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;map_data[i][j]&amp;nbsp;=&amp;nbsp;mine_num&amp;nbsp;+&amp;nbsp;100&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;3. 递归空白格子展开&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;brush:python;toolbar:false&quot;&gt;def&amp;nbsp;open_zero(row,&amp;nbsp;col):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;map_data[row][col]&amp;nbsp;-=&amp;nbsp;100
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;range(row&amp;nbsp;-&amp;nbsp;1,&amp;nbsp;row&amp;nbsp;+&amp;nbsp;2):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;j&amp;nbsp;in&amp;nbsp;range(col&amp;nbsp;-&amp;nbsp;1,&amp;nbsp;col&amp;nbsp;+&amp;nbsp;2):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;1&amp;nbsp;&amp;lt;=&amp;nbsp;i&amp;nbsp;&amp;lt;=&amp;nbsp;ROW&amp;nbsp;and&amp;nbsp;1&amp;nbsp;&amp;lt;=&amp;nbsp;j&amp;nbsp;&amp;lt;=&amp;nbsp;COL:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;99&amp;nbsp;&amp;lt;=&amp;nbsp;map_data[i][j]&amp;nbsp;&amp;lt;=&amp;nbsp;108:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;map_data[i][j]&amp;nbsp;==&amp;nbsp;100:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;open_zero(i,&amp;nbsp;j)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;map_data[i][j]&amp;nbsp;-=&amp;nbsp;100&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;4. 游戏胜利判定&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;遍历所有格子，无未翻开普通格子即为通关成功：&lt;/p&gt;&lt;pre class=&quot;brush:python;toolbar:false&quot;&gt;def&amp;nbsp;check_win():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;i&amp;nbsp;in&amp;nbsp;range(1,&amp;nbsp;ROW&amp;nbsp;+&amp;nbsp;1):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;j&amp;nbsp;in&amp;nbsp;range(1,&amp;nbsp;COL&amp;nbsp;+&amp;nbsp;1):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;val&amp;nbsp;=&amp;nbsp;map_data[i][j]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;99&amp;nbsp;&amp;lt;=&amp;nbsp;val&amp;nbsp;&amp;lt;=&amp;nbsp;108:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;False
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;True&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;5. 粒子撒花特效类&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;实现粒子生成、重力下落、生命周期销毁，通关触发全屏撒花：&lt;/p&gt;&lt;pre class=&quot;brush:python;toolbar:false&quot;&gt;class&amp;nbsp;Particle:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;__init__(self,&amp;nbsp;x,&amp;nbsp;y):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.x&amp;nbsp;=&amp;nbsp;x
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.y&amp;nbsp;=&amp;nbsp;y
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.vx&amp;nbsp;=&amp;nbsp;random.randint(-4,&amp;nbsp;4)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.vy&amp;nbsp;=&amp;nbsp;random.randint(-6,&amp;nbsp;-2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.radius&amp;nbsp;=&amp;nbsp;random.randint(3,&amp;nbsp;7)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.color&amp;nbsp;=&amp;nbsp;(random.randint(0,&amp;nbsp;255),&amp;nbsp;random.randint(0,&amp;nbsp;255),&amp;nbsp;random.randint(0,&amp;nbsp;255))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.life&amp;nbsp;=&amp;nbsp;60

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;update(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.x&amp;nbsp;+=&amp;nbsp;self.vx
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.y&amp;nbsp;+=&amp;nbsp;self.vy
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.vy&amp;nbsp;+=&amp;nbsp;0.2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.life&amp;nbsp;-=&amp;nbsp;1

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;def&amp;nbsp;draw(self,&amp;nbsp;surf):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pygame.draw.circle(surf,&amp;nbsp;self.color,&amp;nbsp;(int(self.x),&amp;nbsp;int(self.y)),&amp;nbsp;self.radius)&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061432318997.png&quot; width=&quot;446&quot; height=&quot;658&quot; title=&quot;Python制作扫雷游戏-游戏页面.png&quot; alt=&quot;游戏页面.png&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; style=&quot;width: 446px; height: 658px;&quot;/&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;五、游戏功能亮点总结&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 极致完善的游戏逻辑&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;完全复刻原版扫雷：随机地雷、数字提示、右键插旗防误触、空白连片展开、踩雷失败、全图清空胜利。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. 双模式计时系统&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;兼顾休闲游玩和竞速挑战，倒计时红色预警、时间耗尽自动失败，细节拉满。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. 沉浸式音效体验&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;区分背景音乐、点击、插旗、爆炸四种音效，解决pygame不兼容mp3的问题，长短音频分类处理，运行无报错。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4. 动态视觉特效&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;通关彩色粒子撒花喝彩，告别单调弹窗，游戏氛围感十足。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5. 适配性极强&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;修复窗口按钮遮挡、鼠标坐标偏移、音频报错、边界递归越界等所有bug，代码可直接运行。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;六、项目总结与学习收获&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;本次Python扫雷项目，不只是简单的小游戏开发，更是对Python基础知识点的综合实战：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;数据结构&lt;/strong&gt;：二维列表存储游戏地图状态&lt;/p&gt;&lt;p&gt;&lt;strong&gt;算法思维&lt;/strong&gt;：递归算法实现连片展开、随机数生成地图&lt;/p&gt;&lt;p&gt;&lt;strong&gt;图形编程&lt;/strong&gt;：Pygame窗口渲染、贴图、动画绘制&lt;/p&gt;&lt;p&gt;&lt;strong&gt;交互开发&lt;/strong&gt;：鼠标事件监听、Tkinter弹窗交互&lt;/p&gt;&lt;p&gt;&lt;strong&gt;多媒体处理&lt;/strong&gt;：背景音乐、短音效播放适配&lt;/p&gt;&lt;p&gt;&lt;strong&gt;面向对象&lt;/strong&gt;：粒子类封装动画逻辑，代码结构清晰&lt;/p&gt;&lt;p&gt;项目代码注释清晰、模块化程度高，非常适合Python初学者进阶练习，也可直接作为课程设计、期末作业、个人练手项目。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;七、完整源码获取&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;文中所有修复后的完整可运行代码（含双计时模式、撒花、音效、无bug窗口），可直接复制运行，无需二次修改，适配所有Windows Python环境。&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://imwen.com/zb_users/download/2026/%E6%89%AB%E9%9B%B7%E7%B4%A0%E6%9D%90.tar&quot; target=&quot;_blank&quot; title=&quot;扫雷素材&quot;&gt;扫雷素材&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://imwen.com/zb_users/download/2026/saolei.rar&quot; target=&quot;_blank&quot; title=&quot;Python扫雷游戏完整源码&quot;&gt;源码文件&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 14 Jun 2026 08:34:20 +0800</pubDate></item><item><title>AI人物绘画提示词写作指南：告别网红脸，写出有辨识度的真人质感画面</title><link>https://imwen.com/post/361.html</link><description>&lt;p&gt;每次用 AI 画人物，是不是总遇到这些难题？&lt;/p&gt;&lt;p&gt;输入 “高颜值女生、气质出众、高清人像”，最后生成的人物五官千篇一律，清一色的网红脸，精致却毫无灵魂；刻意追求完美肌肤，结果人物满脸塑料感，完全脱离真实人像；想塑造独特风格，堆砌 “氛围感、电影感、高级脸” 等词汇，画面依旧平淡普通。&lt;/p&gt;&lt;p&gt;其实问题根源很简单：AI 无法解读抽象的主观感受，它只识别具象的视觉细节。想要让 AI 画出神态鲜活、特征鲜明、真实自然的人物，核心不是堆砌华丽形容词，而是把人物拆解成&lt;strong&gt;可被识别的视觉元素&lt;/strong&gt;，用精准、有条理的描述搭建完整人物形象。&lt;/p&gt;&lt;p&gt;今天这篇干货，从写作逻辑、分步技巧、完整模板到实战案例，手把手教你撰写专业的人物外貌提示词，新手也能快速上手，轻松摆脱 AI 同质化画面。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一、避坑先行：分清抽象描述与具象描述&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;很多人写提示词的第一误区，就是依赖主观抽象词汇。这类词汇没有统一标准，AI 只会调用数据库里最通用、最模板化的人像模型，最终结果自然大同小异。&lt;/p&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; background-color: rgb(170, 170, 170); border-color: rgb(221, 221, 221);&quot; width=&quot;210&quot;&gt;错误抽象描述（不推荐）&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; background-color: rgb(170, 170, 170); border-color: rgb(221, 221, 221);&quot; width=&quot;360&quot;&gt;正确具象描述（推荐）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; background-color: rgb(187, 187, 187); border-color: rgb(221, 221, 221);&quot; width=&quot;210&quot;&gt;漂亮女生、高颜值、气质高级&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; background-color: rgb(187, 187, 187); border-color: rgb(221, 221, 221);&quot; width=&quot;360&quot;&gt;25 岁东方少女，五官清秀，神情灵动，自带自然少女感 &amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; background-color: rgb(204, 204, 204); border-color: rgb(221, 221, 221);&quot; width=&quot;210&quot;&gt;精致五官、脸蛋好看&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; background-color: rgb(204, 204, 204); border-color: rgb(221, 221, 221);&quot; width=&quot;360&quot;&gt;方圆脸，眼型圆润，眼尾微微下垂，鼻梁小巧立体 &amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; background-color: rgb(170, 170, 170); border-color: rgb(221, 221, 221);&quot; width=&quot;210&quot;&gt;皮肤白皙、肤质完美&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; background-color: rgb(170, 170, 170); border-color: rgb(221, 221, 221);&quot; width=&quot;360&quot;&gt;冷白皮，自然哑光质感，鼻翼有细微毛孔，脸颊浅淡红晕 &amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; background-color: rgb(187, 187, 187); border-color: rgb(221, 221, 221);&quot; width=&quot;210&quot;&gt;长发、穿搭时尚&lt;/td&gt;&lt;td valign=&quot;top&quot; style=&quot;word-break: break-all; background-color: rgb(187, 187, 187); border-color: rgb(221, 221, 221);&quot; width=&quot;360&quot;&gt;深棕羊毛长卷发，发丝蓬松有光泽，身着米白亚麻连衣裙 &amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;简单总结：&lt;strong&gt;放弃 “感觉”，落地 “细节”&lt;/strong&gt;。把模糊的感受转化为年龄、脸型、五官、肤质、发型、体态、服饰、光影等看得见的细节，AI 才能精准落地你的创意。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、分步拆解：四大模块写活人物外貌&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;遵循由整体到局部、由头部到全身的顺序撰写，层层递进搭建人物形象，画面稳定性和辨识度会大幅提升。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;（一）第一步：定整体画像，筑牢人物基础&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;整体画像是人物的 “根基”，优先明确年龄、地域风格、整体气质、情绪状态四大要素，直接框定人物的整体基调，避免 AI 跑偏。年龄决定面部成熟度与皮肤状态，地域风格划定五官基础特征，气质与情绪主导人物的表情、神态和姿态。&lt;/p&gt;&lt;p&gt;实用参考句式：&lt;/p&gt;&lt;p&gt;少女风：一位 22 岁左右的东方年轻女性，五官清秀，神情明亮灵动，自带清新自然的少女感&lt;/p&gt;&lt;p&gt;轻熟风：一位 30 岁左右的东方女性，气质安静松弛，表情淡然克制，整体干净温婉&lt;/p&gt;&lt;p&gt;成熟风：一位 36 岁左右的都市女性，面部轮廓利落，眼神沉稳，气质理性清冷，自带疏离感&lt;/p&gt;&lt;p&gt;⚠️ 重点提醒：开篇不要急于添加 “电影感、氛围感、高级感” 等风格词汇，先把人物本身刻画完整，风格最后补充即可。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;（二）第二步：精雕五官与肤质，打造专属辨识度&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;五官和皮肤是人物辨识度的核心，也是区分 “网红脸” 和 “真人脸” 的关键。不要笼统写 “五官精致”，学会拆分脸型、眉眼、鼻唇，同时合理保留皮肤自然瑕疵，拒绝过度磨皮带来的塑料感。&lt;/p&gt;&lt;p&gt;脸型与轮廓&lt;/p&gt;&lt;p&gt;不用只写 “瓜子脸、鹅蛋脸”，补充线条、下颌线、颧骨细节，人物轮廓会更立体。&lt;/p&gt;&lt;p&gt;示例：鹅蛋脸，脸部线条柔和，下颌线清晰不锋利，颧骨微微外凸，面部骨相自然。&lt;/p&gt;&lt;p&gt;眉眼神态&lt;/p&gt;&lt;p&gt;眼睛是人物的灵魂，除了眼型，一定要补充眼神、瞳孔、光影细节。&lt;/p&gt;&lt;p&gt;示例：标准杏仁眼，眼尾轻微上扬，瞳孔通透有自然高光，眼神平静温柔，眼妆淡雅。&lt;/p&gt;&lt;p&gt;鼻唇细节&lt;/p&gt;&lt;p&gt;简单描述形态即可，贴合整体气质。&lt;/p&gt;&lt;p&gt;示例：鼻梁自然小巧，鼻型秀气；唇形饱满，淡裸色唇妆，嘴唇微微抿起。&lt;/p&gt;&lt;p&gt;皮肤质感（重中之重）&lt;/p&gt;&lt;p&gt;真实的皮肤从不是零瑕疵，刻意保留毛孔、细微雀斑、泛红、浅淡细纹等小细节，才能告别 AI 塑料脸。&lt;/p&gt;&lt;p&gt;反例：零瑕疵冷白皮、肌肤光滑无瑕、磨皮滤镜&lt;/p&gt;&lt;p&gt;正例：自然哑光健康肤色，保留真实毛孔与皮肤纹理，鼻梁处散落细小雀斑，脸颊轻微泛红，妆感极淡。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;（三）第三步：刻画发型、体态与服饰，丰富画面层次&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;头部五官刻画完成后，延伸到发型、体态、服装三大板块，让人物从 “一张脸” 变成完整、有动态的鲜活形象。&lt;/p&gt;&lt;p&gt;发型：拒绝单一 “长发 / 短发”&lt;/p&gt;&lt;p&gt;描述包含发色、长度、卷直、发丝状态、碎发细节，强化画面氛围感。&lt;/p&gt;&lt;p&gt;示例 1：乌黑亮泽的齐肩短发，发尾自然内扣，几缕细碎发丝垂落在脸颊两侧，发丝柔顺有光泽&lt;/p&gt;&lt;p&gt;示例 2：深棕色慵懒长卷发，随意披散在肩头，发丝略带凌乱感，充满生活化气息&lt;/p&gt;&lt;p&gt;体态：赋予人物动态生命力&lt;/p&gt;&lt;p&gt;僵硬的站姿会让画面死板，简单描述肢体姿态、肩膀状态、身体角度，人物会更放松自然。&lt;/p&gt;&lt;p&gt;示例：肩膀完全放松，身体微微侧向镜头，头部轻轻偏转，双手自然垂落，站姿随性，无刻意摆拍痕迹&lt;/p&gt;&lt;p&gt;服饰：区分款式 + 材质，提升画面质感&lt;/p&gt;&lt;p&gt;不要只写 “穿搭好看、时尚”，分别描述服装款式、面料材质、布料形态，不同材质会带来完全不同的视觉触感。&lt;/p&gt;&lt;p&gt;示例 1：身穿米白色亚麻长袖衬衫，布料带有自然褶皱，质感柔软透气，风格简约文艺&lt;/p&gt;&lt;p&gt;示例 2：身着深灰色真丝垂坠衬衫，面料自带低调柔光，垂坠感十足，尽显优雅气质&lt;/p&gt;&lt;p&gt;&lt;strong&gt;（四）第四步：补充光影与镜头，完善整体画面&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;光影和镜头参数是提升画面质感的点睛之笔，不同光线能塑造完全不同的氛围，搭配镜头参数，轻松实现写真、纪实、胶片等风格。&lt;/p&gt;&lt;p&gt;常用光影参考：柔和侧光、室内自然窗光、阴天漫射光、明暗对比光、暖调落日柔光&lt;/p&gt;&lt;p&gt;常用镜头 / 画质参数：真实人像摄影、85mm 人像镜头、浅景深、细腻纹理、高清画质、胶片颗粒感&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三、标准写作顺序：按逻辑组合，告别杂乱堆词&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;零散堆砌词汇会导致画面逻辑混乱，推荐固定通用写作顺序，新手直接套用即可，兼顾逻辑性与完整性：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;年龄与地域风格 → 整体气质 + 情绪 → 脸型 + 五官细节 → 皮肤质感 → 发型细节 → 体态动作 → 服装款式 + 材质 → 光影 + 镜头 + 画质&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;改写对比（直观感受差距）&lt;/p&gt;&lt;p&gt;❌ 旧版（杂乱抽象）：漂亮的中国女生，长头发，穿搭时尚，高级氛围感，高清人像&lt;/p&gt;&lt;p&gt;✅ 新版（有序具象）：一位 30 岁左右的东方女性，气质安静成熟，表情克制淡然。鹅蛋脸，下颌线清晰柔和，杏仁眼，眼神平静疏离。自然哑光肤质，保留鼻翼毛孔与脸颊淡淡泛红，无过度磨皮。乌黑齐肩短发，发尾内扣，碎发贴于脸侧。肩膀放松，身体微侧。身穿深灰色真丝衬衫，面料垂坠有微光。柔和侧光，85mm 人像摄影，浅景深，高清细腻纹理。&lt;/p&gt;&lt;p&gt;四、通用万能模板：一键套用，直接生成优质提示词&lt;/p&gt;&lt;p&gt;整理好可直接复制修改的完整版模板，覆盖绝大多数人像创作场景，根据需求替换括号内内容就行，适配写真、日常人像、复古风、通勤风等多种风格。&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;一位【年龄段】的【东方 / 西方】人物，整体气质【安静 / 明亮 / 成熟 / 清冷 / 松弛 / 理性 / 灵动】，脸型为【鹅蛋脸 / 方圆脸 / 瓜子脸 / 骨相清晰的脸】，面部轮廓【柔和 / 利落 / 下颌线明显 / 颧骨轻微突出】，眼睛为【杏仁眼 / 圆眼 / 细长眼 / 深邃眼】，眼神【平静 / 自信 / 温柔 / 疏离 / 若有所思】，鼻梁【自然 / 挺直 / 小巧 / 有轻微骨感】，嘴唇【自然唇形 / 淡色唇妆 / 微微抿起】，皮肤为【自然哑光 / 水润 / 小麦色 / 冷白皮 / 健康肤色】，保留【轻微毛孔 / 细小雀斑 / 脸颊泛红 / 自然细纹】，拒绝过度磨皮、无塑料感，发型为【齐肩短发 / 黑色长直发 / 自然卷发 / 低马尾 / 慵懒发髻】，发丝【柔软 / 有光泽 / 略微凌乱 / 带有碎发】，体态【肩膀放松 / 微微侧身 / 站姿自然 / 坐姿安静 / 头部轻转】，穿着【服装款式】，材质为【亚麻 / 真丝 / 羊毛 / 皮革 / 粗针织 / 纯棉】，布料有【自然褶皱 / 垂坠感 / 细腻纹理 / 低调光泽】，光影为【柔和侧光 / 自然窗光 / 阴天漫射光 / 落日柔光】，真实人像摄影，细腻皮肤纹理，浅景深，画面干净高清。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;五、实战完整案例参考（3 组不同风格&lt;/strong&gt;）&lt;/p&gt;&lt;p&gt;结合模板创作 3 组不同风格的成品提示词，大家可以参考用词逻辑，灵活改编。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;案例 1：清新少女风（日常人像）&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;一位 22 岁左右的东方少女，整体气质清新灵动，神情明亮活泼。方圆脸，脸部线条圆润柔和，圆眼型，眼眸清澈有神，眼神纯真。鼻梁小巧，自然裸唇。冷白皮，水润质感，脸颊有淡淡的粉色红晕，鼻翼可见细微毛孔。乌黑及腰长直发，发丝柔顺有光泽，额前散落轻薄碎刘海。坐姿放松，上半身微微偏向一侧。身着浅粉色纯棉针织 T 恤，面料柔软亲肤。室内自然窗光，日常纪实人像，高清画质，画面温柔治愈。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;案例 2：清冷都市风（成熟职场人像）&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;一位 34 岁左右的东方都市女性，整体气质理性清冷，表情淡然克制。骨相清晰的鹅蛋脸，下颌线利落分明，细长眼型，眼尾微扬，眼神沉稳疏离。鼻梁高挺有骨感，薄唇，淡豆沙色唇妆。自然健康肤色，哑光质感，眼周有极浅自然细纹，皮肤干净通透。低马尾造型，黑发一丝不苟，发丝整洁。站姿挺拔，肩膀放松，身体微侧。身穿卡其色羊毛西装外套，面料厚实有纹理。室内明暗对比光，职业人像摄影，浅景深，高级质感。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;案例 3：复古文艺风（氛围感写真）&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;一位 28 岁左右的东方女性，整体气质慵懒松弛，神情温柔悠远。鹅蛋脸，颧骨轻微突出，杏仁眼，眼神朦胧若有所思。鼻梁线条柔和，唇形饱满，复古豆沙唇色。暖调自然肤色，皮肤带有细腻纹理，面中散落零星小雀斑。深棕色中长羊毛卷发，随意披散，发丝蓬松略带凌乱。侧身倚靠姿态，动作舒缓。身穿米杏色亚麻连衣裙，布料布满自然褶皱。阴天漫射柔光，复古胶片人像，带有轻微胶片颗粒感，氛围感拉满。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;六、最后总结核心要点&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;核心逻辑：&lt;strong&gt;抛弃抽象感受，聚焦具象细节&lt;/strong&gt;，AI 只识别看得见的视觉元素，细节决定辨识度；&lt;/p&gt;&lt;p&gt;写作顺序：遵循 “整体→五官肤质→发型体态→服饰材质→光影画质”，逻辑清晰，画面更稳定；&lt;/p&gt;&lt;p&gt;真实感技巧：不要追求 “零瑕疵皮肤”，适当保留毛孔、雀斑、细纹等自然细节，远离塑料脸；&lt;/p&gt;&lt;p&gt;高效用法：直接套用通用模板，根据创作风格替换关键词，新手也能快速产出优质提示词。&lt;/p&gt;&lt;p&gt;掌握这套写作方法，你再也不用为 AI 人物千篇一律而烦恼。无论是日常人像、风格写真、复古造型还是职场人像，都能精准把控人物形象，打造出独属于你的、有灵魂、有辨识度的 AI 绘画作品。赶紧收藏模板，动手尝试吧！&lt;/p&gt;</description><pubDate>Wed, 10 Jun 2026 22:35:46 +0800</pubDate></item><item><title>用8张图了解算力网产业链</title><link>https://imwen.com/post/360.html</link><description>&lt;p&gt;本文以通俗的方式全面解读算力网产业链，依次梳理了上游硬件元器件、机房配套设施、中游算力集群、调度平台与运营服务、下游各类行业应用三大产业链环节，分析了各环节价值分布，同时介绍了 CPU、GPU、ASIC、FPGA 四类主流算力芯片的特点、性能差异与技术演进历程，以及 HBM、先进封装等关键配套技术，完整呈现了算力网从底层硬件、算力运营到场景落地的全貌与发展逻辑。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061002306388.png&quot; width=&quot;640&quot; height=&quot;955&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;算力网产业链全景图&quot; style=&quot;width: 640px; height: 955px;&quot;/&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;整条产业链清晰划分为上游核心硬件与基础设施、中游算力基础设施与运营、下游应用与服务三大层级。上游以算力芯片、存储、先进封装等硬件为核心；中游依托服务器、智算中心、算力调度平台实现算力整合运转；下游则延伸至公有云、AIGC 以及各类行业数字化服务，三大环节层层衔接，构成完整的算力产业体系。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061002344216.png&quot; width=&quot;640&quot; height=&quot;955&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;算力芯片与先进封装&quot; style=&quot;width: 640px; height: 955px;&quot;/&gt;&lt;/p&gt;&lt;p&gt;各类算力芯片、存储产品与高速互联组件。CPU 负责通用计算与复杂逻辑处理，GPU 是 AI 训练和推理的主力，ASIC 为定制化场景打造高能效算力，搭配 HBM 高带宽内存提升数据传输效率，同时 Chiplet、2.5D/3D 等先进封装技术进一步强化芯片集成能力，而交换芯片、交换机、光模块、DPU 等设备，共同搭建起设备间高速数据互通的网络通道。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061002418935.png&quot; width=&quot;640&quot; height=&quot;955&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;高速互联与算网传输&quot; style=&quot;width: 640px; height: 955px;&quot;/&gt;&lt;/p&gt;&lt;p&gt;标准化高密度机柜集群依靠统一供电与高速网络，为算力设备提供部署基础；智算中心（IDC）作为高等级机房，主打大模型预训练、微调、推理等 AI 相关业务，同时兼顾绿色低碳与安全运行；除此之外，算力还服务于科研超算领域，支撑气象海洋模拟、基因测序、高能物理仿真等专业科学计算工作。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061002481138.png&quot; width=&quot;640&quot; height=&quot;955&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;机房能源与液冷基础设施&quot; style=&quot;width: 640px; height: 955px;&quot;/&gt;&lt;/p&gt;&lt;p&gt;算力调度平台是算力网络的 “智能中枢”。平台可完成全网算力资源的编排、任务监控与弹性伸缩，能够打破不同机房、多云平台之间的壁垒，实现多算力节点协同工作。它有效整合分散的算力资源，合理分配计算任务，大幅提升整体算力资源的利用率，是实现算力灵活流转的关键平台。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061002538372.png&quot; width=&quot;640&quot; height=&quot;955&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;AI服务器与智算中心集成&quot; style=&quot;width: 640px; height: 955px;&quot;/&gt;&lt;/p&gt;&lt;p&gt;保障算力硬件稳定运行的全品类配套设施。硬件设备的运转离不开电力与散热系统，其中 UPS 不间断电源、变压器、柴油发电机保障电力持续供应，风电、光伏等绿电助力产业低碳发展；液冷技术则解决高密度设备的散热难题，再结合标准化机柜等设施，全方位保障算力集群 7×24 小时安全、稳定、高效运行。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061002629388.png&quot; width=&quot;640&quot; height=&quot;955&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;公有云、大模型与算力服务&quot; style=&quot;width: 640px; height: 955px;&quot;/&gt;&lt;/p&gt;&lt;p&gt;一方面介绍算网运营服务，涵盖网络运维、算力管理、服务计费等日常工作，依托规模化运营形成稳定的现金流；另一方面展示算力的下游应用场景，算力已深度融入智能制造、自动驾驶、智慧金融、智慧医疗、智慧城市、能源电力等众多领域，多元的行业需求持续拉动整个算力产业向前发展。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061002708435.png&quot; width=&quot;640&quot; height=&quot;955&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;行业应用如何消耗算力网&quot; style=&quot;width: 640px; height: 955px;&quot;/&gt;&lt;/p&gt;&lt;p&gt;从技术壁垒、盈利模式、发展潜力等维度划分产业链价值层级。算力芯片与高速互连器件技术壁垒高、研发投入大，属于高价值环节；服务器、机柜、IDC 以集成制造为主，依靠规模效应提升收益，价值处于中等水平；算力调度平台与算网运营能够持续创造稳定收益，价值稳步提升；而各类云服务与行业应用作为需求端，是驱动全产业链发展的核心动力。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026061002759607.png&quot; width=&quot;640&quot; height=&quot;955&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;算力网市场格局与未来趋势&quot; style=&quot;width: 640px; height: 955px;&quot;/&gt;&lt;/p&gt;&lt;p&gt;芯片发展历经 CPU 单核串行、GPU 并行计算、ASIC 定制化崛起、先进封装普及四个阶段；同时对比了 GPU、CPU、ASIC、FPGA 在算力密度、带宽、能效、成本等维度的差异，其中 ASIC 算力密度与能效表现最优。此外，图中还拆解了 HBM 堆叠、2.5D/3D 封装的内部结构，点明算力芯片决定算力峰值，先进封装决定系统带宽与运行效率的核心逻辑。&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Jun 2026 00:12:45 +0800</pubDate></item><item><title>上ERP/MES失败的原因，大多是因为跳过了关键的2步</title><link>https://imwen.com/post/359.html</link><description>&lt;p&gt;做制造的老板，基本都有同一个通病、同一种焦虑：身边同行都在搞数字化，我要是不跟进，是不是迟早要被行业淘汰？&lt;/p&gt;&lt;p&gt;就因为这个念头，很多企业老板跟风冲动，砸几百万甚至上千万，匆匆上线ERP、MES系统。大家都抱着一样的想法：只要系统装好，工厂就能自动运转，效率翻倍、利润暴涨。&lt;/p&gt;&lt;p&gt;可现实打脸特别快：钱实实在在花出去了，买来的系统彻底躺平。员工该用Excel还用Excel，不仅没提效，反而流程更乱、内部消耗更严重，最后活生生变成一套系统上线、一套系统作废，白白浪费资金和精力。&lt;/p&gt;&lt;p&gt;这里直接说句大实话：&lt;strong&gt;制造业数字化，没做好两件核心事，盲目上ERP、MES，基本就是白费钱、找亏吃&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;并不是这些系统没用，而是绝大多数老板都搞反了数字化的底层逻辑。&lt;/p&gt;&lt;p&gt;真正的数字化黄金顺序是：&lt;strong&gt;战略→组织→流程→技术&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;市面上90%的数字化失败案例，问题根源都一样：跳过了最关键的组织重构、流程梳理，一味贪快，直接跳到买系统、装软件这一步。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一、先上系统，一步错、步步错&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;很多老板对数字化有一个致命误区：以为只要上线系统，就能自动降本、自动提效。&lt;/p&gt;&lt;p&gt;但真实情况刚好相反：没有组织架构和业务流程做地基，贸然上线系统，不仅不会赋能工厂，反而会把企业拖进更深的管理泥潭。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1、业务和系统完全脱节，只能削足适履&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;市面上通用的ERP、MES系统，都是按照标准化、大批量的流水线模式设计的，是通用的行业模板。&lt;/p&gt;&lt;p&gt;但咱们实体企业根本不一样，大多都是多品种、小批量、定制化生产，改单、插单、外协代工都是家常便饭，灵活度极高。&lt;/p&gt;&lt;p&gt;强行套用标准化系统，最后的结果只有一个：系统适配不了真实业务，反而要让一线业务迁就死板的系统。原本灵活高效的操作，变得繁琐又僵化，简单工作越做越复杂，一线员工极度抵触，效率不升反降。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2、流程没梳理，系统只会固化落后的管理&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;没上系统之前，企业大大小小的问题、流程漏洞，还能靠老员工、管理层人工协调兜底。&lt;/p&gt;&lt;p&gt;一旦匆忙上线系统，线下所有的断头流程、灰色操作、管理漏洞，会原封不动地搬到线上，还被系统永久固化下来。&lt;/p&gt;&lt;p&gt;订单、生产、计划、仓储、采购各环节信息不通、数据脱节。系统根本做不到数据自动流转，只是把纸质单据换成了电子单据。人工工作量没减少，运营成本变高，整体效率反而更低。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3、组织责任缺位，没人对最终结果负责&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这是制造业数字化最常见的坑：让IT部门主导数字化落地。&lt;/p&gt;&lt;p&gt;IT团队精通系统操作、参数调试，但完全不懂生产、不懂销售、不懂现场交付。他们只能负责搭环境、配参数，根本不懂业务痛点。&lt;/p&gt;&lt;p&gt;而各个业务部门，又会默认这是IT部门的项目，和自己无关，全程被动配合、冷眼旁观。&lt;/p&gt;&lt;p&gt;一旦系统出问题、用不起来，就开始互相甩锅：IT怪业务不会操作，业务怪系统不好用。没人兜底、没人整改，久而久之，花大价钱买的系统，就成了无人问津的摆设。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4、数据严重失真，系统彻底沦为空壳&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;没有提前统一数据标准，工厂里一物多码、一客多号、库存账实不符是常态。&lt;/p&gt;&lt;p&gt;系统里的数据永远滞后、错误百出，甚至有人为造假的情况，根本没法用来排产、核算、做经营决策。&lt;/p&gt;&lt;p&gt;最后就形成了最尴尬的局面：线下靠Excel干活、对账，线上系统数据全是废的。动辄几百万、上千万的投入，彻底打水漂。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、数字化落地的核心：先打地基，再上系统&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;大家一定要记住：系统只是数字化的工具，绝对不是数字化的起点。&lt;/p&gt;&lt;p&gt;想要数字化真正落地、真正帮工厂降本提效，必须按顺序来，先把基础打牢，再谈上线系统。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第一步：重构组织，先定责任人，再启动项目&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;数字化从来不是IT项目，而是老板牵头的一把手工程、企业经营工程。没有业务端主导、没有明确权责，系统上线的那一刻，基本就注定失败。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;正确的做法很清晰&lt;/strong&gt;：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 由老板亲自挂帅&lt;/strong&gt;，成立跨部门的数字化专项小组，生产、运营、质量、采购等所有核心业务负责人全部参与；&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. 每个业务模块，明确对应的业务负责人做第一责任人&lt;/strong&gt;，只对最终经营结果负责，不是只应付“系统顺利上线”这一个表面任务；&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. 给足责任人实权&lt;/strong&gt;，赋予预算调配、跨部门调度、考核奖惩的权力；&lt;/p&gt;&lt;p&gt;始终坚守一个原则：&lt;strong&gt;谁使用、谁负责，谁受益、谁推动&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第二步：梳理流程，先定做事标准，再选系统&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;系统的作用，是把通顺的业务流程固化下来，绝对不能反过来，让死板的系统定义你的业务、束缚你的生产。&lt;/p&gt;&lt;p&gt;先理顺业务，再匹配系统，这才是数字化赋能；流程乱七八糟就盲目上系统，纯粹是瞎折腾。&lt;/p&gt;&lt;p&gt;具体要做好这几点：&lt;/p&gt;&lt;p&gt;1. 从头到尾梳理完整主流程：从接单、排产、生产、质检、入库、发货到回款，全覆盖梳理；&lt;/p&gt;&lt;p&gt;2. 砍掉所有冗余、重复的环节，打通各环节的信息断点，杜绝人工交接的漏洞和差错；&lt;/p&gt;&lt;p&gt;3. 整理出清晰的系统需求清单，明确要解决哪些痛点、实现哪些效果、统一全套数据标准。&lt;/p&gt;&lt;p&gt;说白了：流程通，系统才能通；流程顺，数据才能准。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三、最后想说的真心话&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;企业经营数字化，慢一点就是快一点。&lt;/p&gt;&lt;p&gt;别被行业焦虑裹挟，看着别人做就盲目跟风，拿真金白银去试错。很多企业不是输在不想数字化，而是输在太心急、顺序全错。&lt;/p&gt;&lt;p&gt;先把组织架构捋顺、把业务流程做扎实，再启动ERP、MES系统落地，才能一次上线、一次成功，真正实现降本增效，提升工厂核心竞争力。&lt;/p&gt;&lt;p&gt;记住这句数字化真话：基础不牢，系统白搭；顺序不对，投入全废。&lt;/p&gt;</description><pubDate>Mon, 08 Jun 2026 12:46:50 +0800</pubDate></item><item><title>导出微信聊天记录的方法</title><link>https://imwen.com/post/358.html</link><description>&lt;p&gt;最近因为一个项目需要，要求导出微信客服聊天记录，整理成客服日志，尝试了各种办法，最终找到一个能实现微信聊天记录自定义导出的方法。&lt;/p&gt;&lt;p&gt;第一步，先把手机端的微信记录备份到电脑端。操作方法见手机端微信-右下角“我”-设置-聊天记录管理-备份与恢复/导入与导出。&lt;/p&gt;&lt;p&gt;第二步，下载并安装工具软件：&amp;nbsp;WeFlow。下载地址（GitHub 开源，免费）https://github.com/hicccc77/WeFlow。&lt;/p&gt;&lt;p&gt;第三步，启动WeFlow.初始化配置（第一次打开必做）&lt;/p&gt;&lt;p&gt;1.启动 WeFlow，进入引导页，点 “下一步”。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026060432699987.png&quot; style=&quot;width: 450px; height: 310px;&quot; width=&quot;450&quot; height=&quot;310&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;&quot;/&gt;&lt;/p&gt;&lt;p&gt;2.设置数据库根目录（最重要）&lt;/p&gt;&lt;p&gt;打开微信 PC 版 → 设置 → 账号与存储 → 存储位置，复制路径。&lt;/p&gt;&lt;p&gt;粘贴到 WeFlow 的 “数据库根目录”，点 “下一步”。&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026060433267079.png&quot; style=&quot;width: 450px; height: 324px; float: none; display: inline;&quot; width=&quot;450&quot; height=&quot;324&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;&quot;/&gt;&lt;/p&gt;&lt;p&gt;3.获取解密密钥（自动）&lt;/p&gt;&lt;p&gt;选你的微信账号（wxid）→ 点 自动获取密钥。&lt;/p&gt;&lt;p&gt;微信会自动重启，手机确认登录即可。(如果没有自动重启，就点击设置-退出登录，再重新扫码登录）&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026060433353005.png&quot; style=&quot;width: 450px; height: 324px; float: none; display: inline;&quot; width=&quot;450&quot; height=&quot;324&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;&quot;/&gt;&lt;/p&gt;&lt;p&gt;4.图片密钥（可选）&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026060433437157.png&quot; width=&quot;450&quot; height=&quot;317&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;&quot; style=&quot;width: 450px; height: 317px; float: none; display: inline;&quot;/&gt;&lt;/p&gt;&lt;p&gt;点 “自动获取图片密钥”，失败可忽略（不影响文字统计）。&lt;/p&gt;&lt;p&gt;5. 完成配置，进入主界面（也可选择设置密码，每次登录weFlow需要输入密码）&lt;/p&gt;&lt;p&gt;五、常见问题（避坑）&lt;/p&gt;&lt;p&gt;1.找不到微信数据库？&lt;/p&gt;&lt;p&gt;手动指定路径：&lt;/p&gt;&lt;p&gt;Windows：C:\Users\你的用户名\Documents\WeChat Files\你的微信号\Msg\&lt;/p&gt;&lt;p&gt;Mac：~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/&lt;/p&gt;&lt;p&gt;2。获取密钥失败？&lt;/p&gt;&lt;p&gt;关闭微信 → 重新打开 → 再试 “自动获取密钥” 2–3 次。&lt;/p&gt;&lt;p&gt;确保微信 PC 版是最新版。&lt;/p&gt;&lt;p&gt;3.统计结果不全？&lt;/p&gt;&lt;p&gt;必须先在微信 PC 版做一次完整备份，否则只能读取新记录。&lt;/p&gt;&lt;p&gt;4.没有图片配置，如何重新配置图片&lt;/p&gt;&lt;p&gt;确保 微信 PC 版已登录、聊天记录已备份，且微信不要关闭。在 WeFlow「图片密钥」页，点 自动获取图片密钥 按钮。等待 10–30 秒，提示「密钥获取成功」即可；失败重试 2–3 次。&lt;/p&gt;&lt;p&gt;六、快速重置（彻底重新配置）&lt;/p&gt;&lt;p&gt;1.关闭 WeFlow。&lt;/p&gt;&lt;p&gt;2.打开目录：&lt;/p&gt;&lt;p&gt;3.Windows：%appdata%\WeFlow\config.json&lt;/p&gt;&lt;p&gt;4.删除 config.json → 重启 WeFlow。&lt;/p&gt;&lt;p&gt;5.重新走一遍：数据库目录 → 微信账号 → 解密密钥 → 图片密钥。&lt;/p&gt;&lt;p&gt;注：如何找到 % appdata% 文件夹&lt;/p&gt;&lt;p&gt;键盘按 Win + R 弹出运行窗口，输入如下代码&lt;/p&gt;&lt;pre class=&quot;brush:bash;toolbar:false&quot;&gt;%appdata%&lt;/pre&gt;&lt;p&gt;在打开的文件夹里，往下翻，找到名叫 WeFlow 的文件夹，双击进去&lt;/p&gt;</description><pubDate>Thu, 04 Jun 2026 08:57:55 +0800</pubDate></item><item><title>python搭建网站访问异常监测脚本方案</title><link>https://imwen.com/post/357.html</link><description>&lt;p&gt;团队有个项目，部署在某国企的服务器上，采用了信创的架构。问题来了，极不稳定，经常发现网站访问不了，或者宕机了。于是就想自己用python做个访问脚本，只要有访问异常，就推送信息到微信上，以便及时处理。当然这个是不是以开发这个项目的技术角度来处理。只是站在用户的角度开发一个小工具，运行在本地电脑上（编者将python程序部署在阿里云服务器上）。以下描述实施步骤。&lt;/p&gt;&lt;p&gt;一、项目需求：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;监测目标：B 网站&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;运行环境：放在 A 网站服务器（Linux/Windows 都支持）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;时间规则：8点-10点，每15分钟确认一次。10点-18点每30分钟确认一次&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;超时判定：20 秒内未访问成功 = 异常&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;告警方式：自动发消息到微信&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 style=&quot;color: rgb(0, 0, 0);font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;#39;Apple Color Emoji&amp;#39;, &amp;#39;Segoe UI Emoji&amp;#39;, &amp;#39;Segoe UI Symbol&amp;#39;, &amp;#39;Noto Color Emoji&amp;#39;;font-size: 16px;font-weight: 400;line-height: 24px;text-align: start;white-space: normal;display: block;flex: 0 1 auto;flex-direction: row;justify-content: normal;align-items: normal;padding: 0px;background: none;background-color: rgba(0, 0, 0, 0)&quot;&gt;二、准备工作（5 分钟完成）&lt;/h2&gt;&lt;h3 style=&quot;color: rgb(0, 0, 0);font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;#39;Apple Color Emoji&amp;#39;, &amp;#39;Segoe UI Emoji&amp;#39;, &amp;#39;Segoe UI Symbol&amp;#39;, &amp;#39;Noto Color Emoji&amp;#39;;font-size: 16px;font-weight: 400;line-height: 24px;text-align: start;white-space: normal;display: block;flex: 0 1 auto;flex-direction: row;justify-content: normal;align-items: normal;padding: 0px;background: none;background-color: rgba(0, 0, 0, 0)&quot;&gt;1. 开通微信告警（Server 酱，免费）&lt;/h3&gt;&lt;ol style=&quot;color: rgb(0, 0, 0);font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;#39;Apple Color Emoji&amp;#39;, &amp;#39;Segoe UI Emoji&amp;#39;, &amp;#39;Segoe UI Symbol&amp;#39;, &amp;#39;Noto Color Emoji&amp;#39;;font-size: 16px;font-weight: 400;line-height: 24px;text-align: start;white-space: normal;display: block;flex: 0 1 auto;flex-direction: row;justify-content: normal;align-items: normal;padding: 0px;background: none;background-color: rgba(0, 0, 0, 0)&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;打开官网：https://sct.ftqq.com/&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;微信扫码登录&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;获取 &lt;strong style=&quot;color: rgb(0, 0, 0);font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;#39;Apple Color Emoji&amp;#39;, &amp;#39;Segoe UI Emoji&amp;#39;, &amp;#39;Segoe UI Symbol&amp;#39;, &amp;#39;Noto Color Emoji&amp;#39;;font-size: 16px;font-weight: 400;line-height: 24px;text-align: left;white-space: normal;display: inline;flex: 0 1 auto;flex-direction: row;justify-content: normal;align-items: normal;padding: 0px;background: none;background-color: rgba(0, 0, 0, 0)&quot;&gt;SendKey&lt;/strong&gt;（后面脚本要用到）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;关注官方公众号，告警会直接推送到微信&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 style=&quot;color: rgb(0, 0, 0);font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;#39;Apple Color Emoji&amp;#39;, &amp;#39;Segoe UI Emoji&amp;#39;, &amp;#39;Segoe UI Symbol&amp;#39;, &amp;#39;Noto Color Emoji&amp;#39;;font-size: 16px;font-weight: 400;line-height: 24px;text-align: start;white-space: normal;display: block;flex: 0 1 auto;flex-direction: row;justify-content: normal;align-items: normal;padding: 0px;background: none;background-color: rgba(0, 0, 0, 0)&quot;&gt;2. 服务器安装 Python（几乎所有服务器都自带）&lt;/h3&gt;&lt;p&gt;三、python源码&lt;/p&gt;&lt;pre class=&quot;brush:python;toolbar:false&quot;&gt;import&amp;nbsp;time
import&amp;nbsp;os
import&amp;nbsp;traceback
from&amp;nbsp;datetime&amp;nbsp;import&amp;nbsp;datetime
from&amp;nbsp;selenium&amp;nbsp;import&amp;nbsp;webdriver
from&amp;nbsp;selenium.webdriver.chrome.service&amp;nbsp;import&amp;nbsp;Service
import&amp;nbsp;urllib.request
import&amp;nbsp;urllib.parse

#&amp;nbsp;======================&amp;nbsp;【配置】&amp;nbsp;======================
USERNAME&amp;nbsp;=&amp;nbsp;&amp;quot;你的账号&amp;quot;
PASSWORD&amp;nbsp;=&amp;nbsp;&amp;quot;你的密码&amp;quot;
SEND_KEY&amp;nbsp;=&amp;nbsp;&amp;quot;你的SendKey&amp;quot;

LOGIN_URL&amp;nbsp;=&amp;nbsp;&amp;quot;B网站域名/登录地址&amp;quot;
TARGET_URL&amp;nbsp;=&amp;nbsp;&amp;quot;B网站域名&amp;quot;
CHROME_DRIVER_PATH&amp;nbsp;=&amp;nbsp;r&amp;quot;D:\python\chromedriver.exe&amp;quot;&amp;nbsp;#服务器安装chrome浏览器，并且检查版本后，下载chromedriver.exe并复制到该项目的位置。

#&amp;nbsp;稳定性设置
MAX_CHECK_TIME&amp;nbsp;=&amp;nbsp;120&amp;nbsp;&amp;nbsp;#&amp;nbsp;单次检测最大超时秒数（超过就重启）
LOG_DIR&amp;nbsp;=&amp;nbsp;&amp;quot;logs&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;日志文件夹
#&amp;nbsp;======================================================

#&amp;nbsp;自动创建日志目录
if&amp;nbsp;not&amp;nbsp;os.path.exists(LOG_DIR):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;os.mkdir(LOG_DIR)

#&amp;nbsp;日志输出（自动按天生成）
def&amp;nbsp;log(msg):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;now&amp;nbsp;=&amp;nbsp;datetime.now()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;date_str&amp;nbsp;=&amp;nbsp;now.strftime(&amp;quot;%Y-%m-%d&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time_str&amp;nbsp;=&amp;nbsp;now.strftime(&amp;quot;%Y-%m-%d&amp;nbsp;%H:%M:%S&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_file&amp;nbsp;=&amp;nbsp;os.path.join(LOG_DIR,&amp;nbsp;f&amp;quot;check_{date_str}.log&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log_msg&amp;nbsp;=&amp;nbsp;f&amp;quot;[{time_str}]&amp;nbsp;{msg}&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(log_msg)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;with&amp;nbsp;open(log_file,&amp;nbsp;&amp;quot;a&amp;quot;,&amp;nbsp;encoding=&amp;quot;utf-8&amp;quot;)&amp;nbsp;as&amp;nbsp;f:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.write(log_msg&amp;nbsp;+&amp;nbsp;&amp;quot;\n&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pass

#&amp;nbsp;微信推送
def&amp;nbsp;send_wechat(title,&amp;nbsp;desp):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;not&amp;nbsp;SEND_KEY:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data&amp;nbsp;=&amp;nbsp;urllib.parse.urlencode({&amp;quot;title&amp;quot;:&amp;nbsp;title,&amp;nbsp;&amp;quot;desp&amp;quot;:&amp;nbsp;desp}).encode()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req&amp;nbsp;=&amp;nbsp;urllib.request.Request(f&amp;quot;https://sctapi.ftqq.com/{SEND_KEY}.send&amp;quot;,&amp;nbsp;data=data)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;with&amp;nbsp;urllib.request.urlopen(req,&amp;nbsp;timeout=10):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pass
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log(&amp;quot;微信推送失败&amp;quot;)

#&amp;nbsp;浏览器启动
def&amp;nbsp;get_driver():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;options&amp;nbsp;=&amp;nbsp;webdriver.ChromeOptions()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;options.add_argument(&amp;quot;--no-sandbox&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;options.add_argument(&amp;quot;--disable-gpu&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;options.add_argument(&amp;quot;--disable-dev-shm-usage&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;options.add_experimental_option(&amp;quot;excludeSwitches&amp;quot;,&amp;nbsp;[&amp;quot;enable-automation&amp;quot;,&amp;nbsp;&amp;quot;enable-logging&amp;quot;])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;service&amp;nbsp;=&amp;nbsp;Service(CHROME_DRIVER_PATH)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver&amp;nbsp;=&amp;nbsp;webdriver.Chrome(service=service,&amp;nbsp;options=options)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver.implicitly_wait(20)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;driver

#&amp;nbsp;检测任务
def&amp;nbsp;check():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver&amp;nbsp;=&amp;nbsp;None
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log(&amp;quot;开始检测...&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver&amp;nbsp;=&amp;nbsp;get_driver()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver.get(LOGIN_URL)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(5)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver.get(TARGET_URL)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(3)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url&amp;nbsp;=&amp;nbsp;driver.current_url
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;&amp;quot;login&amp;quot;&amp;nbsp;not&amp;nbsp;in&amp;nbsp;url.lower():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log(&amp;quot;✅&amp;nbsp;访问正常（已绕过412）&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;True
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log(&amp;quot;❌&amp;nbsp;未登录成功&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;send_wechat(&amp;quot;网站告警&amp;quot;,&amp;nbsp;&amp;quot;未登录成功，可能会话失效&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;False

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except&amp;nbsp;Exception&amp;nbsp;as&amp;nbsp;e:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;err&amp;nbsp;=&amp;nbsp;str(e)[:100]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log(f&amp;quot;❌&amp;nbsp;检测异常：{err}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;send_wechat(&amp;quot;网站监测异常&amp;quot;,&amp;nbsp;f&amp;quot;错误：{err}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;False

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;finally:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;driver:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driver.quit()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pass

#&amp;nbsp;时间策略
def&amp;nbsp;sleep_time():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;h&amp;nbsp;=&amp;nbsp;datetime.now().hour
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;8&amp;nbsp;&amp;lt;=&amp;nbsp;h&amp;nbsp;&amp;lt;&amp;nbsp;10:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;15&amp;nbsp;*&amp;nbsp;60
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elif&amp;nbsp;10&amp;nbsp;&amp;lt;=&amp;nbsp;h&amp;nbsp;&amp;lt;&amp;nbsp;18:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;30&amp;nbsp;*&amp;nbsp;60
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;60&amp;nbsp;*&amp;nbsp;60

#&amp;nbsp;看门狗：超时自动重启
def&amp;nbsp;run_with_watchdog():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while&amp;nbsp;True:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;start&amp;nbsp;=&amp;nbsp;time.time()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;check()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cost&amp;nbsp;=&amp;nbsp;int(time.time()&amp;nbsp;-&amp;nbsp;start)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log(f&amp;quot;单次检测完成，耗时{cost}秒&amp;quot;)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;超时保护
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;cost&amp;nbsp;&amp;gt;&amp;nbsp;MAX_CHECK_TIME:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log(f&amp;quot;⚠️&amp;nbsp;检测超时({cost}秒)，即将重启&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;os._exit(1)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;except:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log(f&amp;quot;⚠️&amp;nbsp;程序崩溃，准备重启：{traceback.format_exc()[:100]}&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(5)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&amp;nbsp;等待下一轮
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wait&amp;nbsp;=&amp;nbsp;sleep_time()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log(f&amp;quot;等待&amp;nbsp;{wait//60}&amp;nbsp;分钟后下次检测\n&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;time.sleep(wait)

if&amp;nbsp;__name__&amp;nbsp;==&amp;nbsp;&amp;quot;__main__&amp;quot;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;log(&amp;quot;=====&amp;nbsp;网站监测服务启动（稳定版&amp;nbsp;+&amp;nbsp;日志&amp;nbsp;+&amp;nbsp;自动重启）=====&amp;quot;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;run_with_watchdog()&lt;/pre&gt;&lt;p&gt;四、说明&lt;/p&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;h3 style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;1. &lt;strong style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;自动日志&lt;/strong&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;ul style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;每天自动生成一个 log 文件&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;路径：&lt;code style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;logs/check_2026-06-02.log&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;记录：启动、成功、失败、错误、耗时&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;h3 style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;2. &lt;strong style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;崩溃自动重启&lt;/strong&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;ul style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;浏览器崩了 → 自动重启&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;网络异常 → 自动重试&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;不中断监测&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;h3 style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;3. &lt;strong style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;卡死自动重启&lt;/strong&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;ul style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;超过 &lt;strong style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: left; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;120 秒没反应&lt;/strong&gt; → 强制重启&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;彻底杜绝卡死不动&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;h3 style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;4. &lt;strong style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;不重复启动&lt;/strong&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;ul style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;安全单例运行&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;不会开一堆浏览器&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;h3 style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;5. &lt;strong style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;异常自动告警&lt;/strong&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;ul style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;登录失败 → 告警&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;页面打不开 → 告警&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;程序崩溃 → 告警&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;五、补充说明：开机自启动python文件&lt;/p&gt;&lt;p&gt;1、创建一个启动脚本&lt;/p&gt;&lt;p&gt;2、新建一个文本文件，输入内容&lt;/p&gt;&lt;pre class=&quot;brush:python;toolbar:false&quot;&gt;Set&amp;nbsp;WshShell&amp;nbsp;=&amp;nbsp;CreateObject(&amp;quot;WScript.Shell&amp;quot;)
WshShell.Run&amp;nbsp;&amp;quot;py&amp;nbsp;main.py&amp;quot;,&amp;nbsp;0
Set&amp;nbsp;WshShell&amp;nbsp;=&amp;nbsp;Nothing&lt;/pre&gt;&lt;p&gt;3、把文本文件另存为：&lt;code style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;start.vbs&lt;/code&gt;（保存类型：所有文件，编码：ANSI）&lt;/p&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;&lt;h2 style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;4、把这个 vbs 放到&lt;strong style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;开机启动文件夹：&lt;/strong&gt;&lt;/h2&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none;&quot;&gt;&lt;h2 style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: block; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;①按win+r&lt;/h2&gt;&lt;p&gt;②输入&lt;/p&gt;&lt;pre class=&quot;brush:ps;toolbar:false&quot;&gt;shell:startup&lt;/pre&gt;&lt;p&gt;③把 &lt;code style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, &amp;quot;Liberation Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;start.vbs&lt;/code&gt; 拖进去，完成：服务器开机 → &lt;strong style=&quot;color: rgb(0, 0, 0); font: 16px / 24px ui-sans-serif, system-ui, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; font-weight: 400; line-height: 24px; text-align: start; white-space: normal; display: inline; flex: 0 1 auto; flex-direction: row; justify-content: normal; align-items: normal; padding: 0px; margin: 0px; background: none; background-color: rgba(0, 0, 0, 0);&quot;&gt;自动后台运行脚本&lt;/strong&gt; → 自动定时检测 → 异常微信告警。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;以上就是全部过程。结果如下&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2026/6/2026060267622529.png&quot; width=&quot;420&quot; height=&quot;275&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;&quot; style=&quot;width: 420px; height: 275px;&quot;/&gt;&lt;br/&gt;&lt;/p&gt;&lt;/div&gt;</description><pubDate>Tue, 02 Jun 2026 18:29:53 +0800</pubDate></item><item><title>般若波罗蜜多心经全文</title><link>https://imwen.com/post/356.html</link><description>&lt;p&gt;观自在菩萨，行深般若波罗蜜多时，照见五蕴皆空，度一切苦厄。&lt;/p&gt;&lt;p&gt;舍利子，色不异空，空不异色，色即是空，空即是色，受想行识亦复如是。&lt;/p&gt;&lt;p&gt;舍利子，是诸法空相，不生不灭，不垢不净，不增不减。&lt;/p&gt;&lt;p&gt;是故空中无色，无受想行识，无眼耳鼻舌身意，无色声香味触法，无眼界乃至无意识界，无无明亦无无明尽，乃至无老死，亦无老死尽，无苦集灭道，无智亦无得，以无所得故。&lt;/p&gt;&lt;p&gt;菩提萨埵，依般若波罗蜜多故，心无挂碍；无挂碍故，无有恐怖，远离颠倒梦想，究竟涅槃。&lt;/p&gt;&lt;p&gt;三世诸佛，依般若波罗蜜多故，得阿耨多罗三藐三菩提。&lt;/p&gt;&lt;p&gt;故知般若波罗蜜多，是大神咒，是大明咒，是无上咒，是无等等咒，能除一切苦，真实不虚。&lt;/p&gt;&lt;p&gt;故说般若波罗蜜多咒，即说咒曰：揭谛揭谛，波罗揭谛，波罗僧揭谛，菩提萨婆诃。&lt;/p&gt;</description><pubDate>Sat, 25 Oct 2025 00:40:44 +0800</pubDate></item><item><title>[技能亲测]批量调整Word文档中的图片大小</title><link>https://imwen.com/post/355.html</link><description>&lt;p&gt;时常需要在word中处理图片，比如批量调整图片大小。这时候一个个图片处理，费时费力。那么，就需要用到批量功能。批量调整Word文档中的图片大小可以通过以下方法实现，具体分为 &lt;strong&gt;同一文档内批量处理&lt;/strong&gt; 和 &lt;strong&gt;跨多个文档批量处理&lt;/strong&gt; 两种场景。&lt;/p&gt;&lt;h3&gt;一、同一Word文档内的图片批量调整&lt;/h3&gt;&lt;h4&gt;方法1：使用VBA宏（推荐）&lt;/h4&gt;&lt;ol start=&quot;1&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;启用开发者工具&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;打开Word文档，按 &lt;code&gt;Alt + F11&lt;/code&gt; 打开VBA编辑器。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;如果没有开发者选项卡，需在Word设置中启用：&lt;br/&gt;&lt;code&gt;文件 → 选项 → 自定义功能区 → 勾选“开发工具”&lt;/code&gt;。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;插入并运行宏&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;在VBA编辑器中，右键左侧项目 → 插入 → &lt;strong&gt;模块&lt;/strong&gt;，粘贴以下代码：&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;pre class=&quot;brush:vb;toolbar:false&quot;&gt;Sub&amp;nbsp;ResizeAllPictures()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim&amp;nbsp;pic&amp;nbsp;As&amp;nbsp;InlineShape
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For&amp;nbsp;Each&amp;nbsp;pic&amp;nbsp;In&amp;nbsp;ActiveDocument.InlineShapes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If&amp;nbsp;pic.Type&amp;nbsp;=&amp;nbsp;wdInlineShapePicture&amp;nbsp;Then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;nbsp;设置图片宽度为10厘米（按需修改数值）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pic.Width&amp;nbsp;=&amp;nbsp;CentimetersToPoints(10)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;nbsp;锁定纵横比（若需固定比例，取消下一行注释）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;&amp;nbsp;pic.LockAspectRatio&amp;nbsp;=&amp;nbsp;msoTrue
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End&amp;nbsp;If
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Next&amp;nbsp;pic
End&amp;nbsp;Sub&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;以上代码，留意注释内容。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;按 F5 运行宏&lt;/strong&gt;，文档内所有图片将自动调整宽度为10厘米（数值可自定义）。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;h4&gt;方法2：手动批量调整（无需代码）&lt;/h4&gt;&lt;ol start=&quot;1&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;全选图片统一调整&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;按 &lt;code&gt;Ctrl + H&lt;/code&gt; 打开替换功能 → 点击“更多” → 选择“特殊格式” → &lt;strong&gt;“图形”&lt;/strong&gt;。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;关闭替换窗口，此时所有图片已被选中。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;右键任意图片 → 选择“大小和位置” → 输入所需尺寸（如高度、宽度）→ 确认。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;压缩所有图片（减少文件体积）&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;双击任意图片 → 顶部菜单点击“图片格式” → “压缩图片” → 勾选“所有图片” → 选择分辨率（如150ppi）。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;h3&gt;二、批量处理多个Word文档的图片&lt;/h3&gt;&lt;p&gt;如果需要处理多个Word文件，可通过以下方式自动化：&lt;/p&gt;&lt;h4&gt;方法1：Python脚本（需安装库）&lt;/h4&gt;&lt;p&gt;这个需要一定的编程能力，会Python编程工具语言，那么，可以使用 &lt;code&gt;python-docx&lt;/code&gt; 库批量处理：&lt;/p&gt;&lt;ol start=&quot;1&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;安装库：&lt;code&gt;pip install python-docx&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;运行脚本：&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;pre class=&quot;brush:python;toolbar:false&quot;&gt;from&amp;nbsp;docx&amp;nbsp;import&amp;nbsp;Document
import&amp;nbsp;os

folder_path&amp;nbsp;=&amp;nbsp;&amp;quot;你的文档文件夹路径&amp;quot;
for&amp;nbsp;filename&amp;nbsp;in&amp;nbsp;os.listdir(folder_path):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;filename.endswith(&amp;quot;.docx&amp;quot;):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doc&amp;nbsp;=&amp;nbsp;Document(os.path.join(folder_path,&amp;nbsp;filename))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;pic&amp;nbsp;in&amp;nbsp;doc.inline_shapes:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pic.width&amp;nbsp;=&amp;nbsp;5000000&amp;nbsp;&amp;nbsp;#&amp;nbsp;单位：EMU（1厘米≈360000&amp;nbsp;EMU）
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doc.save(os.path.join(folder_path,&amp;nbsp;&amp;quot;modified_&amp;quot;&amp;nbsp;+&amp;nbsp;filename))&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;方法2：第三方工具&lt;/h4&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kutools for Word&lt;/strong&gt;：提供批量处理功能（付费）。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Word批量处理工具&lt;/strong&gt;：如“Word批量大师”（需下载）。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;注意事项&lt;/h3&gt;&lt;ol start=&quot;1&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;锁定纵横比&lt;/strong&gt;：调整时勾选“锁定纵横比”避免图片变形。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;图片压缩&lt;/strong&gt;：调整大小后建议压缩图片，减少文档体积。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;备份文件&lt;/strong&gt;：操作前备份原始文档，避免误操作。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;通过上面的介绍，可以掌握基本的word文档中图片批量处理的方法，其中宏方法是办公软件常用的方法，Python是有一定编程能力基础很好用的一个方案。&lt;/p&gt;</description><pubDate>Wed, 02 Apr 2025 10:35:08 +0800</pubDate></item><item><title>[技能]电脑蓝屏0x00000024原因和解决办法</title><link>https://imwen.com/post/354.html</link><description>&lt;p&gt;刚写完一个excel表格中把部分字符替换为星号的操作技巧的文章，就遇到同事报电脑故障。过去一看，系统修复，但是不成功，于是重启，发现蓝屏0x00000024。这个问题也不大，解决方案比较简单。&lt;/p&gt;&lt;p&gt;电脑蓝屏0x00000024是一个错误代码，通常表示硬盘频繁读取或者有损坏。当然，这个错误也可能由杀毒等恶意软件造成。&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2025/3/2025031338803137.png&quot; width=&quot;600&quot; height=&quot;261&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;蓝屏0x00000024&quot; style=&quot;width: 600px; height: 261px;&quot;/&gt;&lt;/p&gt;&lt;p&gt;0x00000024蓝屏错误的解决方法有多种：&lt;/p&gt;&lt;ol style=&quot;list-style-type: decimal;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;重启电脑，开机的时候选修复模式（行得通就最好了，行不通往下走）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;如果可以进系统，首先关闭磁盘镜像软件和杀毒软件。（这个大概率很难）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;如果无法进入系统，需要制作一个U盘启动盘，通过进入PE系统来修复错误。（如果手上有U盘启动盘，可拿来主义，没有的话，就只能用另一台电脑做一个了）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;使用PE系统带的Finaldata文件恢复工具对C盘进行扫描，然后运行chkdsk c:/f命令。重点是运行这个指令：左下角，开始，运行cmd，输入chkdsk c:/f回车。&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2025/3/2025031338902405.png&quot; width=&quot;432&quot; height=&quot;144&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;解决电脑蓝屏0x00000024的简单方法&quot; style=&quot;width: 432px; height: 144px;&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://imwen.com/zb_users/upload/2025/3/2025031338988185.jpg&quot; width=&quot;606&quot; height=&quot;456&quot; border=&quot;0&quot; hspace=&quot;0&quot; vspace=&quot;0&quot; title=&quot;解决电脑蓝屏0x00000024的简单方法&quot; style=&quot;width: 606px; height: 456px;&quot;/&gt;&lt;/p&gt;&lt;p&gt;执行完，重启后，耐心等待系统修复，问题解决。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;如果以上方法都不可以解决问题，可以尝试重装系统。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;p&gt;以上就是解决电脑蓝屏0x00000024的简单方法了。可能会被制作U盘启动盘难道，可以问问度娘或者其他AI工具。&lt;/p&gt;&lt;/div&gt;</description><pubDate>Thu, 13 Mar 2025 10:36:12 +0800</pubDate></item></channel></rss>