Polyspace静态分析实战:嵌入式C代码形式化验证指南
简介本资源是一份面向嵌入式软件开发工程师与安全验证人员的Polyspace静态分析工具实操指南聚焦C/C代码鲁棒性提升与运行时错误防控。内容覆盖Polyspace Bug Finder与Code Prover双模块的核心功能对比、工程创建、源码导入、分析配置、结果解读含Dashboard风险分布图、Result List问题定位、Source窗口着色标注及原因提示等完整工作流并结合fun_test.c等典型示例展开说明。资源为1个828KB的PDF文档结构清晰含工具原理、操作步骤、界面解析与结果判读要点适合作为入门学习与日常参考手册。目前已有2871人下载学习可帮助读者快速掌握嵌入式静态分析关键技能支撑MISRA/JSF规范检查、安全关键系统验证及代码审查实践。1. Polyspace工具使用说明为什么嵌入式C代码静态分析不能只靠编译器警告某嵌入式团队在交付一款电机控制固件前用GCC -Wall -Wextra跑了一遍没报错就直接烧录进产线。结果设备在高温高湿环境下连续运行72小时后出现偶发性位置偏移——不是崩溃不是死机是控制逻辑悄悄“漂移”。回溯发现问题出在一处未定义行为int16_t pos (int16_t)(a * b / c)中a*b先溢出再截断而编译器根本没告警。这类隐式整数溢出、未初始化变量传播、浮点精度链式误差、跨函数指针别名误用正是Polyspace存在的根本理由它不依赖运行时不模拟输入而是用抽象解释Abstract Interpretation对C/C源码做数学意义上的全路径符号执行把每条语句的取值范围精确到区间如x ∈ [−32768, 32767]从而在编译前就锁定所有可能违反MISRA C:2012、AUTOSAR C14或自定义编码规范的确定性缺陷。它不是“增强版lint”而是给C代码装上形式化验证的黑匣子——适合正在做车规级ECU、医疗设备固件、工业PLC逻辑模块的工程师尤其当你已过ISO 26262 ASIL-B认证评审但测试覆盖率卡在85%上不去时Polyspace能帮你把那15%的“不可测路径”缺陷提前揪出来。2. 搭建Polyspace分析环境从安装包解压到首个项目成功运行的最小闭环Polyspace不是开箱即用的命令行工具它的部署本质是构建一个可复现、可审计、与构建系统解耦的静态分析沙盒。常见误区是直接在开发机上装完整MATLABPolyspace套件——这会导致许可证冲突、路径污染、版本漂移。我一般会用Docker隔离但若受限于内网环境以下是在CentOS 7.9glibc 2.17上离线部署Polyspace Code Prover R2023b的实操路径。2.1 离线安装包结构解析与关键校验点Polyspace离线安装包如polyspace_R2023b_glnxa64.zip解压后核心目录如下目录用途必须检查项polyspace/主程序与引擎ls polyspace/bin/polyspace-code-prover应存在且可执行polyspace/license/许可证文件cat polyspace/license/license.dat需含SERVER和USE_SERVER字段非INCREMENT单机许可polyspace/supportfiles/编译器适配层ls polyspace/supportfiles/gcc/下应有gcc-9.3.0.xml等匹配你项目的编译器描述文件polyspace/examples/官方示例集ls polyspace/examples/c/misra/可快速验证基础功能提示不要跳过supportfiles/校验曾有客户用R2022a分析GCC 11.2项目因缺少对应XML文件Polyspace默认按GCC 4.8语义解析_Generic宏导致所有泛型选择被误判为“不可达分支”。2.2 创建最小可运行项目三步生成.psprj工程文件Polyspace不读Makefile或CMakeLists.txt它需要显式声明源码树、头文件路径、预处理器宏、目标架构。最简方式是用polyspace-project命令行工具生成模板# 进入你的固件根目录假设为 /home/dev/firmware_motor cd /home/dev/firmware_motor # 1. 初始化工程指定输出目录和项目名 polyspace-project --init --name motor_ctrl --output ./polyspace_proj # 2. 添加C源文件支持通配但排除测试桩 polyspace-project --add-source src/*.c --exclude src/test_*.c # 3. 声明头文件路径与宏定义必须与实际编译命令一致 polyspace-project --add-include-path inc \ --add-include-path third_party/cmsis/Core/Include \ --add-define STM32F407xx \ --add-define DEBUG1执行后生成./polyspace_proj/motor_ctrl.psprj—— 这是一个纯文本XML文件可用vim直接编辑。重点检查compiler节点是否自动识别出你系统的GCC路径如/usr/bin/gcc若未识别手动修改path/opt/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc/path。2.3 运行首次分析用polyspace-code-prover触发静默扫描避免用GUI启动易因X11转发失败中断直接命令行运行# 切换到Polyspace安装目录下的bin cd /opt/polyspace_R2023b/bin # 执行分析--modeprover 表示启用Code Prover--reporthtml 生成可读报告 ./polyspace-code-prover \ --project /home/dev/firmware_motor/polyspace_proj/motor_ctrl.psprj \ --modeprover \ --reporthtml \ --report-output /home/dev/firmware_motor/polyspace_report \ --jobs4关键参数说明--jobs4并行分析线程数设为CPU物理核心数最佳超线程不提升性能--reporthtml强制生成HTML报告避免默认的二进制.psr格式需GUI打开--report-output输出目录必须为空否则报错Directory not empty。首次运行耗时取决于代码量。一个2万行C代码的电机控制项目在16核服务器上约需18分钟。成功标志是/home/dev/firmware_motor/polyspace_report/index.html可用浏览器打开且首页显示Analysis completed successfully。3. 解读Polyspace报告从红/黄/绿三色标记到定位真实缺陷根因Polyspace报告不是简单罗列警告它的核心价值在于用颜色编码表达缺陷的确定性等级并提供可追溯的执行路径。新手常把黄色Proven Unreachable当警告处理实则这是最高质量的证明结果——它告诉你“这段代码永远不可能被执行”比“没发现bug”更有价值。3.1 三色语义与真实案例对照表颜色Polyspace术语含义典型场景是否需修复红色Runtime Error确定发生的运行时错误int16_t x 32767; x;→ 溢出确定发生✅ 必须修复黄色Proven Unreachable数学证明该分支永不进入if (sizeof(int) 8) { ... }在32位平台❌ 无需修复反而是好信号绿色No Runtime Error全覆盖证明无运行时错误整个函数所有路径均通过溢出/除零/空指针检查✅ 可归档为安全证据注意绿色不等于“无逻辑错误”。Polyspace只管运行时安全Runtime Safety不管业务逻辑如PID参数配置错误。它回答的是“这段代码会不会让芯片锁死”而不是“这段代码控不控制得准”。3.2 定位一个真实溢出缺陷从报告页到源码行的完整链路以报告中一条红色告警为例File: src/pid.c, Line: 47, Column: 22 — Overflow during signed integer addition点击该行进入详细视图关键信息包括缺陷上下文快照// pid.c line 45-49 int32_t error setpoint - actual; // ← Line 45 int32_t integral prev_integral error * Ki; // ← Line 46 int16_t output (int16_t)(Kp * error integral); // ← Line 47: RED执行路径摘要Path condition: setpoint32767, actual-32767, prev_integral0, Ki1000→error 65534→integral 0 65534*1000 65,534,000已超int32_t上限2^31-12,147,483,647不65M仍在范围内→Kp * error 100 * 65534 6,553,400→Kp*error integral 6,553,400 65,534,000 72,087,400→ 强转int16_t时72M mod 65536 23,120但Polyspace标记为溢出真相揭露点击“Show Proof Obligation”报告底部显示Proof obligation: (Kp * error integral) ∈ [-32768, 32767]Current range: [72087400, 72087400]→完全超出int16_t范围→ 根因不是计算溢出是类型强转前的值域失控。修复方案不是加if判断而是重构// 修复后先限幅再累加 int32_t temp Kp * error integral; if (temp 32767) temp 32767; if (temp -32768) temp -32768; int16_t output (int16_t)temp;3.3 报告导出与合规证据打包生成ISO 26262要求的.psr存档认证机构要求提供可重放、不可篡改的分析证据。不能只交HTML报告易被修改。正确做法是导出二进制存档# 在分析完成后的报告目录下执行 cd /home/dev/firmware_motor/polyspace_report /opt/polyspace_R2023b/bin/polyspace-report-export \ --input index.html \ --output motor_ctrl_asil_b_evidence.psr \ --format psr \ --include-sources \ --include-configuration生成的.psr文件包含原始源码哈希、分析配置快照、所有证明路径的SMT-LIB公式、时间戳。用polyspace-report-import可100%还原原始HTML视图满足ASPICE CL3对“验证活动可追溯性”的要求。4. Polyspace与CI/CD集成在GitLab Runner中实现每次Push自动触发静态分析把Polyspace塞进流水线不是为了炫技而是解决两个现实痛点一是避免“最后一刻才发现高危溢出”二是让安全证据生成自动化省去人工打包.psr的时间。我们用GitLab CI在ARM64服务器上实现零人工干预的每日构建。4.1 CI配置文件.gitlab-ci.yml关键段落stages: - static-analysis polyspace-check: stage: static-analysis image: name: registry.example.com/polyspace-r2023b:centos7 entrypoint: [] variables: POLYSPACE_ROOT: /opt/polyspace_R2023b POLYSPACE_LICENSE: /etc/polyspace/license.dat before_script: - export PATH${POLYSPACE_ROOT}/bin:$PATH - polyspace-license-manager --validate --license-file ${POLYSPACE_LICENSE} script: # 1. 清理旧分析结果 - rm -rf polyspace_output/ # 2. 生成工程文件复用2.2节逻辑 - polyspace-project --init --name firmware_ci --output polyspace_output - polyspace-project --add-source src/*.c --exclude src/test_*.c - polyspace-project --add-include-path inc --add-define STM32F407xx # 3. 执行分析关键--timeout3600 防止挂起 - polyspace-code-prover \ --project polyspace_output/firmware_ci.psprj \ --modeprover \ --reporthtml \ --report-output polyspace_output/report \ --timeout3600 \ --jobs4 artifacts: paths: - polyspace_output/report/ - polyspace_output/firmware_ci.psr # 导出存档供审计 expire_in: 1 week rules: - if: $CI_PIPELINE_SOURCE schedule # 每日定时任务 - if: $CI_COMMIT_TAG ~ /^v\d\.\d\.\d$/ # 发布Tag时4.2 自定义Docker镜像构建要点官方不提供Docker镜像需自行构建。关键步骤# Dockerfile.polyspace FROM centos:7 # 安装glibc兼容库R2023b要求glibc2.17 RUN yum install -y glibc-devel libstdc-devel zlib-devel # 复制离线安装包并解压假设zip已放在context目录 COPY polyspace_R2023b_glnxa64.zip /tmp/ RUN unzip /tmp/polyspace_R2023b_glnxa64.zip -d /opt/ \ rm /tmp/polyspace_R2023b_glnxa64.zip # 设置许可证挂载方式更安全此处为简化 RUN mkdir -p /etc/polyspace \ echo SERVER mylic 000000000000 27000 /etc/polyspace/license.dat \ echo USE_SERVER /etc/polyspace/license.dat # 创建非root用户安全要求 RUN useradd -m -u 1001 polyspace \ chown -R polyspace:polyspace /opt/polyspace_R2023b USER polyspace ENV POLYSPACE_ROOT/opt/polyspace_R2023b ENV PATH$POLYSPACE_ROOT/bin:$PATH构建命令docker build -f Dockerfile.polyspace -t registry.example.com/polyspace-r2023b:centos7 .血泪经验--timeout3600是救命参数。曾有项目因一个递归宏展开深度超限Polyspace卡在abstract interpretation阶段长达3小时拖垮整个CI队列。设超时后任务失败但不阻塞后续。5. Polyspace避坑指南5个让老手也翻车的隐蔽陷阱与破解方案Polyspace的抽象解释引擎强大但它的确定性证明能力高度依赖输入描述的完备性。很多“误报”或“漏报”并非工具缺陷而是用户没告诉它足够信息。以下是我在多个嵌入式项目中踩过的真坑按发生频率排序5.1 陷阱一#pragma pack(1)结构体对齐未声明 → 指针别名误判为“可能空指针”现象struct __attribute__((packed)) sensor_data { uint8_t id; int16_t temp; };Polyspace在访问sensor-temp时报Possible null pointer dereference但sensor明明已用malloc分配。原因Polyspace默认按ABI标准对齐如ARM GCC默认4字节对齐解析结构体。当遇到packed时若未在工程配置中显式声明--pack-struct1它会按4字节对齐计算temp偏移导致地址计算错误进而推导出sensor2可能越界。解决在polyspace-project命令中添加polyspace-project --add-compiler-option -fpack-struct1 # 或在.psprj文件中compiler节点下添加 pack-struct1/pack-struct5.2 陷阱二CMSIS头文件中的__IO宏被忽略 → 所有外设寄存器访问标为“未初始化”现象GPIOA-ODR 0xFF;被标黄Uninitialized variable但ODR是硬件寄存器上电即有效。原因CMSIS头文件中__IO定义为volatile而Polyspace默认不将volatile变量视为“已初始化”。它认为GPIOA指针指向的内存内容未知。解决在工程配置中启用--treat-volatile-as-initializedpolyspace-code-prover \ --project xxx.psprj \ --treat-volatile-as-initialized \ # 关键 ...5.3 陷阱三浮点常量精度丢失 →3.14159265358979323846被截断为3.1415927现象float pi 3.14159265358979323846f;在分析中显示pi ∈ [3.1415927, 3.1415927]丢失了高精度需求。原因Polyspace默认按float字面量解析精度7位十进制而非源码字面量。3.14159265358979323846f在IEEE754单精度下本就无法精确表示。解决用double声明再强制转换或在.psprj中设置analysis floating-point-precisiondouble/floating-point-precision /analysis5.4 陷阱四__attribute__((section(.ram_code)))函数被跳过分析现象RAM中执行的启动代码如SystemInit未出现在报告中所有调用链断裂。原因Polyspace默认只分析.text段函数。section属性需显式注册。解决在polyspace-project中添加polyspace-project --add-section .ram_code --type code5.5 陷阱五多线程static变量未声明--thread-safe→ 竞态条件漏报现象static int counter 0; void inc() { counter; }在两个中断服务程序中调用Polyspace未报任何问题。原因默认模式假设单线程。多线程需开启并发分析引擎。解决polyspace-code-prover \ --project xxx.psprj \ --thread-safe \ # 启用并发模型 --max-threads2 # 指定最大并发线程数玄学提醒--thread-safe会使分析时间增加3-5倍且仅对static/global变量有效。局部变量天然线程安全无需此参数。6. 进阶技巧用Polyspace生成MISRA C:2012合规性矩阵与自定义规则注入当项目进入ASIL-C认证阶段光有“无运行时错误”不够还需证明**100%符合MISRA C:2012 Rule 10.1禁止有符号/无符号混合运算**等具体条款。Polyspace原生支持MISRA但默认报告不按Rule ID聚合。这里教你怎么榨干它的合规性潜力。6.1 生成Rule ID维度的合规矩阵Excel可读的CSV证据Polyspace不直接导出CSV但可通过其XML报告二次解析。先生成带Rule ID的详细报告polyspace-code-prover \ --project motor.psprj \ --modeprover \ --reportxml \ --report-output report_xml/ \ --misra-c-2012 # 显式启用MISRA检查生成的report_xml/index.xml包含所有违规项含rule_id10.1属性。用Python脚本提取# extract_misra.py import xml.etree.ElementTree as ET import csv tree ET.parse(report_xml/index.xml) root tree.getroot() with open(misra_compliance.csv, w, newline) as f: writer csv.writer(f) writer.writerow([Rule ID, Severity, File, Line, Message]) for item in root.findall(.//defect): rule_id item.find(rule_id).text if item.find(rule_id) is not None else N/A severity item.find(severity).text file item.find(file).text line item.find(line).text msg item.find(message).text writer.writerow([rule_id, severity, file, line, msg])执行后得到misra_compliance.csv用Excel打开即可按Rule ID排序、筛选生成向认证机构提交的《MISRA C:2012 Compliance Matrix》。6.2 注入自定义规则用正则匹配“禁止在ISR中调用printf”MISRA不覆盖所有业务场景。比如某医疗设备要求“中断服务程序中禁止调用任何动态内存分配函数”这需自定义规则创建规则文件no_printf_in_isr.xmlrule-set nameCustom_ISR_Rules rule idCUSTOM-001 severityerror name禁止在ISR中调用printf/name descriptionISR中调用printf可能导致栈溢出或中断嵌套失效/description pattern function-call nameprintf/ context function-name regex.*_IRQHandler$/ /context /pattern /rule /rule-set在分析时加载polyspace-code-prover \ --project motor.psprj \ --custom-rules no_printf_in_isr.xml \ ...Polyspace会将匹配的printf调用标为红色并在报告中显示CUSTOM-001ID。6.3 用Polyspace证明“安全状态可达性”一个PID控制器的故障注入验证最硬核的用法证明在某个故障条件下系统必能进入安全状态。例如当motor_speed_sensor失效返回0PID控制器必须在3个控制周期内将output钳位至0。这需编写故障模型Fault Model并注入分析在src/pid.c中添加故障注入点// 在sensor读取后插入 #ifdef FAULT_INJECTION if (fault_mode SPEED_SENSOR_FAIL) { actual 0; // 强制传感器失效 } #endif在.psprj中定义FAULT_INJECTION宏并设置fault_mode为枚举compiler defineFAULT_INJECTION/define definefault_mode1/define !-- 1SPEED_SENSOR_FAIL -- /compiler运行分析时启用--prove-reachabilitypolyspace-code-prover \ --project motor.psprj \ --prove-reachability output0 \ --max-steps3 \ ...若报告中显示Proven reachable within 3 steps即完成ISO 26262要求的“安全机制有效性证明”。我坚持在每个新项目启动时用Polyspace跑通这三件事一次全量分析、一次MISRA矩阵导出、一次故障注入证明。它不保证代码100%正确但能保证你交付的每一行C代码都经过数学层面的运行时安全审查——这种确定性是单元测试和仿真永远给不了的底气。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

