微信小程序投票系统毕设源码与数据库实战指南
简介这是一套面向计算机专业本科生的高分毕业设计级微信小程序源码聚焦在线投票系统开发适用于毕业设计、课程设计与期末大作业等实践场景。资源包含完整可运行的前后端代码及配套数据库经本地编译验证评审得分高达98分内容已通过助教审核难度适中且工程规范性强。压缩包共880个文件涵盖101个JavaScript逻辑文件、94个Vue组件、85个Java后端服务类、242个PNG/SVG图标资源及2个SQL建库脚本辅以bat一键部署脚本如1-install.bat、2-run.bat和多层级页面结构IndexHeader、BreadCrumbs等整体体积12.31MB结构清晰、模块解耦明确。目前已有122人学习下载读者可直接导入开发工具运行调试快速掌握小程序SpringBootMySQL全栈开发流程并复用其权限管理、投票统计、用户交互等核心功能模块。1. 投票微信小程序完整源码数据库为什么它成了计算机专业毕设的「稳过型」选题不是所有毕设都得跑通YOLOv8、调参三天三夜、最后在答辩PPT里用“模型精度提升0.3%”硬撑场面。真正让导师点头、让答辩组松口气、让同学私下问“哥你这源码能借我改改吗”的往往是——一个功能闭环、界面干净、数据可查、部署可验的投票类微信小程序。它不炫技但把微信登录、手机号获取、选项增删改查、实时计票、结果导出、后台管理这些微信小程序核心链路全走了一遍它不碰分布式高并发但把MySQL事务控制、用户权限隔离、防重复提交、前端防抖这些本科毕设最常考的工程细节全埋进去了。尤其当源码附带可直接导入的数据库含建表语句、初始数据、索引设计且结构清晰到能一眼看出vote_record表里user_openid和vote_option_id的联合唯一约束是用来防刷票的——这种项目就是毕设答辩现场的“后悔药”。适合想稳扎稳打、不想被环境配置卡死、又需要体现全栈能力的本科生尤其适合课设做过简单CRUD、但没独立搭过微信生态项目的同学。2. 从源码解压到真机扫码本地跑通投票小程序的最小闭环2.1 源码结构拆解认准这4个关键目录别被“完整”二字唬住拿到vote-wechat-miniprogram.zip后先别急着导入开发者工具。解压后打开根目录重点盯住这四个文件夹miniprogram/小程序前端代码app.js是入口pages/vote/下是投票主页面pages/admin/是管理后台注意很多“完整源码”其实没真做管理页这里必须确认是否存在admin目录及对应json配置cloudfunctions/云函数目录若使用云开发但本项目更大概率是传统服务端所以重点看server/server/Node.js或Python后端热词里出现python cc攻击源码是干扰项本项目后端多为Express或Flaskroutes/vote.js或api/vote.py是核心接口database/.sql文件如vote_system.sql或schema.sqlinit_data.sql组合这是“完整”的硬指标——没有这个谈不上“数据库”提示如果server/目录下只有package.json但无app.js或database/里只有.md文档没.sql说明所谓“完整源码”大概率是半成品。毕设最怕中途发现缺模块务必解压后第一件事就核对这四点。2.2 微信开发者工具导入跳过“体验版”陷阱直连本地后端很多同学导入后看到“体验版已过期”就慌了——那是因为小程序默认配置了线上域名。必须改两处修改project.config.json中的libVersion确保与当前开发者工具版本匹配如工具是1.06.2309140则设为libVersion: 3.4.5否则自定义组件报错修改miniprogram/app.js里的请求地址找到类似const API_BASE https://api.xxx.com的行改成你的本地后端地址// 修改前线上地址 const API_BASE https://vote-api.example.com; // 修改后本地调试假设后端跑在3000端口 const API_BASE http://localhost:3000/api;注意微信小程序禁止HTTP明文请求但本地调试时开发者工具允许localhost白名单。正式提审必须切回HTTPS此处先确保能通。2.3 后端启动三步法用npm或pip跑起来别让端口冲突成拦路虎以常见Node.js后端为例若server/package.json存在# 进入server目录 cd server # 安装依赖注意检查package.json里是否含mysql2而非mysql后者已停更 npm install # 修改数据库配置关键 # 打开config/db.js 或 server.js找到host/user/password/port # 将host从127.0.0.1改为localhost某些MySQL配置下前者连不上 # 端口确保未被占用netstat -ano | findstr :3306Windows或 lsof -i :3306Mac/Linux # 启动服务 npm start # 正常应输出Server running on http://localhost:3000若后端是Pythonserver/requirements.txt存在# 创建虚拟环境避免包冲突 python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows pip install -r requirements.txt # 启动常见Flask命令 python app.py # 若报错ModuleNotFoundError: No module named pymysql则补装pip install pymysql参数说明npm start实际执行的是package.json中scripts: {start: node app.js}Python项目若用Gunicorn部署本地调试直接python app.py更直观。端口冲突是高频翻车点——微信开发者工具默认占8000后端别再抢8000统一用3000或5000。2.4 数据库导入实战用MySQL命令行避过图形化工具的编码坑图形化工具如Navicat、phpMyAdmin导入.sql文件时中文乱码、时间戳错误、外键失效是三大玄学。命令行才是毕设人的后悔药# 登录MySQL需提前创建vote_db数据库 mysql -u root -p # 在MySQL命令行内执行注意分号结尾 CREATE DATABASE vote_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 退出MySQL回到系统命令行 exit # 导入SQL文件关键参数--default-character-setutf8mb4 mysql -u root -p --default-character-setutf8mb4 vote_db database/vote_system.sql验证是否成功USE vote_db; SHOW TABLES; -- 应看到vote_options, vote_records, users等表 SELECT COUNT(*) FROM vote_records; -- 初始数据应0证明init_data.sql生效逻辑说明utf8mb4是微信小程序存储emoji和生僻字的刚需编码utf8会丢数据COLLATE utf8mb4_unicode_ci保证中文排序正确--default-character-setutf8mb4参数比在SQL文件头加SET NAMES utf8mb4更可靠。3. 投票核心链路实现从微信登录到计票展示的6个关键接口3.1 微信登录获取openid为什么不能只靠wx.login()wx.login()只返回临时code必须用该code向微信接口换取openid用户唯一标识。源码中miniprogram/utils/api.js里必有类似函数// 前端获取code后发给自己的后端 wx.login({ success: res { wx.request({ url: http://localhost:3000/api/login, method: POST, data: { code: res.code }, success: (loginRes) { // loginRes.data.openid 是后续所有操作的身份凭证 wx.setStorageSync(openid, loginRes.data.openid); } }); } });后端Node.js示例需调用微信官方接口// server/routes/login.js const axios require(axios); exports.login async (req, res) { const { code } req.body; const appId wx1234567890abcdef; // 替换为你的小程序AppID const appSecret your_app_secret_here; // 替换为你的AppSecret const url https://api.weixin.qq.com/sns/jscode2session?appid${appId}secret${appSecret}js_code${code}grant_typeauthorization_code; try { const wechatRes await axios.get(url); const { openid, session_key } wechatRes.data; if (!openid) throw new Error(微信登录失败 wechatRes.data.errmsg); // 将openid存入数据库users表若不存在则INSERT存在则UPDATE last_login const user await db.query(INSERT INTO users (openid) VALUES (?) ON DUPLICATE KEY UPDATE last_loginNOW(), [openid]); res.json({ openid, msg: 登录成功 }); } catch (err) { res.status(500).json({ error: err.message }); } };参数说明appid和appSecret在微信公众平台【开发管理】→【开发设置】里获取jscode2session接口返回的session_key本项目暂不用因不涉及敏感数据解密但openid是后续所有操作的钥匙——投票、查看记录、管理后台权限都靠它。3.2 获取手机号为什么button上必须加open-typegetPhoneNumber微信要求获取手机号必须用原生button组件且需用户主动点击授权!-- pages/vote/vote.wxml -- button open-typegetPhoneNumber bindgetphonenumberonGetPhoneNumber 授权手机号参与投票 /button// pages/vote/vote.js onGetPhoneNumber(e) { if (e.detail.code) { // 将加密数据发给后端解密 wx.request({ url: http://localhost:3000/api/bind-phone, method: POST, data: { encryptedData: e.detail.encryptedData, iv: e.detail.iv, code: e.detail.code // 注意此处code是微信回调的code非login的code } }); } }后端解密Node.js需装cryptoPython用pycryptodome// server/routes/phone.js const crypto require(crypto); exports.bindPhone async (req, res) { const { encryptedData, iv, code } req.body; const sessionKey await getSessionKey(code); // 调用jscode2session获取session_key const key Buffer.from(sessionKey, base64); const ivBuf Buffer.from(iv, base64); const encryptedBuf Buffer.from(encryptedData, base64); const decipher crypto.createDecipheriv(aes-128-cbc, key, ivBuf); let decrypted decipher.update(encryptedBuf, null, utf8); decrypted decipher.final(utf8); const phoneObj JSON.parse(decrypted); // 更新users表中对应openid的phone字段 await db.query(UPDATE users SET phone ? WHERE openid ?, [phoneObj.phoneNumber, req.openid]); res.json({ success: true }); };注意getSessionKey需缓存避免频繁调用微信接口phoneObj.phoneNumber才是真实手机号前端永远收不到明文。3.3 投票提交防重为什么数据库唯一索引比前端防抖更重要前端加wx.showLoading()和按钮置灰只是体验优化真正的防刷票靠数据库约束-- 在vote_records表上建立联合唯一索引 ALTER TABLE vote_records ADD UNIQUE INDEX uk_user_vote (user_openid, vote_option_id, vote_date);后端插入时捕获唯一键冲突// server/routes/vote.js exports.submitVote async (req, res) { const { optionId } req.body; const openid req.openid; // 从token或session中取非前端传入 try { await db.query( INSERT INTO vote_records (user_openid, vote_option_id, vote_date) VALUES (?, ?, CURDATE()), [openid, optionId] ); res.json({ success: true }); } catch (err) { if (err.code ER_DUP_ENTRY) { res.status(400).json({ error: 您今日已投过此选项 }); } else { res.status(500).json({ error: 投票失败 }); } } };血泪经验曾见同学只做前端setTimeout禁用按钮3秒结果F12改JS直接绕过——唯一索引是最后一道防线。CURDATE()保证同日多次投票同一选项才去重跨日自动放开。3.4 实时计票查询为什么用COUNT(*)比SELECT *再计数快10倍投票结果页需显示各选项得票数常见错误是// ❌ 错误做法查出所有记录再前端计数 const records await db.query(SELECT * FROM vote_records WHERE vote_option_id IN (?), [optionIds]); // 然后JS遍历records统计...正确姿势是让MySQL直接聚合// ✅ 正确一条SQL返回全部计票结果 const result await db.query( SELECT vo.id AS option_id, vo.option_name, COALESCE(vr.cnt, 0) AS vote_count FROM vote_options vo LEFT JOIN ( SELECT vote_option_id, COUNT(*) as cnt FROM vote_records GROUP BY vote_option_id ) vr ON vo.id vr.vote_option_id ORDER BY vo.sort_order );逻辑说明LEFT JOIN确保未投票的选项也显示COALESCE(vr.cnt, 0)将其计为0GROUP BY在数据库层完成聚合避免传输大量原始记录ORDER BY vo.sort_order按后台设置的排序展示而非ID顺序。3.5 管理后台权限为什么用中间件校验比if-else更安全pages/admin/目录下所有页面需校验管理员身份。源码中server/middleware/auth.js应有// server/middleware/auth.js exports.requireAdmin async (req, res, next) { const openid req.openid; // 从token或session解析 const admin await db.query(SELECT is_admin FROM users WHERE openid ?, [openid]); if (admin[0]?.is_admin ! 1) { return res.status(403).json({ error: 无权限访问管理后台 }); } next(); }; // 在admin路由中使用 router.get(/options, auth.requireAdmin, (req, res) { ... });前端管理页首次加载时需调用/api/admin/check接口验证权限// pages/admin/index.js onLoad() { wx.request({ url: http://localhost:3000/api/admin/check, success: (res) { if (res.data.error) { wx.showToast({ title: 无权限, icon: none }); wx.navigateBack(); // 强制返回 } } }); }提示is_admin字段应在users表中类型为TINYINT(1)值为1表示管理员。切勿用字符串admin易被SQL注入。3.6 数据导出Excel为什么用SheetJS比后端生成更轻量管理后台常需导出投票结果为Excel。源码若用前端方案推荐则pages/admin/export.js中// 使用SheetJSxlsx.min.js已引入 const exportToExcel () { const data [ [选项名称, 得票数, 占比], ...result.map(item [ item.option_name, item.vote_count, ${((item.vote_count / total) * 100).toFixed(1)}% ]) ]; const ws XLSX.utils.aoa_to_sheet(data); const wb XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, 投票结果); XLSX.writeFile(wb, 投票结果_${new Date().toISOString().slice(0,10)}.xlsx); };优势无需后端生成文件、不占服务器IO、用户点击即下载aoa_to_sheet接受二维数组比JSON转Sheet更可控文件名含日期避免覆盖。4. 毕设答辩高频问题与避坑指南那些让导师皱眉的细节4.1 现象小程序真机扫码白屏开发者工具却正常原因真机调试时request请求域名未在微信公众平台配置合法域名或HTTPS证书无效。解决登录 微信公众平台 → 【开发管理】→ 【开发设置】→ 【服务器域名】将后端域名如https://api.yourdomain.com填入request合法域名必须是HTTPS且备案域名本地调试用localhost仅限开发者工具真机必须切HTTPS。4.2 现象数据库导入后中文显示为问号????原因MySQL服务端默认字符集非utf8mb4或连接时未指定编码。解决查看MySQL全局变量SHOW VARIABLES LIKE character_set%;确保character_set_serverutf8mb4修改MySQL配置文件my.cnf或my.ini[client] default-character-set utf8mb4 [mysqld] character-set-server utf8mb4 collation-server utf8mb4_unicode_ci重启MySQL服务重新导入SQL。4.3 现象微信登录后openid为空或每次登录生成新openid原因app.js中未持久化存储openid或后端未正确处理jscode2session返回。解决前端wx.setStorageSync(openid, res.data.openid)必须执行且在onLaunch中读取onLaunch() { const openid wx.getStorageSync(openid); if (openid) this.globalData.openid openid; }后端检查jscode2session返回是否含openid网络超时需重试appid/appSecret是否填错。4.4 现象管理后台添加新投票选项后前端页面不刷新原因前端未监听选项变更或缓存导致数据未更新。解决在pages/vote/vote.js的onShow生命周期中重新拉取选项列表onShow() { this.getOptions(); // 而非只在onLoad中调用 }后端接口返回数据时增加last_updated时间戳前端对比决定是否刷新。4.5 现象部署到云服务器后微信登录返回errcode 40029原因jscode2session接口的code已被使用过或过期5分钟有效期。解决前端wx.login()后立即发送code避免用户操作延迟后端收到code后立刻调用微信接口不要存入队列或延时处理检查服务器时间是否准确timedatectl status时间偏差超5分钟会导致code失效。5. 毕设加分技巧3个让答辩老师眼前一亮的实操优化5.1 投票结果页加「图表可视化」用ECharts Mini版零成本升级微信小程序不支持Web版ECharts但官方提供了精简版ec-canvas。在pages/vote/result.js中// pages/vote/result.json { usingComponents: { ec-canvas: /ec-canvas/ec-canvas } }!-- pages/vote/result.wxml -- view classchart-container ec-canvas idmyChart canvas-idmyChart ec{{ ec }} / /view// pages/vote/result.js import * as echarts from ../../ec-canvas/echarts; Page({ data: { ec: { onInit: function(canvas, width, height) { const chart echarts.init(canvas, null, { width, height }); canvas.setChart(chart); const option { tooltip: { show: true }, series: [{ name: 得票数, type: pie, radius: [40%, 70%], data: result.map(item ({ value: item.vote_count, name: item.option_name })) }] }; chart.setOption(option); return chart; } } } });关键点ec-canvas需从 GitHub官方仓库 下载不要用npm install小程序不支持radius设为数组实现环形图比纯饼图更节省空间tooltip开启后真机长按可查看详情。5.2 后台管理加「操作日志」5行SQL让导师看到工程规范性在users表中新增log字段TEXT类型每次关键操作写入-- 在users表加log字段 ALTER TABLE users ADD COLUMN operation_log TEXT DEFAULT NULL; -- 记录管理员操作示例删除选项 INSERT INTO users (operation_log) VALUES ( CONCAT(NOW(), | , 管理员xxx删除选项, optionName) );前端管理页加日志查看按钮后端提供/api/admin/logs接口返回最近50条。这不是功能需求而是工程习惯的具象化——导师看到“操作留痕”会默认你理解系统可观测性。5.3 毕设文档写「部署手册」用Docker Compose一键复现比截图更有说服力别只交Word文档附一个docker-compose.ymlversion: 3.8 services: web: image: node:18-alpine working_dir: /app volumes: - ./server:/app ports: - 3000:3000 command: npm start depends_on: - db db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: vote_db volumes: - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql ports: - 3306:3306执行docker-compose up -d即可启动全套环境。答辩时演示“从空服务器到可运行小程序”只需3分钟比讲10分钟原理更震撼。记住毕设不是秀技术深度而是证明你能交付一个可运行、可验证、可复现的系统。我带过6届毕设见过太多同学在“怎么让图表动起来”上纠结两周却忘了给数据库加个索引让查询快10倍。真正的工程能力藏在那些不炫但管用的细节里——比如utf8mb4的字符集、ON DUPLICATE KEY UPDATE的语法、ec-canvas的路径引用。把这些踩过的坑、调过的参数、写废的3版部署脚本变成你答辩PPT里一页页真实的截图和代码比任何“基于深度学习的智能投票系统”都更让人信服。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

