基于Spark的买菜推荐系统设计与实现:从协同过滤到ALS实战
平时在技术社区里经常看到有人问“推荐系统毕设选题选啥”我的回答一般都很直接如果你已经掌握了Java基础又想让项目有亮点那“基于Spark的买菜推荐系统”是一个非常值得做的毕设方向。为什么这么说核心原因有四个第一这个题目天然契合大数据课程的考核点——用Spark做分布式计算技术栈主流且不过时第二推荐系统本身就是工业界重点领域面试时拿出来聊一点都不虚第三买菜生鲜电商这个场景贴近生活业务逻辑好解释数据也不难构造第四虽然代码量不小但所有环节都有成熟解决方案不是一个“做不出来”的题目。很多人担心“我Spark没学多久做推荐系统会不会太难”。我的看法正相反正因为你不熟这个毕设才有价值。真正动手写过一次Spark任务、调过一次推荐结果、跑通一条完整的数据流你对Spark的理解会超过看十遍教程。这篇文章就围绕这个项目的设计与实现从算法选型、系统架构、环境搭建到调试运行把整个过程中最实在的经验分享一下直接用代码量换经验值希望能帮打算做、正在做这类方向的同学少走弯路。1. 项目整体设计与思路拆解1.1 这个项目到底在解决什么问题买菜推荐系统的核心场景很直白用户在生鲜App或小程序上浏览、搜索、加购商品系统根据用户历史行为在“首页推荐”“猜你喜欢”“今日菜谱搭配”等位置给用户推荐合适的菜品。这个场景跟淘宝、京东那种全品类推荐有个区别生鲜商品的时效性强、品类相对集中、购买频次高。用户可能每周下单两三次每次买三五样菜而且消费习惯有明显的时间规律——工作日买便当菜周末买炖汤料。这些特点决定了推荐策略不能只停留在“猜你喜欢”的单一逻辑上还需要考虑热门度、搭配性、时令性等因素。毕设版的买菜推荐系统通常要实现这几块功能用户行为数据的采集与存储商品的类别、价格、销量等基础信息管理基于历史订单或浏览行为的个性化推荐热门商品展示、相似商品推荐推荐结果的Web可视化展示说白了这个项目让你完整走一遍“数据 → 算法 → 结果 → 展示”的流程把大数据的核心环节打包进一个可交付的系统中。1.2 为什么选Spark不选别的计算框架很多同学纠结过这个问题用Python写推荐算法不好吗用传统的SSH框架直接跑SQL不行吗这里我从毕设答辩的角度帮你理清逻辑。如果你的推荐数据量只有几百条那用Spark纯属大炮打蚊子MySQL一条SQL就能算完。但毕设选型不只是看性能更看学习价值和题目延展性。Spark在这个项目里承担的核心职责包括这几层分布式数据清洗原始行为日志可能包含重复点击、无效浏览、异常评分用Spark的DataFrame API做ETL非常顺手分布式相似度计算基于物品的协同过滤需要计算商品两两之间的相似度当商品数量上到几千上万时单机算力就比较吃力Spark可以分布式完成统一处理离线与准实时数据同一个RDD/DataFrame流程可以白天跑离线全量推荐晚上做增量更新架构上不打架从论文写作的角度看“基于Spark的推荐系统”天然可以把大数据技术栈写进第一章的课题背景和研究意义里。从实际开发的角度看Spark的Java API对Java系的学生相当友好你会写MapReduce就基本能上手。1.3 系统功能模块划分就算项目需求各不一样功能模块基本都能梳理成下面五块。每一块在答辩时都能对应上具体的实现细节模块核心功能关键技术点数据层用户数据、商品数据、行为数据的存取MySQL、HDFS文件导入计算层数据清洗、特征提取、相似度计算、推荐生成Spark Core、Spark SQL、MLlib算法层个性化推荐、热门推荐、相似推荐协同过滤、Item-Based CF服务层为前端提供推荐结果接口Spring Boot、REST API展示层页面展示推荐结果、商品信息、用户行为Vue或JSPBootstrap这五个模块的逻辑链条是前端收集行为 → 行为入MySQL → Spark拉取数据离线计算 → 结果写回数据库 → 接口读取结果并展示。理解这条链路是理解整个系统的关键。2. 核心推荐算法选型与实现细节2.1 协同过滤推荐系统的老牌主力买菜推荐系统最常用的算法是协同过滤Collaborative Filtering核心思想一句话就能讲透跟你口味相似的人买的菜很可能也是你喜欢买的。协同过滤分两类我建议两个都实现在论文里做对比分析这样内容更饱满基于用户的协同过滤User-Based CF找到与当前用户相似的其他用户把那些“相似用户买过但当前用户没买过”的商品推荐出来。用户量小的阶段效果好但用户量大时相似度矩阵计算代价很高。基于物品的协同过滤Item-Based CF计算商品之间的相似度比如“土豆”和“西红柿”经常被一起购买那么用户买了土豆就给他推荐西红柿。电商场景中商品数量变化比用户数量慢所以物品相似度矩阵可以离线计算在线推荐时直接查矩阵响应速度快。2.2 相似度计算余弦相似度与皮尔逊相关系数算法实现中最核心的数学操作是相似度计算。我用最经典的余弦相似度举例。假设用户对商品的评分向量分别是 A[4, 0, 3, 1] 和 B[2, 1, 3, 0]余弦相似度的计算公式是cos(A, B) (A·B) / (|A| * |B|)分词拆开来看就是两个向量对应位置的乘积之和除以两个向量模长得乘积。结果越接近1表示两个用户或两个商品越相似。在Spark里用Java实现这段逻辑我们通常会把评分数据转成CoordinateMatrix或IndexedRowMatrix然后调用columnSimilarities()方法它会基于分布式计算完成两两相似度计算。你不需要手写矩阵运算细节但要清楚底层计算的是余弦相似度答辩时能讲清楚输入输出。2.3 Spark MLlib里可以直接用的推荐模型Spark的机器学习库MLlib里提供了现成的协同过滤实现ALS交替最小二乘法这是目前Spark推荐类任务中用得最广泛、也是效果最稳定的算法。ALS的原理是把用户和商品映射到同一个隐向量空间中。每个用户用一个向量表示每个商品用一个向量表示两个向量做点积得到的值就是用户对商品的预估评分。交替最小二乘法就是反复固定一个矩阵、优化另一个矩阵直到模型收敛。在Java版本中ALS调用大致长这样// 加载Rating数据Rating由用户ID、商品ID、评分组成 DatasetRow ratings spark.read().option(header, true) .csv(hdfs://path/to/ratings.csv); // 转换为MLlib可以处理的Rating格式 JavaRDDRating ratingRDD ratings.toJavaRDD().map(row - new Rating( row.getInt(0), row.getInt(1), (float) row.getDouble(2) )); // 训练ALS模型 ALS als new ALS() .setMaxIter(10) .setRegParam(0.1) .setUserCol(userId) .setItemCol(itemId) .setRatingCol(rating); ALSModel model als.fit(trainingData); // 为每个用户生成TopN推荐 DatasetRow recommendations model.recommendForAllUsers(10);这个API不需要你推导复杂的矩阵分解公式但至少得知道setMaxIter是迭代次数、setRegParam是正则化参数它控制模型防止过拟合的强度。正则化参数调大了模型会变得保守调小了模型可能过度学习训练数据。2.4 冷启动问题我也踩过的坑做推荐系统一定绕不开冷启动问题。所谓冷启动就是新用户没有行为数据新商品没有交互记录协同过滤没办法给出有价值的推荐。毕设项目里我建议三种解决方案配合使用基于热门度的推荐新用户进来直接给他推荐当前销量最高、评分最好的商品作为兜底。基于规则的推荐用户注册时勾选口味偏好素食、辣口、清淡根据商品分类标签做粗粒度推荐。内容相似推荐根据商品名称、类目、价格区间计算文本相似度新商品一上线就能关联到老商品上。三种策略在任何推荐系统项目中都通用在你的论文里写出这套冷启动解决方案比单纯调用一个ALS模型要有说服力得多。3. 系统架构与核心模块实现3.1 推荐系统的整体架构图是怎么搭出来的我一般不推荐画那种巨大无比、包含十几层组件的企业级架构图毕设答辩的时候言之有物比什么都重要。一个清晰的买菜推荐系统架构三层就够了数据接入与存储层用MySQL存用户信息、商品信息、订单信息。行为日志可以额外存一份到HDFS模拟真实场景中的日志文件。Spark计算层Spark应用通过JDBC读取MySQL业务数据识别评分矩阵执行ALS或Item-Based CF算法输出TopN推荐结果把结果写回MySQL的推荐结果表中。应用服务层Spring Boot提供REST接口前端页面调用接口展示“猜你喜欢”“热门推荐”等板块。这套架构的好处是每一层职责单一哪一层出了问题都能单独排查。比如推荐结果不对只需要检查Spark层计算逻辑接口返回慢优先查数据库索引和接口代码。3.2 数据怎么构造、怎么预处理毕设阶段你没有真实用户行为数据没关系可以手写一个数据生成器。我推荐用Java的Random类生成模拟数据规则如下用户ID范围1200生成50位用户商品ID范围1100对应100种生鲜商品每个用户随机产生1030条购买记录评分分布在15之间评分生成时可以加一些逻辑倾向比如“土豆、西红柿、鸡蛋”这些搭配商品经常同时被购买数据规模控制在几千条到几万条之间比较合适。数据量太小ALS训练效果不明显数据量太大本地运行时间过长演示时容易卡顿。预处理过程在Spark里做三件事去重同一个用户对同一商品产生多条行为保留最新一条。过滤删掉评分过少比如只有一条记录的用户或商品防止矩阵太稀疏导致计算不稳定。归一化如果评分整体偏高或偏低考虑做均值中心化否则协同过滤的结果会偏向热门商品。3.3 推荐结果写回数据库的工程实现很多人在这里容易犯一个错误——把Spark作业当成一次性脚本跑完就完事。实际工程中推荐结果是需要反复使用的所以必须把结果持久化。在Spark Java代码里可以这样把计算后的推荐列表写入MySQLrecommendations.foreachPartition((IteratorRow partition) - { // 在每个分区上创建数据库连接 Connection conn DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); String sql INSERT INTO recommend_result (user_id, item_id, score) VALUES (?, ?, ?); PreparedStatement ps conn.prepareStatement(sql); partition.forEachRemaining(row - { ps.setInt(1, row.getInt(0)); ps.setInt(2, row.getInt(1)); ps.setDouble(3, row.getDouble(2)); ps.addBatch(); }); ps.executeBatch(); conn.close(); });这里有个很重要的性能细节如果用普通foreach逐条写入一千条数据就是一千次网络请求跑起来很慢。用foreachPartition把每条数据先在内存里攒成批量再一次性写入数据库性能能提升好几倍。Spark官方文档也推荐这样做面试时如果能提到这个细节加分效果很明显。3.4 Spring Boot服务层怎么和Spark衔接在毕设架构中Spark负责离线计算Spring Boot负责实时响应。两者的衔接点是MySQL里的推荐结果表。Spring Boot端只需要写一个非常常规的查询接口RestController RequestMapping(/api/recommend) public class RecommendController { Autowired private RecommendService recommendService; GetMapping(/{userId}) public Result getRecommendList(PathVariable Integer userId) { ListRecommendItem list recommendService.getTopNByUser(userId, 10); return Result.success(list); } }整个衔接过程不需要在Spring Boot里嵌入SparkContext这样两个环节解耦系统更稳定。想让毕设有亮点可以考虑在Spring Boot里再增加一个定时任务比如用Scheduled注解每天凌晨触发一次Spark作业的执行模拟生产环境的离线更新流程。4. 环境搭建、调试运行与踩坑记录4.1 本地开发环境怎么配最省心我建议的毕设环境配置如下按这份清单准备基本不会出错软件版本建议用途JDK1.8或11运行Java代码和SparkMaven3.6以上依赖管理与构建Spark3.2或3.3分布式计算引擎Hadoop3.2以上可选本地可用伪分布式或单机模式MySQL5.7或8.0存储业务数据和推荐结果Spring Boot2.x应用服务层开发IDEIntelliJ IDEA开发调试如果你是Windows本机开发千万别直接去配完整Hadoop集群折腾环境的时间和写代码的时间一样多。推荐用一个已经集成好的虚拟机镜像或直接在IDEA里以Local模式运行Spark作业。Spark天然支持本地模式代码里设置了spark.masterlocal[*]后所有Spark任务都在本机多线程跑不需要单独启动Hadoop集群——这个模式对毕设调试来说是效率最高的方式。4.2 从零到跑通的核心步骤整个项目从零搭建我习惯按下面几步推进创建Maven工程引入Spark SQL、Spark MLlib、MySQL驱动、Spring Boot相关依赖。数据库建表先建用户表、商品表、评分表、推荐结果表写入批量模拟数据。编写Spark作业先跑通最简单的任务从MySQL读取数据打印行数确认连接无误。实现ALS模型训练调整参数查看训练效果。把推荐结果写回MySQL用Navicat或命令行查询验证结果。搭建Spring Boot接口联调数据库查询。写前端页面用简单的HTMLCSSJavaScript或Vue把推荐列表渲染出来。第一次跑通全流程新手通常要花两三天。要有耐心卡住不要焦虑大部分问题都在下面这一节里能找到答案。4.3 本地运行报错的典型问题先说三个我在调试中最常见的问题几乎每个做这个项目的同学都会遇到问题一Spark作业启动时线堆栈溢出或内存不足原因通常是本地模式默认分配的内存不够。解决方法是设置JVM参数-Xms512m -Xmx1024m如果数据量中等把堆内存给到1G以上就足够了。问题二MySQL连接时区报错报错信息大致是The server time zone value Öйú±ê׼ʱ¼ä is unrecognized原因很直接——MySQL驱动需要知道时区。在JDBC连接URL后面加上?useSSLfalseserverTimezoneAsia/Shanghai问题三ALS训练时报数据集为空或异常最常见原因是评分表里数据过滤条件写错比如把某张表的字段名拼错了导致Spark读出来全为null。第二步最常踩的坑是人写的模拟数据里有些用户评分数量太少模型无法学到足够特征。前者需要检查SQL和Schema后者可以在预处理环节把评分过少的用户筛掉。5. 效果评估与优化建议5.1 推荐效果好在哪怎么量化做毕设不能只停留在“跑通”层面要有数据支撑你的算法效果。推荐系统常用的离线评估指标有三个准确率Precision推荐的商品中有多少是用户真正买过或者评分高的。召回率Recall用户历史上购买过的商品有多少被成功推荐了出来。覆盖率Coverage推荐结果覆盖了多少比例的商品品种。覆盖率越高说明推荐结果越多样不会只推荐那几样热门商品。拿到测试数据后把训练集和测试集按82切分在测试集上计算这三个指标。写论文时一般不用追求所有指标都最优很多情况是准确率提升了、覆盖率下降了这时重点分析指标之间的trade-off关系反而显得更有研究含量。5.2 让推荐效果更好的几个调优手段如果初版推荐结果不理想按下面顺序依次优化效果会明显改善增加数据量模拟数据从5000条扩到20000条模型可学习的交互记录变多。调整ALS参数setMaxIter(10)和setRegParam(0.1)是两支最常用的起点再单独试一下setAlpha(1.0)。加入商品热度惩罚对推荐列表中太热门的商品做降权避免推荐结果千篇一律。组合推荐策略ALS相似推荐只占60%的位次剩余40%位次留给热门推荐、品类新品尝鲜推荐。个人实测经验是一个参数怎么调都无法做到万能。正解是在推荐服务端设计“分池策略”主推池放ALS结果多样性池放热门和随机商品从两个池子里面按比例去混合效果比单跑一个算法稳定得多。6. 常见问题与排查技巧速查表把调式过程中最典型的问题统一归档成一份速查表能帮你省下大量网上搜索的时间。现象可能原因排查方法解决方案Spark作业启动即失败依赖冲突查看报错堆栈第一个异常类检查Spark和Hadoop版本兼容性统一依赖版本读取MySQL数据为空SQL表名或字段名错误先在MySQL客户端单独执行该SQL修正字段名映射ALS输出评分全部为默认值模型没有成功收敛打印每次迭代的损失值增大迭代次数或检查训练数据质量Spring Boot接口返回超时数据库表缺少索引用EXPLAIN查看SQL执行计划给user_id、item_id字段加索引前端页面中文乱码页面编码不是UTF-8查看页面meta标签与响应头统一用UTF-8编码模拟数据分布不均衡随机生成缺少业务规则统计评分分布曲线手动注入关联购买规则后再生成还有一个调试技巧Spark作业里别直接打印rdd.collect()到控制台结果多时会把内存撑爆。想看样本数据用rdd.take(5)让它只返回前5条。这虽然只是很小的习惯但能让你在开发期免去很多内存告警。7. 从毕设到进阶的扩展思路7.1 三个能提分的进阶功能如果你的毕设中期答辩已经通过了做完了基础功能还有时间我强烈建议在这三个方向里挑一个做增强实时推荐模块把Spark Streaming或Structured Streaming引进来用消息队列模拟用户实时点击行为每30秒更新一次推荐位。这一块能把毕设从“离线大数据”提升到“准实时大数据”。推荐解释功能给每条推荐结果加一列文字解释比如“因为你看过土豆的做法为你推荐西红柿”。这是当前推荐产品精细化的重点也特别容易在答辩时和老师互动。多维度画像标签在用户表上增加年龄、地区、口味偏好字段用Spark做简单的用户分群统计展示不同群体的消费差异。这可以证明你懂业务不只是会调包。7.2 这几个扩展方向为什么值得做扩展功能未必会全部用上但论文里有了这些思考能体现你的系统设计不只是“跑一个模型”而是有完整的产品视角。尤其是推荐解释功能生鲜场景做解释比纯电商更有话题性“你本周连续三天购买了绿叶菜为你推荐当季菠菜补充膳食纤维。”这类基于规则的文案生成并不复杂但对于毕设答辩来说它的演示效果非常好。7.3 最后一个建议把这个项目当成一次真实的系统交付来做而不仅是一个作业。写代码时注意模块分层、命名规范、注释完整提交给老师之前自己完整跑一遍部署流程把每一步操作截图放进文档里。如果学弟学妹公式推导和原理有疑问把这些疑问对应到源码的关键注释里帮助作用非常直接。项目里最难的不是某一个算法而是如何把分布式计算、推荐算法、服务化接口、前端展示这几个能力有机整合在一起。一旦整合跑通你的项目经验就真正沉淀下来了这比毕设本身给高分更有价值。

相关新闻

数字化工厂APS高级计划排程:从约束建模到落地的完整指南

数字化工厂APS高级计划排程:从约束建模到落地的完整指南

1. 为什么数字化工厂绕不开APS这道坎做制造业数字化转型这些年,我见过太多企业上了ERP、上了MES,设备也联网了,数据也采集了,但一到排产环节,车间计划员还是靠Excel排程,每天光协调插单、催料、调机就要耗掉…

2026/10/11 21:21:13 阅读更多 →
MATLAB天线方向图与阵列仿真脚本:从切比雪夫加权到波束扫描避坑

MATLAB天线方向图与阵列仿真脚本:从切比雪夫加权到波束扫描避坑

简介:面向阵列天线设计与电磁仿真方向的研究生、工程师及通信专业学习者,这份Matlab天线仿真工具包聚焦阵列天线的波束形成与方向图分析,适合天线课程作业、毕业设计及工程预研中的方案验证。压缩包内含1个m脚本文件,整体仅620B&a…

2026/10/11 21:21:13 阅读更多 →
自动化测试平台建设指南:从定位到落地避开常见坑

自动化测试平台建设指南:从定位到落地避开常见坑

先把话说在前面:这篇文章不教你用哪个工具,也不会给你一堆插件清单。我想聊的是,真正把一个自动化测试平台从无到有搭起来,并且让团队真的用起来、愿意用、用得稳,那些容易被忽略、但决定成败的点。我见过太多团队&…

2026/10/11 21:21:13 阅读更多 →

最新新闻

同城家政服务平台搭建,多商户派单方案详解

同城家政服务平台搭建,多商户派单方案详解

同城家政服务平台搭建:多商户入驻与智能派单方案详解同城家政行业早已从单一门店自营模式,转向多商户平台化联营发展。平台整合全城多家家政公司、个体服务商、持证服务师傅,统一承接用户订单,通过智能调度完成订单分发与履约。相…

2026/10/11 23:39:46 阅读更多 →
PDF加密权限解除实战:用qpdf免费命令行一键解锁

PDF加密权限解除实战:用qpdf免费命令行一键解锁

上周同事甩过来一个PDF,说打印店打不了,让我帮忙看看。我一看,文件本身没坏,是加了权限限制——允许查看,但打印和复制都被锁了。这种问题我一年能遇到几十次:文档在手机上看一点毛病没有,真要用…

2026/10/11 23:39:46 阅读更多 →
大数据缓存实战:Redis与Alluxio定位配置与踩坑

大数据缓存实战:Redis与Alluxio定位配置与踩坑

干大数据这行的人,迟早会被一个词拦住:慢。任务跑得慢、查询出得慢、报表刷得慢,追根问底,大多不是因为计算引擎不给力,而是存储访问拖了后腿。我在几个大数据平台的项目里折腾过缓存方案,常用的两样是Redi…

2026/10/11 23:39:46 阅读更多 →
基于蝴蝶优化算法的IEEE30节点无功优化Matlab实现与参数调优

基于蝴蝶优化算法的IEEE30节点无功优化Matlab实现与参数调优

1. 从"网损"到算法:先搞懂无功优化到底在优化什么说到电力系统优化调度,"有功优化"大家都很熟——机组出多少钱、发多少有功,直接影响运行成本。但大部分人第一次接触"无功优化"时都会有一个疑问:无…

2026/10/11 23:39:46 阅读更多 →
四月修复版H5农场养殖鸡蛋理财鸡源码部署与支付对接避坑指南

四月修复版H5农场养殖鸡蛋理财鸡源码部署与支付对接避坑指南

简介:最新修复版H5农场牧场养殖理财鸡游戏运营源码,定位为可直接运营的网站游戏项目,适合有建站基础、希望搭建休闲理财类H5游戏的个人或团队二次开发。资源包共2271个文件,约88.4MB,主体由HTML页面、JavaScript逻辑、…

2026/10/11 23:39:46 阅读更多 →
改进版Q-learning实战:Double Q、n步回报与经验回放

改进版Q-learning实战:Double Q、n步回报与经验回放

简介:基于Q-learning的改进版强化学习算法项目,聚焦路径规划场景,面向MATLAB用户及强化学习入门者。项目针对经典Q-learning收敛慢的问题,融合学习率衰减、动态ε-greedy探索、经验回放、目标网络与双线性更新等改进策略&#xff…

2026/10/11 23:38:45 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

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