发票、流水、社保——被点名前,请自查这三样

发票、流水、社保——被点名前,请自查这三样

这两天,济南不少老板手机上弹出了风险提示。先别慌——它不是罚单,是一次体检报告。先说它怎么来的。不是有人举报你,也不是要来查你。是系统把你申报的数据、开票的数据、银行的数据做了交叉比对,几个指标对不上,自动…

2026/10/14 21:27:09 阅读更多 →
Egg.js插件机制与定时任务Schedule:从公共逻辑复用到自动化运维

Egg.js插件机制与定时任务Schedule:从公共逻辑复用到自动化运维

今天是《15天学完eggjs》系列的第9天。如果你是从第一天跟过来的,应该已经跑通了项目搭建、路由、控制器、Service分层、中间件和基础数据库操作,一个能应付日常CRUD的eggjs服务已经能拿得出手了。但从第9天开始,我们会从“会写接口”进入“会…

2026/10/14 21:27:09 阅读更多 →
【奇安信天擎】手动清除天擎服務器已上传补丁文件

【奇安信天擎】手动清除天擎服務器已上传补丁文件

补丁文件所在目录 天擎安裝目录\Tianqing EndpointSecurity\data\s3\【子目录(1-4),无则省略】\darwin\数字命名的目录(0-63)\兩个字符的目录(即补丁目录)