rea工具集:搞定批量重命名、代码重构与文件整理

rea工具集:搞定批量重命名、代码重构与文件整理

如果你和我一样,经常要在一堆旧项目里做重复的机械变更——批量改名、重整目录、统一日志格式、扫出废弃的重复代码……你可能也会需要一个 “rea”。这不是什么新框架,是我花了几周实际打磨、又在上百个文件规模的项目里反复跑过才敢拿出来说的工具集合…

2026/10/11 9:46:49 阅读更多 →
Copilot代码审查三大盲区与对策:AI生成代码如何把关

Copilot代码审查三大盲区与对策:AI生成代码如何把关

1. 项目现象与问题拆解:提效背后的"烂摊子"1.1 为什么提效300%却留下技术债?——从代码库的真实变化说起先说个真实感受。上上个季度,团队引入辅助编程工具之后,交付速度肉眼可见地起飞。以前一个中等复杂的接口要从设计…

2026/10/11 9:46:49 阅读更多 →
正则表达式工程化实践:从引擎原理到日志解析与性能优化

正则表达式工程化实践:从引擎原理到日志解析与性能优化

如果你只给我“rea”这个项目代号,我大概率会把它理解成正则表达式(Regular Expression)的内部缩写——这也是不少团队在技术方案里惯用的叫法。在我处理日志抽取、接口字段校验、数据清洗和定时任务里的文本规则时,正则表达式几乎…

