基于RNN/LSTM的锂电池寿命预测:从CALCE数据集到可视化全流程
简介面向锂电池寿命预测与时序建模需求这套基于循环神经网络RNN与长短期记忆网络LSTM的完整项目包适合机器学习学习者和电池数据分析人员能够覆盖从数据清洗、特征提取、模型训练到可视化评估的全流程工作。压缩包共234个文件大小约461MB其中212个Excel表格构成CALCE数据集8个Jupyter交互式笔记本承载完整分析过程3个Python脚本提供工具函数封装另含结果图、Markdown说明文档及Numpy数组文件等目录组织清晰便于直接复现实验。目前已有395人学习。项目不仅实现主流时序预测模型还融入MLP与高斯拟合进行对比说明文档详细解释了归一化处理、异常值剔除和LSTM门控机制对长期依赖的改进并支持剩余寿命预测结果可视化读者可参照完整流程将相关方法迁移至其他工业寿命预测任务中。1. 基于RNN、LSTM的锂电池寿命预测从数据集到可视化的一次完整链路锂电池剩余寿命预测在工程上落到一句话根据电池已经跑过的充放电循环数据估计它还能撑多少个循环。RNN和LSTM是这类时序预测里最常被选中的模型因为容量衰减本身就是一条时间序列。这个项目把CALCE数据集、Python源码和项目说明打包在一起给你一条完整可跑的链路——读数据、提容量、滑窗构样本、训练LSTM、输出预测曲线。适合刚接触时序预测的工程师也适合做电池管理系统或储能运维的人拿来做基线方案。先说结论这类项目跑通不难调好很难真正决定预测准不准的是数据预处理、滑窗长度和训练切分方式模型结构反而大同小异。2. 数据和模型选型CALCE数据集结构与RNN/LSTM的匹配点2.1 为什么是循环神经网络而不是普通回归锂电池容量随循环次数增加而衰退但这条曲线不是简单的线性下降。以CALCE的CS2系列电池为例额定容量约1.1Ah在几十个循环内会出现平台期静置一段时间后甚至出现容量回升专业说法叫容量再生效应。用多项式拟合这类带局部波动的曲线很容易过拟合用普通前馈神经网络又丢失了循环之间的顺序关系。循环神经网络RNN设计出来就是处理序列问题的。它在每个时间步共享同一套权重把上一个时间步的隐状态传给下一个时间步天然适合变长序列。但原始RNN有个公认的问题反向传播时梯度要沿着时间步连乘序列一长梯度会指数级衰减或爆炸导致前面的循环信息根本传不到后面。LSTM通过输入门、遗忘门、输出门三条门控通路控制信息保留和丢弃梯度可以在细胞状态这条直通路上远距离传播。放到这个项目里我的选型逻辑很简单电池循环数通常是几十到几百个LSTM的记忆长度足够覆盖整个退化过程而且样本量很小不需要上Transformer这类重模型。RNN/LSTM在这个规模的数据上训练快、调参直观是最稳的基线。2.2 CALCE数据集里有什么CSV文件与关键字段CALCE是马里兰大学先进生命周期工程中心的公开电池数据库CS2、CX2等系列是经常被论文使用的锂电池循环老化数据。每个CSV文件记录一块电池在一段时间内的完整充放电过程常见字段如下。字段常见命名含义在这个项目里的用途Cycle循环编号分组键按循环聚合Voltage端电压可作多变量特征Current电流区分充电/放电状态Charge Capacity充电容量辅助校验Discharge Capacity放电容量建模目标序列不同批次导出的CSV列名不完全一致有的叫Discharge Capacity有的拆成Discharge Capacity (Ah)还有的文件把充电和放电记录混在一个表里。下载数据后第一件事不是急着建模而是先确认列名和单位。容量单位一般是安时Ah有些导出文件会用毫安时mAh差了1000倍这个坑我见过不止一次。2.3 读取CALCE原始数据并提取容量序列下面这段代码完成两件事读入CSV、按循环号提取每个循环末段的放电容量。import pandas as pd import numpy as np # 读取单块电池的完整循环记录 # 具体路径按你解压后的目录调整 df pd.read_csv(data/CALCE_CS2_35.csv) # 先看有哪些列不同批次导出列名会有差异 print(df.columns.tolist()) print(df.head()) # 用关键词匹配找到放电容量列 capacity_col [ c for c in df.columns if discharge in c.lower() and capacity in c.lower() ] discharge_col capacity_col[0] print(放电容量列, discharge_col) # 按循环号分组取每个循环最后一条有效放电容量 cap_cycle ( df[df[discharge_col].notna()] .groupby(Cycle)[discharge_col] .last() ) # 转成 numpy 数组按循环顺序排列 capacity cap_cycle.values.astype(np.float64) print(f共提取 {len(capacity)} 个循环的容量数据)逻辑说明同一循环内电池会记录很多个采样点直接全部塞给模型没有意义必须聚合成一个代表值。groupby(Cycle)把同一次循环的记录聚成一组.last()取该循环最后一次有效放电容量。为什么取最后一条而不是最大值因为一次完整放电结束后末段读数更接近该循环的真实容量释放水平而最大值容易把放电初期的瞬时波动带进来。参数说明capacity_col用关键词模糊匹配列名兼容不同导出格式。如果匹配不到建议直接打印df.columns手工指定列名。notna()先过滤空值有些CSV在充放电转换行放电容量为空这些行必须跳过否则last()会把空值带进来。3. 样本构造与预处理滑窗、归一化和切分不该踩的坑3.1 单变量容量序列还是多变量充放电特征拿到CALCE数据后可以选择的特征方案大致分两类。第一类只用放电容量序列单变量输入模型结构最简单也是这个项目最容易跑通的起点。第二类把电压、电流、温度都加进去希望模型学会更多工况信息。我的建议是先做单变量。原因很实际不同循环的充放电曲线长度不一致多变量需要按时间对齐或重采样到固定长度预处理工作量立刻翻倍而且电压电流曲线里的噪声很多样本量又只有几十上百条特征越多过拟合越快。论文里大量RUL预测工作也是只用容量序列或者只取放电电压曲线中的某个统计量。如果后续想升级多变量我习惯一次只加一类特征比如先加放电电压曲线的面积对比验证集误差有效再继续加。一次全加上出了问题根本定位不到是哪个特征拖了后腿。3.2 滑动窗口构造监督样本时间步长的语义LSTM监督学习需要输入输出对。这里用滑动窗口用前look_back个循环的容量预测第look_back1个循环的容量。这既是模型输入的时间步长也是模型能看到的历史长度。def sliding_window(sequence, look_back10): 把一维容量序列转成监督学习样本。 每个样本用前 look_back 个值预测下一个值。 X, y [], [] for i in range(len(sequence) - look_back): X.append(sequence[i:i look_back]) y.append(sequence[i look_back]) return np.array(X), np.array(y) look_back 10 X, y sliding_window(capacity, look_back) print(f原始序列长度: {len(capacity)}) print(f滑窗后样本数: {len(X)}输入形状: {X.shape}目标形状: {y.shape})逻辑说明X[i]包含sequence[i]到sequence[ilook_back-1]共look_back个连续循环值y[i]是紧跟其后的那个值。比如look_back10就是用第1到第10个循环的容量预测第11个循环第2到第11个循环预测第12个循环依次滚动。参数说明样本总数等于循环数 - look_back这是滑窗法的固有代价。循环越短look_back越大能造出的样本就越少。CS2系列电池虽然有几十到几百个循环但做完滑窗后训练样本通常只有几百到上千条这个数量级决定了模型不能太深。3.3 归一化与训练/验证切分先fit还是先transform归一化这一步是最容易埋雷的。常见错误是拿整个容量序列做fit_transform再切训练和验证集。这会让验证集的数据分布信息提前泄漏给模型。正确做法是先切分只对训练段fit再对验证段和测试段做transform。from sklearn.preprocessing import MinMaxScaler # 按时间顺序切分前70%训练后30%验证/测试 total len(capacity) train_len int(total * 0.7) scaler MinMaxScaler(feature_range(0, 1)) # 关键只用训练段拟合归一化参数 train_scaled scaler.fit_transform(capacity[:train_len].reshape(-1, 1)) test_scaled scaler.transform(capacity[train_len:].reshape(-1, 1)) # 构造滑窗样本 look_back 10 X_train, y_train sliding_window(train_scaled.ravel(), look_back) X_test, y_test sliding_window(test_scaled.ravel(), look_back) print(f训练样本数: {len(X_train)}测试样本数: {len(X_test)})逻辑说明MinMaxScaler会把容量线性压缩到0到1之间公式是(x - min) / (max - min)。fit_transform会计算训练段的最小值和最大值并完成转换transform只做转换不再重新计算。两个阶段的min/max可能差很多如果直接全序列fit等于模型在训练时已经偷看到了未来容量衰减的下限和上限验证误差会虚低换块电池就会打回原形。参数说明feature_range(0, 1)是LSTM的默认偏好因为LSTM激活函数是tanh输出-1到1和sigmoid输出0到1输入归一化到0到1能避免激活饱和。reshape(-1, 1)是把一维数组变成单列二维数组sklearn的归一化接口要求二维输入。切分比例没有硬性标准前70%训练、后30%测试是时序预测的常见起点。注意这里必须按时间顺序切随机打乱会彻底破坏序列依赖关系。4. LSTM模型搭建与训练网络结构、参数和训练脚本4.1 LSTM的输入形状与return_sequences参数Keras里LSTM层的输入要求是三维(样本数, 时间步长, 特征数)。对应到我们的滑窗数据X_train经过reshape后要变成(样本数, look_back, 1)其中1表示每个时间步只有一个容量值。return_sequences是搭多层LSTM时最容易搞混的参数。第一层LSTM设置return_sequencesTrue输出每个时间步的隐状态这样下一层LSTM能继续按完整时间维度计算最后一层LSTM设置return_sequencesFalse只输出最后一个时间步的隐状态再通过全连接层压缩成单个预测值。from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense, Dropout # 输入形状(样本数, look_back, 特征数) X_train_3d X_train.reshape((-1, look_back, 1)) X_test_3d X_test.reshape((-1, look_back, 1)) model Sequential() model.add(LSTM(units64, return_sequencesTrue, input_shape(look_back, 1))) model.add(Dropout(0.2)) model.add(LSTM(units32, return_sequencesFalse)) model.add(Dropout(0.2)) model.add(Dense(units1)) model.compile(optimizeradam, lossmse, metrics[mae]) print(model.summary())逻辑说明第一层LSTM的units64表示这层有64个记忆单元可以把输入序列映射成64维的隐状态序列。第二个LSTM的units32进一步压缩信息最后接一个Dense(1)输出单个容量预测值。Dropout层放在两个LSTM之间训练时随机丢弃20%的神经元连接防止模型死记训练集。参数说明input_shape(look_back, 1)里的1是特征维度如果后面加了多变量特征这里要改成特征数。lossmse是均方误差对大偏差惩罚重符合寿命预测希望避免大误差的需求mae是平均绝对误差单位是Ah方便直观判断预测偏差。4.2 训练参数怎么设定epoch、batch_size和早停这个项目的样本量不大训练参数设置不当会出现两个极端要么欠拟合训练几百轮loss还是降不下去要么过拟合训练loss趋近于0验证loss却在某个点之后直线反弹。我一般把初始训练轮数设到200同时用早停机制控制实际训练轮数。from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint callbacks [ EarlyStopping( monitorval_loss, patience20, restore_best_weightsTrue ), ModelCheckpoint( filepathbest_lstm_model.h5, monitorval_loss, save_best_onlyTrue ) ] history model.fit( X_train_3d, y_train, validation_data(X_test_3d, y_test), epochs200, batch_size16, callbackscallbacks, verbose1 )逻辑说明EarlyStopping监控验证集loss连续20个epoch没有下降就停止训练restore_best_weightsTrue会把权重回滚到验证loss最低的那个epoch。这一步很关键因为训练后期模型经常开始过拟合如果不回滚保存下来的就是已经变差的权重。ModelCheckpoint在验证loss改善时保存模型文件相当于给训练过程上了双保险。参数说明batch_size16表示每16条样本计算一次梯度。样本总量只有几百到上千条时batch_size太大容易把梯度平滑掉训练不稳定太小又会让每个batch的统计噪声偏大。16到32是这类小样本项目的常用区间。epochs200只是上限实际训练会在几十轮内触发早停不用担心真的跑满。4.3 训练过程监控从loss曲线判断模型状态训练结束后第一件事不是去看预测图而是画出两条loss曲线。这是判断模型状态的直接手段也是这个项目可视化能力的一部分。监控指标正常表现异常表现训练loss平滑下降后趋于平缓剧烈震荡或持续不降验证loss随训练下降与训练loss接近先降后升说明过拟合训练与验证差距差距小且稳定训练远低于验证过拟合import matplotlib.pyplot as plt plt.figure(figsize(8, 4)) plt.plot(history.history[loss], labeltrain_loss) plt.plot(history.history[val_loss], labelval_loss) plt.xlabel(epoch) plt.ylabel(mse loss) plt.title(LSTM training history) plt.legend() plt.show()逻辑说明history.history是Keras训练过程中自动记录下来的字典loss和val_loss分别对应训练集和验证集每个epoch的损失值。如果验证loss曲线出现明显的“先降后升”形态基本可以断定过拟合下一步动作是调低units、加大dropout或减小look_back而不是盲目增加训练轮数。5. 避坑清单锂电池寿命预测最常见的5个翻车现场5.1 现象验证集loss低得离谱换块电池立刻崩原因归一化时对全序列做了fit_transform验证集的容量最大值和最小值已经混进了训练阶段的统计量。模型不是学会了预测容量而是学会了用泄漏的上下限信息做插值。解决严格按时间切分归一化只对训练段做fit验证和测试段只做transform。5.2 现象训练loss一直降不下来原因look_back设置过大比如直接设50样本量从几百掉到几十LSTM没有足够数据学习。同时过长的窗口把早期无关噪声也包了进来。解决把look_back调回10到20之间。如果循环总数只有50个建议用10甚至更短循环数100以上再考虑20。先用短窗口跑通再加长对比验证集误差。5.3 现象import keras报错或者LSTM层构建失败原因TensorFlow 2.x版本把Keras集成到了tf.keras而独立安装的Keras 3.x接口和默认后端发生了变动两套API混用会经常出现No module named keras.layers或者后端初始化失败。解决代码里统一用from tensorflow.keras.models import Sequential和from tensorflow.keras.layers import LSTM不要单独安装Keras 3。如果已经装了先卸载独立Keras再跑或者确认项目说明里写的导入方式是哪种。5.4 现象容量再生段预测曲线剧烈抖动原因电池静置后出现的容量回升是物理现象模型分不清这是真实退化趋势还是短期波动强行拟合这段回升会导致预测曲线大幅偏离。解决对容量序列做轻量平滑比如移动平均去除再生尖峰同时把网络units从64降到32加大Dropout到0.3降低模型对局部噪声的敏感度。5.5 现象预测曲线和真实曲线高度重合但剩余寿命算出来还是不准原因切分方法问题。如果用全部数据训练、再在全部数据上预测等于让模型见过测试段的容量走势曲线当然好看。寿命预测要的是前70%训练、后30%预测这种真正的外推。解决冻结测试段训练时完全不接触后30%的数据。同时注意评估指标别只看RMSE要画预测曲线看尾部的衰减趋势是否一致因为剩余寿命由容量穿越EOL阈值的时机决定。6. 把预测结果画清楚可视化与验收技巧6.1 训练损失曲线先读预测曲线后看训练结束后先看loss曲线确认收敛状态再画预测曲线。这里有个小经验画横坐标时循环数超过40个刻度标签会挤在一起也就是常说的“横坐标太密集”。解决方法是旋转刻度标签或者减少刻度数量plt.xticks(rotation45)或者plt.xticks(np.arange(0, len(y_true), 5))都能让图可读。6.2 预测曲线与误差带绘制# 反归一化预测结果 y_pred_scaled model.predict(X_test_3d) y_pred scaler.inverse_transform(y_pred_scaled) # 测试段真实容量注意滑窗导致索引偏移 test_start train_len look_back y_true capacity[test_start:] # 画预测对比图 plt.figure(figsize(10, 5)) plt.plot(range(len(y_true)), y_true, labelactual capacity, markero, markersize3, linewidth1.5) plt.plot(range(len(y_pred)), y_pred, labelpredicted capacity, linestyle--, linewidth1.5) # 误差带正负2倍标准差 residuals y_true - y_pred.ravel() std np.std(residuals) plt.fill_between( range(len(y_true)), y_pred.ravel() - 2 * std, y_pred.ravel() 2 * std, alpha0.2, label±2 std ) plt.xlabel(cycle) plt.ylabel(capacity (Ah)) plt.legend() plt.grid(True, linestyle--, alpha0.4) plt.show()这里test_start train_len look_back是因为滑窗后第一个样本的预测目标对应原始序列第look_back个位置测试段还要再叠加训练段的长度。误差带用真实值和预测值的残差标准差画出能直观看到模型在寿命末段的置信区间是否变宽。预测容量的意义最后要落到剩余寿命上设定EOL阈值为额定容量的80%预测容量曲线穿越该阈值对应的循环数减去当前循环数就是剩余寿命。6.3 一个更稳的验收技巧用多块电池交叉验证单块电池上预测准不代表模型通用。CALCE数据集通常包含多块同型号电池我会用电池A训练、电池B验证再做反向交叉验证两个方向的误差都不大才敢把模型用于新电池。这是一个成本很低但非常有效的验收手段也是我在这个项目上吃过亏以后形成的习惯。如果跨电池测试误差明显偏大优先怀疑过拟合和归一化泄漏两个方向而不是急着加模型复杂度。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

基于CNN的GTSRB交通标志识别源码解析与实战

基于CNN的GTSRB交通标志识别源码解析与实战

简介:这是一份面向计算机、人工智能及相关专业学生与开发者的交通标志识别项目源码,基于Python与卷积神经网络实现,采用GTSRB数据集完成模型训练与评估,适合作为毕业设计、课程设计或入门深度学习实战的参考方案。压缩包共9个文件…

2026/10/12 13:39:50 阅读更多 →
Python招聘数据分析可视化系统:从数据采集到ECharts图表全流程实战

Python招聘数据分析可视化系统:从数据采集到ECharts图表全流程实战

简介:本资源为基于Python的招聘数据分析可视化系统毕业设计完整源码包,面向计算机相关专业需要完成毕业设计的学生及自学者。项目围绕招聘数据采集、清洗、分析与可视化展示展开,涵盖爬虫抓取、数据预处理、多维度统计分析与图表呈现等核心环…

2026/10/12 13:39:50 阅读更多 →
垃圾短信识别:NLP文本分类从TF-IDF到TextCNN的完整实践

垃圾短信识别:NLP文本分类从TF-IDF到TextCNN的完整实践

简介:这是一套面向本科毕业设计及NLP初学者的中文文本分类实战项目,聚焦垃圾短信识别,覆盖从数据预处理、中文分词、TF-IDF特征提取到SVM模型训练评估的完整流程,并支持按需替换为其他分类模型。包内共8个文件,包含文本…

2026/10/12 13:39:50 阅读更多 →

最新新闻

本地运行可操控电脑的 AI OpenClaw 小龙虾完整安装实操文档(含安装包)|TaoToken 统一 Key 配置

本地运行可操控电脑的 AI OpenClaw 小龙虾完整安装实操文档(含安装包)|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/12 14:38:02 阅读更多 →
大模型Token开销大?用TaoToken统一Key管理API调用,轻松省下大笔预算!

大模型Token开销大?用TaoToken统一Key管理API调用,轻松省下大笔预算!

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

2026/10/12 14:38:02 阅读更多 →
ROS Navigation恢复行为源码解读:从触发链路到自定义实现

ROS Navigation恢复行为源码解读:从触发链路到自定义实现

写这篇源码解读的原因很简单:我调试过不下十次机器人被卡住,每次看日志都是同样的流程——规划失败、重试、再失败、然后机器人开始原地转圈。很多新手看到这一步直接懵了,以为导航栈死循环了。实际上这是move_base在执行它的最后一道防线&am…

2026/10/12 14:38:02 阅读更多 →
2025年人工智能技术最新发展综述:从大模型到多模态的TaoToken实践观察

2025年人工智能技术最新发展综述:从大模型到多模态的TaoToken实践观察

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

2026/10/12 14:38:02 阅读更多 →
人工智能网络赛实战:从数据清洗到交叉验证的竞赛全流程指南

人工智能网络赛实战:从数据清洗到交叉验证的竞赛全流程指南

简介:2021年安徽省大数据与人工智能应用竞赛人工智能(网络赛)本科组赛题数据包,面向备战省级AI竞赛的高校本科生与指导教师,覆盖人脸年龄预测和房价回归预测两大典型任务。压缩包共1009个文件,以1000张jpg人…

2026/10/12 14:38:02 阅读更多 →
AI使用心得(二):用TaoToken统一Key打通Trae与Qwen的Spring Boot开发流

AI使用心得(二):用TaoToken统一Key打通Trae与Qwen的Spring Boot开发流

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

2026/10/12 14:37:01 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

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