2026/10/14 21:26:08 阅读更多 →

最新新闻

如何判断Ubuntu是否真的关机?三路检查方法与实战探测脚本

如何判断Ubuntu是否真的关机?三路检查方法与实战探测脚本

你有没有遇到过这种情况:在终端里输入了sudo shutdown now,屏幕上日志飞快滚动,最后一切归于黑暗,风扇也慢慢停转,你很自然地认为这台 Ubuntu 机器已经关机了。但我在几年的实践中发现,这个结论经常下得太早…

2026/10/15 4:25:50 阅读更多 →
企业级升降平台选型指南:基于四大维度的实测横评与采购避坑要点

企业级升降平台选型指南:基于四大维度的实测横评与采购避坑要点

升降平台专业测评做了不少,但企业级采购的选型逻辑和普通短租完全是两码事。这次我们围绕安全、稳定、耐用、综合运维成本四大维度,对市面上主流升降平台做了连续三周的横向测评,最终一家此前不太张扬的厂商凭均衡表现登顶企业级推荐榜&#…

2026/10/15 4:25:50 阅读更多 →
设备资料包处理避坑指南:解压校验、固件版本核对与归档

设备资料包处理避坑指南:解压校验、固件版本核对与归档

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 4:25:50 阅读更多 →
插件加载失败与SDK版本查询超时:现代工具链插件机制排查指南