2026/10/11 9:46:49 阅读更多 →

最新新闻

PLC工程师12年经验:给自动化应届生的90条入行生存指南

PLC工程师12年经验:给自动化应届生的90条入行生存指南

1. 这个项目到底在做什么我打开这个标题看了三遍,脑子里蹦出来的第一个念头是:这玩意儿太真实了。“工作12年的PLC工程师,给自动化应届生的90条入行经验(每天更新)”,这句话没有炫技,没有标题党…

2026/10/11 10:33:14 阅读更多 →
显示驱动开发:规格书阅读方法论与实战技巧

显示驱动开发:规格书阅读方法论与实战技巧

1. 为什么规格书阅读能力决定了驱动开发的效率上限做显示驱动这行的人都有一个共识:代码写得再花哨,如果对芯片和Panel的规格书理解不到位,调试阶段一定会被各种花屏、闪烁、偏色问题教做人。我见过不少入行一两年的工程师,拿到一…

2026/10/11 10:33:14 阅读更多 →
Deepseek本地部署实战:CUDA 12.1+vLLM+AWQ全链路指南

Deepseek本地部署实战:CUDA 12.1+vLLM+AWQ全链路指南

简介:本资源是一份面向AI开发者与技术实践者的DeepSeek大模型本地化部署实操指南,聚焦零基础快速落地推理服务,解决模型部署环境复杂、工具链不清晰、硬件适配难等常见痛点。资源以177KB的PDF文档形式交付,内容完整覆盖Ollama框架…

