LSTM股票时间序列预测实战:从数据准备到模型调参的完整指南
1. 为什么用LSTM做股票时间序列预测股票价格预测这件事圈外人觉得是玄学圈内人知道它是个典型的时间序列回归问题。你手头有一串按时间排列的价格数据想根据过去N天的走势推测明天大概会落在什么区间。传统方法比如ARIMA、GARCH这些统计模型在平稳性假设和线性关系上做得不错但股票市场里充斥着非线性、长记忆性和突发波动线性模型的天花板很明显。我第一次接触这个方向时试过用简单的全连接网络直接喂收盘价结果模型几乎学不到任何有用的模式——因为它把每一天的数据当成独立样本完全丢掉了时间顺序信息。后来换成RNN理论上它能记住历史状态但实际训练时梯度消失问题严重到令人崩溃超过10个时间步前面的信息基本就传不过来了。直到用上LSTMLong Short-Term Memory才算真正找到了一个能打的方案。LSTM的核心价值在于它通过门控机制遗忘门、输入门、输出门和细胞状态选择性地记住长期信息、遗忘无关噪声。这对股票数据特别关键——比如某家公司突然发布财报导致价格跳空这个事件的影响可能持续数周LSTM有能力把这个信号保留下来而不是像普通RNN那样几个时间步后就衰减殆尽。这篇文章适合谁看如果你已经了解Python基础、用过pandas处理数据、对神经网络有概念但没实际做过时间序列项目那这篇就是为你写的。我会从数据准备一路讲到模型调参和结果评估把踩过的坑和实测有效的技巧都摊开说。2. 数据准备与特征工程2.1 数据获取与清洗做股票预测第一步永远是搞数据。常见的数据源包括Yahoo Finance、Alpha Vantage、Tushare等这里不展开具体平台重点说数据拿到手之后怎么处理。原始数据通常包含日期、开盘价、最高价、最低价、收盘价、成交量。我一般用调整后收盘价作为主要预测目标因为它考虑了拆股和分红的影响连续性更好。拿到数据后第一件事是检查缺失值——A股遇到停牌、美股遇到节假日都会出现日期跳跃。处理方式有两种前向填充用上一个交易日的价格填充缺失适合短期停牌直接删除如果缺失超过3个交易日建议直接删掉这段避免引入虚假信息import pandas as pd import numpy as np # 假设df是从某数据源获取的DataFrame df df[[date, close]].copy() df[date] pd.to_datetime(df[date]) df df.sort_values(date).reset_index(dropTrue) # 检查缺失 print(df.isnull().sum()) # 前向填充 df[close] df[close].fillna(methodffill) # 删除仍然存在的缺失比如开头就是空的 df df.dropna()注意千万不要用未来数据填充过去。比如用后向填充bfill在时间序列里是严重的数据泄露模型在训练时会“偷看”未来的价格导致回测结果虚高。2.2 特征构造不止是收盘价只用收盘价做预测信息量太单薄。我通常会构造以下几类特征价格衍生特征日收益率(close - close_prev) / close_prev对数收益率log(close / close_prev)比简单收益率更接近正态分布移动平均线5日、10日、20日均线反映不同周期的趋势价格位置(close - min_20) / (max_20 - min_20)衡量当前价格在近期区间的位置波动率特征滚动标准差过去5日、10日收益率的标准差真实波幅max(high-low, |high-close_prev|, |low-close_prev|)成交量特征成交量变化率量价相关性过去N日价格变化与成交量变化的相关系数# 构造特征 df[return] df[close].pct_change() df[log_return] np.log(df[close] / df[close].shift(1)) df[ma_5] df[close].rolling(5).mean() df[ma_10] df[close].rolling(10).mean() df[ma_20] df[close].rolling(20).mean() df[volatility_5] df[return].rolling(5).std() df[volatility_10] df[return].rolling(10).std() # 价格位置 df[min_20] df[close].rolling(20).min() df[max_20] df[close].rolling(20).max() df[price_position] (df[close] - df[min_20]) / (df[max_20] - df[min_20]) # 删除因滚动窗口产生的NaN df df.dropna()2.3 归一化别小看这一步LSTM对输入尺度非常敏感。收盘价可能是几十到几百而收益率是零点几如果不做归一化大数值特征会主导梯度更新小数值特征几乎被忽略。我习惯用MinMax归一化把每个特征缩放到[0,1]区间from sklearn.preprocessing import MinMaxScaler feature_cols [close, return, log_return, ma_5, ma_10, ma_20, volatility_5, volatility_10, price_position] scaler MinMaxScaler(feature_range(0, 1)) scaled_data scaler.fit_transform(df[feature_cols])关键提醒scaler只能在训练集上fit然后用同样的参数transform验证集和测试集。如果全量数据一起fit测试集的分布信息就泄露到训练过程里了。这个坑我踩过不止一次回测曲线漂亮得不像话实盘一跑就原形毕露。2.4 时间窗口划分用多少天预测下一天这是LSTM最核心的超参数之一。窗口太短模型看不到足够的趋势信息窗口太长噪声太多且训练成本飙升。我的经验值日线数据窗口20-60天比较合理。20天约等于一个月交易日能覆盖短期趋势60天约一个季度能捕捉中期形态。分钟级数据窗口可以短一些60-120个时间步。周线数据窗口10-20周。具体怎么选我会用自相关函数ACF看一下目标序列在哪个滞后阶数后自相关性降到不显著以此作为窗口下限的参考。然后在这个基础上做几组对比实验。def create_sequences(data, target_idx, window_size): X, y [], [] for i in range(window_size, len(data)): X.append(data[i-window_size:i]) y.append(data[i, target_idx]) return np.array(X), np.array(y) WINDOW_SIZE 30 TARGET_IDX 0 # close在特征矩阵中的列索引 X, y create_sequences(scaled_data, TARGET_IDX, WINDOW_SIZE) print(f样本数: {X.shape[0]}, 时间步: {X.shape[1]}, 特征数: {X.shape[2]})2.5 训练集、验证集、测试集划分时间序列绝对不能随机打乱。我采用按时间顺序的7:1.5:1.5划分train_size int(len(X) * 0.7) val_size int(len(X) * 0.15) X_train, y_train X[:train_size], y[:train_size] X_val, y_val X[train_size:train_sizeval_size], y[train_size:train_sizeval_size] X_test, y_test X[train_sizeval_size:], y[train_sizeval_size:]实操心得如果数据量足够比如5年以上日线我会做滚动窗口验证——用前3年训练、第4年验证然后窗口向前滑动。这样能更真实地评估模型在不同市场环境下的表现而不是只看一个固定验证集。3. LSTM模型架构设计与实现3.1 基础LSTM层该怎么堆Keras/TensorFlow和PyTorch都能快速搭LSTM。我以Keras为例因为它的API对新手更友好。最基础的架构是一层LSTM 一层全连接输出。from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense, Dropout from tensorflow.keras.optimizers import Adam model Sequential([ LSTM(64, return_sequencesFalse, input_shape(WINDOW_SIZE, len(feature_cols))), Dropout(0.2), Dense(32, activationrelu), Dense(1) ]) model.compile(optimizerAdam(learning_rate0.001), lossmse) model.summary()几个关键参数的解释return_sequencesFalse只取最后一个时间步的输出。如果后面还要接LSTM层就设为True。LSTM(64)隐藏单元数。64是个不错的起点太小欠拟合太大容易过拟合且训练慢。Dropout(0.2)随机丢弃20%的神经元输出防止过拟合。股票数据噪声大Dropout几乎是必选项。Dense(1)输出一个标量即预测的归一化收盘价。3.2 堆叠LSTM与双向LSTM如果单层LSTM效果不够可以尝试堆叠两层model Sequential([ LSTM(64, return_sequencesTrue, input_shape(WINDOW_SIZE, len(feature_cols))), Dropout(0.2), LSTM(32, return_sequencesFalse), Dropout(0.2), Dense(16, activationrelu), Dense(1) ])第一层LSTM输出完整序列第二层在此基础上提取更高层的时间特征。但要注意层数越多梯度消失风险越大训练时间也成倍增加。我一般最多堆两层。双向LSTMBidirectional LSTM是另一个选择它同时从正向和反向读取序列。但这里有个陷阱股票预测是因果任务反向读取意味着模型在预测t时刻时“看到”了t1之后的信息。如果只是做离线分析无所谓但实盘交易中这是不可接受的。所以我个人在股票预测中不用双向LSTM。3.3 损失函数的选择MSE均方误差是最常用的但它对异常值非常敏感。股票数据里偶尔出现暴涨暴跌MSE会被这些极端值带偏。我通常对比三种损失损失函数公式特点适用场景MSE$\frac{1}{n}\sum(y-\hat{y})^2$对大误差惩罚重数据干净、异常值少MAE$\frac{1}{n}\sum|y-\hat{y}|$对异常值鲁棒存在极端波动Huber结合MSE和MAE小误差用MSE大误差用MAE通用推荐import tensorflow.keras.backend as K def huber_loss(y_true, y_pred, delta1.0): error y_true - y_pred is_small K.abs(error) delta squared_loss 0.5 * K.square(error) linear_loss delta * (K.abs(error) - 0.5 * delta) return K.mean(K.where(is_small, squared_loss, linear_loss)) model.compile(optimizerAdam(0.001), losshuber_loss)实测下来Huber损失在股票数据上表现最稳既不会忽略大波动也不会被单个异常值主导。3.4 学习率调度与早停学习率太大损失震荡不收敛太小训练慢且容易陷入局部最优。我用ReduceLROnPlateau回调当验证损失连续5个epoch不下降时学习率减半from tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping callbacks [ ReduceLROnPlateau(monitorval_loss, factor0.5, patience5, min_lr1e-6), EarlyStopping(monitorval_loss, patience15, restore_best_weightsTrue) ]EarlyStopping的restore_best_weightsTrue非常重要——它会在训练结束后恢复验证损失最低时的模型权重而不是用最后一个epoch的权重。这个细节能显著提升最终模型质量。4. 训练过程与调参实战4.1 训练配置与批次大小history model.fit( X_train, y_train, validation_data(X_val, y_val), epochs200, batch_size32, callbackscallbacks, verbose1 )批次大小怎么选我的经验32最通用的起点内存占用和梯度稳定性平衡得好64/128数据量大10万样本时用训练更快但可能略降精度16小数据集或需要更精细梯度时用股票日线数据通常几千到几万条32或64都合适。4.2 过拟合的识别与应对训练过程中要盯紧两个信号训练损失持续下降验证损失开始上升典型过拟合训练损失和验证损失都居高不下欠拟合过拟合的应对手段按优先级排序增加Dropout从0.2提到0.3或0.4减小模型容量减少LSTM单元数或层数L2正则化在LSTM层加kernel_regularizerl2(0.001)早停已经用了但可以缩短patience增加数据如果可能用更高频数据或更多年份from tensorflow.keras.regularizers import l2 model Sequential([ LSTM(64, return_sequencesFalse, kernel_regularizerl2(0.001), input_shape(WINDOW_SIZE, len(feature_cols))), Dropout(0.3), Dense(1) ])4.3 学习率与优化器的对比实验我做过一组对比实验固定其他参数只换优化器和学习率优化器学习率验证MSE收敛epoch备注Adam0.0010.002345最稳推荐Adam0.010.003128快但不稳RMSprop0.0010.002552略慢于AdamSGD0.010.0048120需要调动量结论很明确Adam 0.001是股票LSTM的黄金组合。SGD不是不能用但需要精细调参和更多epoch性价比低。4.4 训练曲线解读训练完成后第一件事是画损失曲线import matplotlib.pyplot as plt plt.figure(figsize(12, 4)) plt.subplot(1, 2, 1) plt.plot(history.history[loss], labelTrain Loss) plt.plot(history.history[val_loss], labelVal Loss) plt.legend() plt.title(Loss Curve) plt.xlabel(Epoch) plt.ylabel(Loss)健康的曲线应该是两条线都下降验证损失略高于训练损失但差距不大且验证损失在某个点后趋于平稳。如果验证损失呈U型先降后升说明过拟合已经发生早停点就在最低处。5. 预测结果评估与反归一化5.1 反归一化把预测值还原回价格模型输出的是归一化后的值必须用scaler的逆变换还原# 预测 y_pred_scaled model.predict(X_test) # 构造与scaler输出维度一致的矩阵 y_pred_full np.zeros((len(y_pred_scaled), len(feature_cols))) y_pred_full[:, TARGET_IDX] y_pred_scaled.flatten() y_pred scaler.inverse_transform(y_pred_full)[:, TARGET_IDX] # 真实值同样处理 y_test_full np.zeros((len(y_test), len(feature_cols))) y_test_full[:, TARGET_IDX] y_test y_true scaler.inverse_transform(y_test_full)[:, TARGET_IDX]注意inverse_transform要求输入维度与fit时一致。如果你只预测了收盘价一列需要构造一个同样列数的零矩阵把预测值填到对应列再逆变换后取那一列。这个操作我第一次做时卡了半天网上很多教程直接对单列逆变换会报维度错误。5.2 评估指标不只看MSE价格预测的评估不能只看MSE因为价格量级大MSE数值不直观。我通常看这几个from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score mse mean_squared_error(y_true, y_pred) mae mean_absolute_error(y_true, y_pred) rmse np.sqrt(mse) r2 r2_score(y_true, y_pred) # 方向准确率 direction_true np.sign(np.diff(y_true)) direction_pred np.sign(np.diff(y_pred)) direction_acc np.mean(direction_true direction_pred) print(fMSE: {mse:.4f}) print(fMAE: {mae:.4f}) print(fRMSE: {rmse:.4f}) print(fR2: {r2:.4f}) print(f方向准确率: {direction_acc:.2%})方向准确率是我最看重的指标。价格预测差几个点无所谓但如果方向判断对了交易策略就能赚钱。实测中LSTM在日线数据上的方向准确率通常在52%-58%之间超过55%就算不错了。5.3 可视化预测vs真实plt.figure(figsize(14, 6)) plt.plot(y_true, labelTrue, alpha0.8) plt.plot(y_pred, labelPredicted, alpha0.8) plt.legend() plt.title(Stock Price Prediction: True vs Predicted) plt.xlabel(Time Step) plt.ylabel(Price) plt.show()如果预测曲线明显滞后于真实曲线说明模型在“抄”上一个时间步的值没有真正学到动态模式。这种情况通常需要增加窗口大小加入更多差异化特征检查是否归一化有问题6. 常见问题与排查技巧实录6.1 模型预测一条直线怎么办这是新手最常遇到的问题。预测结果几乎不变像一条水平线。原因通常有三个归一化范围太窄如果价格在100-101之间波动归一化后都在0.5附近模型学不到差异。解决方法是改用收益率作为预测目标而不是绝对价格。学习率太小模型几乎没更新。试试把学习率提到0.01。损失函数选择不当MSE在价格波动小时梯度很小。换成MAE或Huber。6.2 验证损失比训练损失低很多这听起来是好事但实际上可能是验证集太简单或者数据泄露。检查验证集是否包含了训练集之后的时间段如果是随机划分的赶紧改成时间顺序划分。归一化是否在全量数据上fit了如果是改成只在训练集fit。6.3 训练时间太长LSTM训练慢是出了名的。加速手段用GPUColab免费版就够用减小窗口大小和隐藏单元数用CuDNNLSTM仅限GPU速度提升明显减小批次大小反而可能更快收敛因为更新频率高6.4 常见问题速查表问题现象可能原因解决方法预测一条直线归一化范围窄/学习率小改用收益率/提高学习率验证损失低于训练损失数据泄露/验证集太简单检查划分方式/归一化流程损失震荡不收敛学习率太大/批次太小降低学习率/增大批次过拟合严重模型太复杂/数据太少加Dropout/减层/加正则方向准确率约50%模型没学到有效模式加特征/调窗口/换损失预测滞后真实值模型在复制上一时刻加差分特征/增大窗口6.5 独家避坑技巧技巧一用差分特征代替原始价格。把close换成close.diff()模型更容易学到变化模式而不是记忆价格水平。技巧二多步预测用递归还是直接输出。递归预测用预测值作为下一步输入误差会累积几步之后就飘了。直接多输出Dense层输出N个值更稳但需要调整标签构造方式。技巧三集成多个随机种子。LSTM对初始化敏感训练5个不同随机种子的模型取预测均值能显著降低方差。实测方向准确率能提升2-3个百分点。技巧四不要追求完美拟合。股票数据本身信噪比极低如果模型在测试集上R2超过0.95几乎肯定是数据泄露。合理的R2在0.7-0.9之间方向准确率55%左右就已经是可用的模型了。技巧五定期重新训练。市场风格会切换半年前训练的模型可能已经失效。我通常每月用最新数据重新训练一次保持模型对当前市场状态的敏感度。7. 模型部署与持续优化思路训练好的模型要落地最简单的方案是保存为H5或SavedModel格式model.save(lstm_stock_model.h5) # 加载 from tensorflow.keras.models import load_model model load_model(lstm_stock_model.h5, custom_objects{huber_loss: huber_loss})实际使用中我会把模型封装成一个预测函数输入最近N天的数据输出明天的预测价格和方向def predict_next_day(model, scaler, recent_data, window_size, target_idx): # recent_data: 最近window_size天的特征矩阵未归一化 scaled scaler.transform(recent_data) X scaled.reshape(1, window_size, -1) pred_scaled model.predict(X, verbose0) # 反归一化 pred_full np.zeros((1, len(feature_cols))) pred_full[0, target_idx] pred_scaled[0, 0] pred_price scaler.inverse_transform(pred_full)[0, target_idx] return pred_price持续优化方向我个人比较看好的有注意力机制在LSTM输出后加Attention层让模型自动识别哪些时间步更重要多任务学习同时预测价格和波动率两个任务共享底层特征在线学习每天用新数据做一次小步更新让模型跟上市场变化这些方向我都试过注意力机制效果最明显但实现复杂度也最高。如果刚开始做建议先把基础LSTM调稳再考虑进阶方案。最后分享一个我踩过最深的坑曾经用某只股票2015-2020年的数据训练回测年化收益看起来很美实盘一跑就亏。后来发现2015年那波极端行情在训练集里占比太大模型学到的模式在正常市场里根本不适用。从那以后我每次都会检查训练集是否覆盖了至少一轮完整的牛熊周期并且对极端行情样本做降权处理。数据质量决定模型上限这句话在股票预测里是铁律。