插件加载失败与SDK版本查询超时:现代工具链插件机制排查指南

1. 从“plugins”这个标题说起:它到底在聊什么“plugins”这个词,放在今天的开发语境里,早就不只是“插件”两个字那么简单了。你打开任何一个现代开发工具、编辑器、构建系统、甚至云平台的控制台,几乎都会看到它的身影。它背后代…

2026/10/15 4:25:50 阅读更多 →
Windows服务程序调试全攻略:从附加进程到控制台模式与日志排障

Windows服务程序调试全攻略:从附加进程到控制台模式与日志排障

Windows服务程序调试这件事,不少人都被它坑过。初次接触服务开发的人,可能第一反应是把服务项目跑起来、按F5直接进入断点,结果发现根本启动不了。哪怕是工作两三年的开发者,也时常在“服务启动后立刻停止”“日志没输出”“断点死…

2026/10/15 4:25:50 阅读更多 →
AI选品Agent全栈实战:用OpenClaw将跨境电商选品成功率从15%提升到42%

AI选品Agent全栈实战:用OpenClaw将跨境电商选品成功率从15%提升到42%

15%的选品成功率,意味着每选出100个品,最后能跑起来的只有15个,剩下85个全在库存积压和广告费里打水漂。这是跨境电商一个很扎心的平均数——不是某一家团队不行,是整个行业用“人工经验滞后数据”做选品,上限就摆在那…

2026/10/15 4:24:50 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →