news 2026/10/3 3:11:57

Cherry Studio + MCP:手把手教你实现自动化测试与数据爬取

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cherry Studio + MCP:手把手教你实现自动化测试与数据爬取

最近很多人问我:Cherry Studio不是个AI聊天客户端吗?整天在群里看到有人用Cherry Studio玩MCP、跑自动化测试、做数据爬取,到底是怎么搞的?我自己也踩了不少坑,折腾了一两周,把整个链路摸了一遍,今天把整个过程整理出来。这篇文章不会讲那种玄乎的“AI将会改变一切”,而是切切实实地从工具安装、MCP配置、测试用例设计、爬虫脚本实现,一直讲到问题排查,尽量让你看完之后能直接照着做。

老规矩,先说清楚目标读者:已经安装了Cherry Studio、对AI辅助编程或测试有一点基础,但还没搞清楚MCP怎么用的人;或者是想做自动化测试但不想上来就写几百行Selenium脚本,想先借助AI快速验证流程的人。文章核心一句话:把MCP当成一个“万能工具插座”,Cherry Studio就是插座面板,你用自然语言让AI调用工具,它能帮你操作浏览器、抓网页、跑测试用例。


1. 为什么要把自动化测试和数据爬取交给Cherry Studio + MCP

1.1 先从Cherry Studio的定位说起

Cherry Studio本质上是一个多模型AI客户端,它本身不带推理能力,而是帮你集中管理各家大模型的API Key,统一对话入口。常见的用法是同时配置多个模型,比如日常问答用一个模型,写代码用另一个模型,然后在同一个会话里随时切换。

但这只是“聊天客户端”的维度。Cherry Studio的一个重要设计是支持MCP(Model Context Protocol,模型上下文协议)。这个协议最早由Anthropic提出,核心要解决的事情是:让AI模型可以调用外部工具、访问外部数据,而不是只靠训练时的知识回答你。打个比方,模型就像一个刚毕业的实习生,知识储备不错,但不会用公司内部系统;MCP就是给这个实习生配上各种工具和接口,他才能真的干活。

所以,Cherry Studio + MCP的组合,把“AI聊天”升级成了“AI Agent工作台”。你可以直接让AI打开某个网页、点击按钮、填写表单、检查页面返回结果、提取关键数据,甚至把结果整理成Excel。整个过程不用离开客户端,也不需要单独装什么复杂环境。

1.2 自动化测试、数据爬取为什么值得接入MCP

先说自动化测试。传统的UI自动化测试,你要写Selenium或Playwright脚本,定位元素、处理等待、写断言、跑用例。这套流程对熟练的开发或测试来说不算难,但对大多数人来说门槛在“写脚本”本身——你为了验证一个小功能,可能要先折腾半天环境。

接入MCP之后,流程变成了:你告诉AI“打开这个页面,点击登录按钮,输入账号密码,断言是否跳转到首页”。AI理解你的意图后,会通过Playwright MCP server去执行对应的浏览器操作,把它变成真实的浏览器指令,最后把操作结果反馈给你。相当于你把写脚本的过程交给了AI,自己只需要描述需求、审阅结果。

数据爬取也类似。传统爬虫要写HTTP请求、处理Cookie、解析HTML、提取字段,代码量不小。而MCP提供了一些现成的网页抓取工具server,AI可以自行决定访问哪个URL、抓取哪些内容、按什么结构整理数据。你只需要给一句“帮我抓取这个页面上所有商品标题和价格”,剩下的细节AI会拆解成工具调用去执行。

1.3 网络热词里那些玩法,到底哪些值得试

搜索相关关键词的时候,能看到大量和MCP相关的玩法:playwright mcp、figma mcp、blender mcp、codex配置mcp、chrome mcp server,甚至还有catia mcp、nxopen mcp这种工业设计软件的场景。这说明MCP协议本身已经成了一个比较通用的生态,不只是聊天玩具。

从实用角度来看,我个人觉得最值得优先尝试的是浏览器自动化类(Playwright MCP)、网页内容抓取类(Fetch / Chrome DevTools MCP)、文件读写类(Filesystem MCP)。这三个场景和日常开发、测试、数据处理关系最紧密,也是本文要重点展开的。

另外,如果你已经在用Cursor或Codex,会发现它们也能配置MCP server。这类工具的思路其实一样:把外部工具能力接入AI对话流,让AI不仅会“想”,还会“做”。所以本文讲的流程,换到别的支持MCP的客户端上也通用,只是配置入口不同。


2. MCP核心概念:先把这几个名字弄清楚再动手

2.1 MCP是什么,一句话说清楚

MCP的全称是Model Context Protocol,翻译过来是“模型上下文协议”。它的作用,是在AI模型和外部工具之间建立一套标准化的通信方式。

你可以把它理解为通用USB接口:以前每个设备都有自己的充电接口,现在统一成了Type-C,哪个设备都能插。MCP做的事情类似——如果没有MCP,你想让AI调用浏览器、数据库、文件系统,每个工具都得单独给AI写一套集成代码;有了MCP,工具方只需要实现一个标准的server,任何支持MCP的客户端(包括Cherry Studio)都能直接调用。

2.2 host、client、server的角色分工

在用MCP时,会涉及三个角色:MCP Host、MCP Client、MCP Server。

MCP Host是运行AI模型的上层应用,比如Cherry Studio就是Host。Host负责把用户的问题发给模型,并把模型要求调用的工具指令转发出去。

MCP Client在Host内部运行,作用是维护与各个Server的连接,可以把它理解为“调度中心”,客户端与服务器之间的会话管理、消息收发都由它负责。

MCP Server是实际干活的进程。每个Server提供一类或多类工具,比如Playwright Server提供了浏览器控制工具,Filesystem Server提供了文件读写工具。Server启动后通过标准输入输出(stdio)或HTTP与Client通信。

用一个生活场景来说明:你在餐厅点了菜(对AI描述需求),服务员(Host)把你的话记下来,后厨(Client)根据菜单安排各个厨师(Server)去做菜。每个厨师只负责自己的灶台,但他们通过后厨平台统一配合。

角色作用对应到Cherry Studio
MCP Host承载AI模型与用户交互Cherry Studio本体
MCP Client管理MCP Server连接与消息转发Cherry Studio内置的MCP客户端模块
MCP Server提供具体工具能力,如浏览器控制、网页抓取Playwright MCP、Fetch MCP等独立进程

2.3 MCP的调用链路:AI到底怎么“操作”工具的

MCP调用过程可以分成几段。第一步,用户输入自然语言需求,Host将消息传给大模型。第二步,模型根据内置的System Prompt和工具描述,判断应当调用哪个MCP Server的哪个工具,生成一个工具调用请求。第三步,Host中的MCP Client收到请求,将参数转发给对应的Server进程。第四步,Server执行真实操作——打开浏览器、点击按钮、读取文件等,然后把结果返回给Client。第五步,Client把结果回传给模型,模型基于结果决定下一步动作或生成最终回复。

这个过程最关键的一点是,模型是有“决策权”的,它不会一股脑把所有步骤都做完,而是边看结果边决定下一步。比如你让它“打开页面并搜索关键词”,它会先调用浏览器打开URL,等页面加载完成后看到结果,再决定调用点击或输入工具。这就是所谓的Agent循环。

2.4 动手之前先想清楚:你需要的工具集

在配置MCP之前,建议先列一下你要做的事情需要哪些能力,不然一股脑装一堆Server,不仅拉低启动速度,还会让模型决策变混乱。

我的经验是,做Web自动化测试和数据抓取,常用Server就这几个:

  • Playwright MCP:核心主力,控制浏览器执行点击、输入、滚动、截图、读取DOM等操作。
  • Fetch MCP:直接抓取URL内容并转为结构化文本,适合简单页面、接口数据。
  • Chrome DevTools MCP:通过Chrome调试协议直接与浏览器交互,可以做性能分析和更底层的页面操作。
  • Filesystem MCP:读写本地文件,方便把测试结果或爬取数据落盘。
  • Memory MCP:跨会话保存一些常用配置或状态,比如登录态或常用选择器。

在Cherry Studio的MCP配置页里,你会看到一个已连接Server列表,每个Server下方列出了它提供的工具。我建议控制Server数量在两到三个,模型决策的准确率会明显更高。


3. 环境准备:Cherry Studio接MCP的完整步骤

3.1 安装Cherry Studio并找到MCP入口

如果你还没装Cherry Studio,去官网下载对应系统的版本即可。安装过程没什么特别的,普通应用程序安装流程。装完之后,重点找MCP配置入口。不同版本所在位置略有差异,但一般都在“设置”或“助手”区域里,有一个“MCP服务器”或“MCP工具”的选项。

有的版本MCP功能不是默认展开的,需要你先打开开发者模式或高级设置。具体位置是设置页右侧,往下翻能看到“MCP服务器”,点击“添加”就可以开始配置。我最初找不到入口,就是因为版本较老,升级到最新版之后才出现。

3.2 添加一个MCP Server配置

MCP Server可以通过命令行方式启动,也可以连接远程HTTP服务。最常用的方式是通过npx运行Node.js包,因为Playwright等工具都是Node生态的。

以添加Playwright MCP为例,配置项大概像这样:

{ "mcpServers": { "playwright": { "command": "npx", "args": ["-y", "@playwright/mcp@latest"], "env": { "HEADLESS": "false" } } } }

这里有个细节:command是npx,args里传入包名。env字段可以设置环境变量,比如HEADLESS控制浏览器是否有头模式。如果你需要在抓取时观察浏览器画面,就设为false;如果只是跑批量测试、不需要人盯着,可以设成true,节省系统资源。

在Cherry Studio里,你不需要直接手写JSON文件,界面里有表单,但理解这个JSON结构仍然重要,因为在命令行调试、迁移配置时会频繁用到。

3.3 从npx启动到远程Server:三种典型连接方式

MCP Server的连接方式主要有三类,分别适合不同场景:

第一种是本地命令方式,通过npx或node执行一个本地程序,通信走标准输入输出(stdio)。这是最常用的方式,优点是简单、数据不出本机,缺点是需要本地装了对应的运行时(比如Node.js)。

第二种是HTTP / SSE方式,Server运行在远程服务器上,客户端通过URL连接。这种方式适合Server部署在容器或云主机上,多人共用一套工具。比如团队里有人把一个接口测试的MCP Server发布到内网地址,其他人直接填URL就能用。

第三种是带认证的远程方式,比如OAuth或Token鉴权。类似Figma MCP这类服务,需要你去开发者后台申请Token,然后在配置里填上,Server才能访问你的设计稿数据。

我的建议是,第一优先级用本地命令方式,因为它最稳定、最透明,出问题也容易调试。远程方式适合Server本身运行在别的地方,或者工具涉及多人共享。

3.4 验证连接与基本排错

添加完Server之后,Cherry Studio一般会显示连接状态。如果配置正常,状态会变成“已连接”,同时工具列表里会出现该Server支持的工具名。

如果连接失败,最常见的几个原因:

  • 本地没有Node.js或npx不在PATH环境变量里。在命令行执行npx --version验证一下,如果提示找不到命令,先去安装Node.js。
  • 首次运行npx会下载包,速度可能很慢,甚至因为网络原因超时。可以先把包下载好,再配置Server。
  • 端口冲突或权限问题,某些HTTP类Server会占用本地端口,换一个端口重试就好。

验证是否连通的最快方式,是在对话里直接问一句带有工具调用意图的话,比如“用playwright打开百度首页”。如果AI能调用browser_navigate工具并返回页面内容,说明链路已经通了。


4. 实操一:用MCP做自动化测试的完整过程

4.1 需求设定:一个可复现的测试场景

口说无凭,我拿一个实际例子来讲。假设你有一个Web页面,里面有一个登录表单,你需要验证三个点:空表单提交时是否弹出提示;错误密码时是否提示“密码错误”;正确账号密码时是否跳转成功。

用传统方式,你得写一个Playwright或Selenium脚本,几十行代码起步。用Cherry Studio + MCP,整个过程变成了对话式的。但这里要注意,不是简单说一句“帮我测一下登录”就能跑完,因为AI需要明确的操作对象和预期结果。你应当把步骤描述清楚,或者先在会话里约定好被测系统地址。

比如我首先输入:“使用Playwright MCP打开 https://example.com/login ,告诉我页面上有哪些输入框和按钮。”这一步是为了让AI先观察页面结构,后续选择器才能写准。然后你再一步步下达操作指令。

4.2 通过自然语言下达测试用例

拿到页面结构之后,接下来就是执行测试。像这样:

  • 第一步,告诉AI:“点击登录按钮,不要填任何表单,然后查看页面上是否出现‘请输入账号’的提示。”
  • 第二步,告诉AI:“在账号框输入test,密码框输入错误密码123456,点击登录,查看是否出现‘账号或密码错误’的提示。”
  • 第三步,告诉AI:“在账号框输入正确账号,密码框输入正确密码,点击登录,观察页面是否跳转到首页,并截图保存。”

有趣的地方在于,AI会自己决定调用哪个工具。比如“点击登录按钮”,模型可能会先调用browser_snapshot获取当前页面可操作元素,再调用click工具点击对应位置。你在对话里看到的反馈,实际上是它一步步执行工具后返回的结果。

我在实测中发现,AI对模糊指令的处理有时比较机械。比如你说“点击登录按钮”,当页面有多个按钮时,它可能点错。这时候需要你描述得更精确,例如“点击type=submit且文本为‘登 录’的按钮”。所以在写测试用例时,比平时跟同事沟通还要再具体一点。

4.3 自动化测试中三个关键技巧

跑了几轮之后,我总结了三个对MCP自动化测试影响很大的技巧。

第一,页面元素定位要明确。MCP虽然能获取页面快照,但模型对视觉位置的理解不如人精准。如果你能在指令中给出CSS选择器或XPath,它的点击准确率会大幅上升。比如:“点击按钮 #login-submit”,比“点击登录按钮”成功率更高。

第二,等待策略很重要。页面加载、接口请求都需要时间,AI虽然会做一些自动等待,但遇到慢接口时容易在页面还没渲染完就断言失败。我通常会在指令里加上“等待2秒后再操作”或“等待页面完全加载,检查是否有加载中提示”。

第三,结果断言要具体。AI执行完操作后,如果只是问“页面正不正常”,它可能会回答得模棱两可。更好的做法是明确指定:“检查页面是否包含‘登录成功’字样,如果包含输出PASS,否则输出FAIL并截图。”这样把断言标准固化下来,测试结果才有意义。

4.4 结合Playwright MCP的踩坑记录

Playwright MCP本身很好用,但实际跑的时候,我踩了几个坑,值得说一下。

第一个坑是浏览器启动参数。默认情况下,Playwright MCP会启动一个带界面的浏览器,这在调试时很方便,但如果你在服务器上跑测试,没有图形界面,浏览器会启动失败。解决办法是在配置里设置HEADLESS=true。

第二个坑是iframe里的元素。MCP的快照功能有时候不会把iframe内部内容完整暴露给模型,导致AI找不到元素。我的处理办法是:先用工具定位到iframe,再让AI切换进去操作。虽然对话里多几个来回,但走一步看一步反而更稳。

第三个坑是登录态的保存。每次启动浏览器都是全新会话,一些需要登录的页面就要重新走一遍登录流程。后来我把登录流程做成一个“预热步骤”,先跑一遍登录,再让AI把Cookie保存到文件,下次启动时通过Playwright的storageState参数加载。

第四个坑是MCP工具调用的“幻觉”。有时候模型会编造一个不存在的工具名,比如它可能以为有一个click_by_text的工具,实际上不存在。这时候需要在对话里明确工具前缀,比如“使用playwright提供的click工具”,模型就不太会跑偏。


5. 实操二:用MCP做数据爬取的思路与实现

5.1 先分清爬取场景,选对工具

爬取数据之前,先判断目标页面的类型,这会决定你要用哪个MCP Server。

如果是纯静态页面,内容直接写在HTML里,用Fetch MCP就够。它能把页面整个抓下来,再让AI模型从文本中提取关键信息。优点是快、轻量,不依赖浏览器。

如果是单页应用,内容通过JavaScript动态渲染,Fetch MCP只能拿到空壳HTML,这时候就得用Playwright MCP。Playwright会真实启动浏览器渲染页面,等JS执行完再抓取内容,得到的才是真正可见的页面。

如果爬取目标有登录、分页、下滑加载等交互,Playwright也是必要选择,因为你能让AI模拟点击“下一页”按钮。

5.2 一个通用流程:搜索、打开、抽取、整理

我以爬取某个公开商品列表页为例,演示整个流程。假设目标页面是一个行业资讯列表,每页有20条数据,每条包含标题、发布时间、摘要,需要翻10页。

第一步,让AI打开列表页第一页:“用playwright打开目标URL,等待页面加载完成,列出当前页面所有列表项的标题和时间。”

第二步,检查AI返回的数据结构。如果它漏了某些字段,你可以追问:“只提取标题和发布时间,忽略摘要,按表格形式输出。”

第三步,翻页。发送指令“点击下一页按钮,等待2秒,继续提取同样的字段”。这里要注意,如果你一次性说“继续翻页抓取10页”,AI在长任务执行上可能会中断或者漏页,我建议分页指令,一页一页来,或者明确“重复这个操作直到没有下一页”。

第四步,整理数据。等所有页的数据抓完之后,你可以让AI对所有提取结果做结构化的汇总,比如合并去重、按时间排序,最后输出成表格。

5.3 数据落盘:导出Excel的那点事

很多人会搜“Cherry Studio能导出Excel表格吗”,其实这个问题的答案取决于你怎么理解“导出”。

Cherry Studio本身的对话记录导出格式主要是Markdown和文本,并不是表格软件。但是对话里产出的结构化数据,可以让AI把内容整理成CSV格式的代码块,然后你复制粘贴保存成.csv文件,用Excel直接打开就行。如果你装了Filesystem MCP,甚至可以让AI直接把CSV写入本地文件,都不用复制粘贴。

我在实践里的做法是,让AI生成CSV内容并调用filesystem.write_file写入到指定路径,再用Python脚本或Excel打开做进一步清洗。如果数据量大,比如几千行,建议分页抓取时就把每页结果追加到一个文件里,最后合并。

这里有一个小技巧:CSV编码问题。你抓取的中文内容,如果直接用Windows记事本打开,有可能会乱码,原因是CSV保存时用了UTF-8编码,而Excel默认用GBK。让AI在写入时指定UTF-8 with BOM,或者最后用Excel的“数据-自文本”导入并选择UTF-8编码,基本能解决乱码。

5.4 合规、频率控制与“别作死”的底线

数据爬取这件事,操作上不难,但合规一定要留心。我的原则是:只爬取公开数据;遵守目标网站的robots协议;控制请求频率,不给对方服务器造成压力;不破解登录限制或验证码;爬下来的数据不用于任何商业用途或公开传播。

具体到MCP实操层面,频率控制可以这样实现:在抓取指令里明确要求“每页请求完成后等待3秒再访问下一页”,或者设置在Playwright里模拟人的操作速度,比如滚动页面、随机延迟。这些虽然会拖慢速度,但从长期角度看更稳妥。

另外,目标网站如果明显有反爬措施,正常手段拿不到数据,那就说明这个数据本身不应该通过爬取获取,应该考虑官方API或授权渠道。MCP + AI再强,也不应该用在绕过访问控制的场景上。


6. 常见问题与排查技巧实录

6.1 一张表搞定八成故障

我把这段时间遇到的问题整理成了一个速查表,排查时先按这个顺序过一遍,大部分问题都能解决。

症状可能原因处理办法
MCP Server显示“未连接”本地Node.js未安装或npx不在PATH命令行执行node -v、npx --version确认环境
首次连接特别慢npx正在下载依赖包预先安装依赖或更换网络环境,后续启动会快
AI说“找不到指定工具”模型生成的工具名与实际不符在指令中明确“使用playwright中的xxx工具”
浏览器没有弹出窗口HEADLESS被设成了true配置HEADLESS: false,或检查是否有隐藏的后台窗口
页面元素定位失败页面结构变化,或iframe中内容不可见先获取页面快照,再基于快照中的元素信息操作
抓取内容为空页面是动态渲染,Fetch MCP拿不到HTML改用Playwright MCP,等页面JS执行完毕后再抓取
中文CSV打开乱码编码不一致写入时使用UTF-8 with BOM,或导入Excel时手动选择UTF-8编码
长任务执行到一半中断单轮对话上下文或工具超时限制拆分成短任务,分页多次执行,保留中间结果

6.2 哪个环节慢了?定位性能瓶颈

做自动化测试和数据抓取时,如果感觉很慢,慢在哪个环节要分清楚。

如果是AI“思考”慢,比如你提问后模型隔了很久才回复,这通常是模型本身的推理速度或API响应问题。你可以在Cherry Studio里换一个更快的小模型,或者限制回答长度。

如果是MCP Server执行慢,比如浏览器打开页面卡顿、页面脚本执行时间过长,那跟目标网站和本机性能有关。你可以观察状态栏上的工具调用耗时,确认耗时集中在哪个操作上。

如果是工具返回结果很大,比如抓了一大段HTML回传给模型,这会明显拖慢后续响应,因为模型要处理的内容变多了。解决办法是让MCP Server端先做筛选,比如使用Playwright提取文本而不是整页HTML,再让AI基于摘要处理。

6.3 进阶:把常用流程沉淀成模板和脚本

用对话方式完成一次测试或爬取之后,不要只在对话里跑一遍就完事,更高效的做法是把整个流程沉淀成一个可复用的模板。

我的习惯是,把成功的指令序列保存成Markdown笔记,按“打开页面-获取快照-输入表单-点击提交-断言结果”这样的结构记录。下次跑相同场景时,直接把整段指令复制进新对话,让AI按步骤执行。这样可以大大减少每次都要重新描述需求的时间和出错概率。

更进一步,如果MCP的对话流程很稳定了,可以考虑把核心步骤转成Python脚本,用Playwright库直接写自动化代码。MCP在这里扮演的角色是“快速验证测试步骤的脚手架”:先用自然语言验证一遍业务逻辑,确认选择器、断言点都没问题,再固化成真正的自动化回归脚本。这个思路比一上来就写脚本要快不少,也避免了大量因为选择器写错而反复调试的问题。


最后再分享一点我个人的体会。MCP这个东西,第一次用时觉得“也就是把工具调用包装了一下”,但真正跑起来之后,会明显感觉到它改变的是工作方式。以前做一个测试用例,先查文档、写代码、调试、跑通,至少半天;现在可以先在Cherry Studio里把流程快速过一遍,看到结果不对就马上调整指令,几分钟就能把方案确定下来。对于数据爬取也一样,需求确认的速度快了很多,剩下的工作量主要是数据处理和合规检查。

当然,MCP并不完美。界面上偶尔会卡,长任务容易断,模型偶尔会自作聪明选错工具,这些都还需要时间打磨。但就目前而言,它已经是一个值得认真研究的效率工具了。把Chat类客户端升级成真正能干活的Agent工作台,这条路已经走通了,接下来就看你能在它上面搭出多少自己的玩法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 3:11:57

4KV浪涌以太网电路设计:从TVS选型到PCB布局的完整防护指南

浪涌测试不过,网口被打挂,这种事情在硬件开发里应该不陌生。我最早做以太网接口的时候,也是被这个4kV的浪涌折腾得不轻。一开始以为RJ45座子后面随便放个TVS管就完事,结果测试的时候变压器先冒烟了;后来把TVS管从变压器…

作者头像 李华
网站建设 2026/10/3 3:09:53

VLT虚拟链路中继实战:从原理到OS10配置与排障

1. 为什么数据中心里需要VLT:从设备冗余聊起先说个场景。你有一台接入交换机,下连几十台服务器,上连两台核心交换机做链路聚合。平时跑着没事,但只要这台接入设备宕机,底下所有业务全断,这就是典型的单点故…

作者头像 李华
网站建设 2026/10/3 3:09:34

Matlab DQN实现机器人自主避障的全链路工程实践

1. 这不是“调个库跑个Demo”:DQN在Matlab里让机器人真正学会“看路”你在网上搜“Matlab DQN 机器人避障”,大概率会看到两类内容:一类是直接抄论文公式、堆砌数学符号的“理论复读机”,另一类是把Matlab Reinforcement Learning…

作者头像 李华
网站建设 2026/10/3 3:09:34

用gplearn自动生成可解释CTA因子:从表达式树到实盘回测

简介:本资源是一份面向量化投资初学者与Python算法实践者的遗传规划因子生成实战项目,聚焦CTA策略中自动化因子挖掘这一核心难点。项目基于gplearn库实现遗传编程,通过表达式树演化机制从历史行情数据中自动发现可解释、非线性、高鲁棒性的交…

作者头像 李华
网站建设 2026/10/3 3:09:31

STM32串口通信升级:用nanopb实现轻量级protobuf协议,告别结构体硬编码

本来没打算写这篇。上周帮一个做毕业设计的朋友看代码,他拿STM32F407做了个温湿度采集器,PC端上位机走串口通信。他用的还是最原始的办法:定义结构体,memcpy到数组后发出去,上位机再按偏移量一个一个字节地解析。加一个…

作者头像 李华
网站建设 2026/10/3 3:09:17

Spring Boot文件上传下载实战:安全加固与MinIO集成全解析

在Spring Boot项目里塞个文件上传下载功能,听起来确实是“最简单”的那类需求,随便搜一下就能找到几十篇教程。但真到自己动手做,尤其是要放到生产环境给用户用的时候,问题就全冒出来了:文件名带中文怎么处理、用户传了…

作者头像 李华