相关新闻

FFmpeg Qt播放器稳定化:线程模型、seek与内存泄漏修复实战

FFmpeg Qt播放器稳定化:线程模型、seek与内存泄漏修复实战

简介:基于FFmpeg与Qt的播放器最终完善版工程,针对从零开始学习音视频编程的开发者,适合已在Qt中编写播放器、希望处理异常场景的读者。代码将底层播放器与Qt界面拆分为两个模块,底层用纯C编写,便于移植;支持…

2026/10/15 13:22:53 阅读更多 →
Spring Boot 部署实践:jar、war、Docker与Compose

Spring Boot 部署实践:jar、war、Docker与Compose

部署这事,看起来简单,实际坑不少。刚学 Spring Boot 的时候,我都是本地mvn spring-boot:run跑起来就完事,直到有一次要把一个“某订单服务”项目丢到测试服务器上给同事联调,才真正体会到“跑起来”和“部署好”是两码…

2026/10/15 13:21:53 阅读更多 →
python爬虫使用正则爬取网站的实现

python爬虫使用正则爬取网站的实现

前言 用正则表达式从网页里提取内容,是很多人接触爬虫的第一步:拿到 HTML 源码,用 re.findall 把链接、标题、价格抠出来。这条路学习成本低,但也最容易被用歪——既容易写出脆弱的模式,也容易忽视抓取的分寸。 本文要…

2026/10/15 13:21:53 阅读更多 →

最新新闻

ABAP可扩展架构设计与性能优化实践

ABAP可扩展架构设计与性能优化实践

1. ABAP环境下的可扩展应用架构全景在SAP技术栈中,ABAP作为企业级应用开发的核心语言,其架构设计直接影响着系统在业务增长过程中的适应能力。我经历过多个从初期快速开发到后期陷入性能泥潭的ABAP项目,深刻体会到可扩展性不是后期优化的选项…

2026/10/15 14:08:07 阅读更多 →
免费转换 jpg 格式的软件哪个好?电脑、网页、手机实用工具整理

免费转换 jpg 格式的软件哪个好?电脑、网页、手机实用工具整理

日常办公、提交材料、上传平台的时候,经常会遇到图片格式不匹配的问题,WebP、HEIC、PNG 无法直接上传,需要转为 JPG 格式。市面上转换工具五花八门,有不少带广告、加水印、还有上传隐私泄露的风险。今天整理不同设备下靠谱的免费转…

2026/10/15 14:08:07 阅读更多 →
WPS JS宏实现文本数字提取与自动汇总

WPS JS宏实现文本数字提取与自动汇总

1. 项目背景与需求解析在日常办公数据处理中,我们经常会遇到需要从混合文本中提取数字并进行汇总计算的需求。比如财务人员需要从"项目A 100元,项目B 200元"这样的文本中提取金额合计,或者运营人员需要统计"本月新增用户235人&#xff0c…

2026/10/15 14:08:07 阅读更多 →
【回眸】Work Buddy 智能办公助手核心应用场景指南

【回眸】Work Buddy 智能办公助手核心应用场景指南

在日常的高强度工作节奏中,我们常常陷入一种“忙而无效”的怪圈:会议开了很久,纪要却迟迟理不出来;跨部门沟通时,信息在群里被淹没,关键决策无人跟进;邮件回复斟酌半天,语气还是显得…

2026/10/15 14:08:07 阅读更多 →
【回眸】Retriever AI 企业级知识检索落地指南

【回眸】Retriever AI 企业级知识检索落地指南

在处理企业级知识库时,最让人头疼的往往不是大模型不够聪明,而是“喂”给它的资料太乱。想象一下,客服系统面对客户提问,要么答非所问,要么把两年前的旧政策当成最新规定抛出来;研发新人想查一段代码逻辑&a…

2026/10/15 14:08:07 阅读更多 →
Linux弱口令检测实战:John the Ripper从原理到加固全指南

Linux弱口令检测实战:John the Ripper从原理到加固全指南

前几天帮某单位做例行安全巡检,登录测试服务器以后,我习惯性地收集了一波Linux账号口令哈希,丢给John the Ripper跑了一会儿,结果连五分钟都没用到,一个运维账号的弱口令就被直接撞了出来。这种场景在真实环境里几乎每…

2026/10/15 14:07:04 阅读更多 →

日新闻

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/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 9:49:14 阅读更多 →