2026/10/11 10:33:14 阅读更多 →
大模型参数、算力、精度:PPT讲清三要素与估算脚本

大模型参数、算力、精度:PPT讲清三要素与估算脚本

简介:这份PPT资料面向人工智能初学者、算法入门者及技术管理者,系统梳理AI大模型的核心知识框架,帮助读者快速建立对基础模型的整体认知。内容围绕参数规模、算力需求、模型精度与发展脉络展开,涵盖Transformer、BERT、GPT-3、ViT…

2026/10/11 10:33:14 阅读更多 →
如何把Hope Agent变成IDE的AI后端:ACP协议接入完全指南

如何把Hope Agent变成IDE的AI后端:ACP协议接入完全指南

【免费下载链接】hope-agent 🦭 A cross-device desktop AI agent with memory, autonomous goals, dynamic workflows, and headless deployment | 会记忆、能持续推进目标、会动态编排多 Agent 的跨端桌面 AI 助手,也可服务化常驻 NAS / 云端 项目地址…

2026/10/11 10:33:14 阅读更多 →
以太网IO模块Modbus TCP适配与连接要点详解

以太网IO模块Modbus TCP适配与连接要点详解

1. 项目概述1.1 核心需求解析“综科智控以太网IO模块Modbus TCP协议适配与连接要点”这个标题,说白了就是在工业现场里最常见的场景之一:把手头的以太网IO模块(也就是常说的远程分布式IO)接进PLC、上位机组态软件或者自研的采集系…

2026/10/11 10:32:14 阅读更多 →

日新闻

流感时间序列预测实战: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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →