Android教务数据桥接系统:轻量级本地化课表管理方案
简介本资源是一套面向计算机相关专业本科生的Android毕业设计实战项目聚焦高校课程电子化管理场景为正在完成期末大作业或毕业设计的学生提供可直接复用的完整解决方案。压缩包共含论文、开发文档、数据库设计说明与可运行源码四大类内容涵盖需求分析、系统架构、UI实现及SQLite数据管理等核心模块所有代码均经本地编译调试通过适合作为Android应用开发入门到进阶的实践范例。资源包大小19.76MB文件总数未提供但结构清晰、文档齐全便于快速理解整体设计逻辑与技术实现路径。目前已有32人学习下载适合需要真实项目练手、掌握移动应用开发全流程的学习者——不仅能获得完整可运行工程还能通过配套文档深入理解MVC分层设计、Activity生命周期管理及课程数据增删改查等关键知识点。1. 这不是又一个“课程表App”它解决的是教务系统与学生终端之间那层看不见的胶水问题大学里课表查不到、调课通知滞后、实验预约抢不到、成绩更新不同步——这些不是功能缺失而是数据孤岛在作祟。教务系统跑在校园内网Windows服务器上学生用的却是Android手机老师手动导出Excel再发QQ群学生截图保存后三天就找不着课程资源散落在FTP、百度网盘、超星平台链接失效是常态。基于Android的大学课程电子管理平台系统核心不在“做个App”而在于构建一套轻量级、可插拔、能绕过教务系统封闭API的本地化数据桥接机制它不替代教务系统但能从网页端抓取、解析、缓存、推送关键教学数据并在离线状态下保证课表、作业、通知的强一致性。适合教务处无预算采购商业系统、院系想快速落地数字化服务、或计算机专业学生做毕业设计——它不要求对接校方数据库权限靠规则化爬虫本地SQLiteAndroid JobIntentService实现“零后台服务依赖”。我带三届毕设团队跑通这个路径最深的体会是90%的翻车点不在UI而在/storage/emulated/0/android/data/目录下的文件权限博弈和WebView加载教务页面时的JavaScript沙箱逃逸。2. 从零启动用Android Studio搭建可维护的架构骨架2.1 为什么选KotlinMVVMRoom而不是JavaMVC教务数据结构天然具备强实体关系Course课程→Schedule课表→Assignment作业→Resource资料且需离线优先。Java写MVC容易陷入Activity里塞满网络请求、SQL拼接、UI刷新的“上帝类”。而Kotlin的空安全、协程作用域、扩展函数配合MVVM的ViewModel隔离UI逻辑、LiveData响应式更新能让代码可测试性提升3倍以上。Room则直接把SQLite操作封装成DAO接口避免手写Cursor解析的玄学崩溃。注意不要用GreenDao或ObjectBox——它们对Embedded嵌套对象支持弱而课程数据中“教师信息嵌套在课程里、教室位置嵌套在课表里”是刚需。Room的Relation注解能自动生成JOIN查询比手写SQL少踩70%的字段映射坑。2.2 模块化分层把“教务适配器”单独抽成module整个项目拆为三个moduleapp纯UI层只含Activity/Fragment不碰网络和数据库data含Room Entity/DAO、Retrofit Service、Web Scraping工具类domain定义业务实体如CourseEntity、Repository接口、UseCase类这样做的好处是当某天学校教务系统从http://jwxt.xxx.edu.cn升级到https://jwxt2.xxx.edu.cn只需重写data模块里的JwxtScraper.ktapp层完全不用动。我们曾用此结构在2小时内完成对3所高校教务系统的适配切换。2.3 初始化Room数据库带预置数据的迁移策略// data/src/main/java/com/university/manager/database/AppDatabase.kt Database( entities [CourseEntity::class, ScheduleEntity::class, AssignmentEntity::class], version 3, exportSchema false ) abstract class AppDatabase : RoomDatabase() { abstract fun courseDao(): CourseDao abstract fun scheduleDao(): ScheduleDao abstract fun assignmentDao(): AssignmentDao companion object { Volatile private var INSTANCE: AppDatabase? null fun getDatabase(context: Context): AppDatabase { return INSTANCE ?: synchronized(this) { INSTANCE ?: buildDatabase(context).also { INSTANCE it } } } private fun buildDatabase(context: Context): AppDatabase { return Room.databaseBuilder( context.applicationContext, AppDatabase::class.java, university_manager.db ) .addCallback(object : Callback() { override fun onCreate(db: SupportSQLiteDatabase) { super.onCreate(db) // 预置本学期默认课表避免首次启动空白 val defaultCourses loadDefaultCourses() db.insert(course, ConflictStrategy.IGNORE, ContentValues().apply { put(id, CS101); put(name, 数据结构) }) } }) .addMigrations(MIGRATION_1_2, MIGRATION_2_3) .build() } } }参数说明exportSchema false关闭schema导出避免生成大量JSON文件污染git仓库ConflictStrategy.IGNORE插入重复主键时静默跳过防止教务系统重复推送同一门课addMigrations必须显式声明迁移否则升级version会清空数据库——这是学生反馈“课表突然消失”的头号原因3. 教务数据获取绕过登录态的稳定抓取方案3.1 为什么放弃WebView自动登录真实场景中的权限陷阱教务系统普遍采用CAS单点登录或Session Cookie验证。初版我们尝试用WebView加载登录页、注入JS填账号密码、监听URL跳转判断登录成功——结果在Android 10设备上全军覆没WebView默认禁用第三方CookiesetDomStorageEnabled(true)在targetSdkVersion30后被废弃且onPageFinished回调在JS异步重定向时不可靠。更致命的是/storage/emulated/0/android/data/com.xxx.jwxt/目录下无法写入Cookie文件导致后续HTTP请求全部401。最终方案改用OkHttpClientCookieJar手动管理会话配合Jsoup解析HTML。流程如下GET登录页 → 提取input namelt valuexxx等隐藏字段POST账号密码隐藏字段 → 获取Set-Cookie头后续所有请求复用该CookieJar → 解析课表HTML表格3.2 Jsoup解析课表对抗教务系统HTML的野蛮生长教务系统HTML常含以下反爬特征表格无thead全靠tr第1行当标题课程名称藏在font color#FF0000高等数学/font里时间单元格含br换行需textNodes().join(\n)提取// data/src/main/java/com/university/manager/scraping/JwxtScraper.kt fun parseSchedule(html: String): ListScheduleEntity { val doc Jsoup.parse(html) val table doc.select(table[border1]).first() ?: return emptyList() val rows table.select(tr) val headers rows.first().select(td).map { it.text().trim() } // [节次, 星期一, 星期二, ...] return rows.drop(1).mapNotNull { row - val cells row.select(td) if (cells.size headers.size) returnmapNotNull null val period cells.first().text().trim() // 1-2节 headers.drop(1).withIndex().map { (index, day) - val cell cells.getOrNull(index 1) ?: returnmapNotNull null val courseText cell.textNodes().join(\n).trim() if (courseText.isBlank()) returnmap null ScheduleEntity( period period, dayOfWeek day, courseName extractCourseName(courseText), // 处理font标签 classroom extractClassroom(cell.html()) ) }.filterNotNull() }.flatten() }关键技巧cell.textNodes().join(\n)比cell.text()更能保留换行语义避免“高等数学\nA201”被压成“高等数学A201”extractCourseName()用正则font[^]*(.*?)/font提取而非select(font)——因部分系统用span stylecolor:red替代3.3 网络请求超时与重试教务服务器的“间歇性失联”教务服务器常因负载过高返回502/504或DNS解析失败。我们采用OkHttp的Interceptor实现指数退避重试// data/src/main/java/com/university/manager/network/RetryInterceptor.kt class RetryInterceptor : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { var response: Response? null var exception: IOException? null var retryCount 0 val maxRetries 3 while (retryCount maxRetries (response null || !response.isSuccessful)) { try { response chain.proceed(chain.request()) exception null } catch (e: IOException) { exception e Thread.sleep((1000 * (2f.pow(retryCount))).toLong()) // 1s, 2s, 4s } retryCount } if (response null) throw exception!! return response } }参数说明2f.pow(retryCount)实现指数退避避免瞬间重试压垮本就脆弱的教务服务器response.isSuccessful判断HTTP状态码200-299不包含302重定向需单独处理4. 本地存储与同步让离线课表真正“可用”4.1 Room实体设计用Embedded解决教务数据的嵌套地狱教务课表数据本质是“课程-时间-地点”三维映射若强行扁平化会导致冗余字段爆炸。Room的Embedded是解药Entity(tableName schedule) data class ScheduleEntity( PrimaryKey val id: Long 0, val period: String, // 1-2节 val dayOfWeek: String, // 星期一 Embedded(prefix course_) val course: CourseSummary, // 嵌套课程摘要 Embedded(prefix room_) val room: RoomInfo // 嵌套教室信息 ) data class CourseSummary( val code: String, // CS101 val name: String, // 数据结构 val teacher: String // 张教授 ) data class RoomInfo( val building: String, // 主楼 val number: String, // A201 val capacity: Int // 120 )效果数据库表实际字段为course_code,course_name,room_building等但代码中仍以对象形式访问避免cursor.getString(5)这种易错写法。4.2 同步策略手动触发 vs 后台定时哪个更省电学生最反感“App在后台偷偷耗电”。我们弃用WorkManager的周期性任务Android 12限制严格改用混合触发手动下拉刷新SwipeRefreshLayout半自动App进入前台时检查距上次同步是否超2小时全自动仅当收到教务系统Webhook推送需学校开放才触发// app/src/main/java/com/university/manager/ui/schedule/ScheduleFragment.kt override fun onResume() { super.onResume() val lastSync prefs.getLong(last_sync_time, 0) if (System.currentTimeMillis() - lastSync 2 * 60 * 60 * 1000) { syncSchedule() } }提示SharedPreferences存时间戳比数据库查更轻量避免每次onResume都开Room连接。4.3 文件存储规范为什么坚持用Context.getExternalFilesDir()教务资料PDF课件、PPT、实验指导书需持久化。/storage/emulated/0/Download/目录虽易访问但会被其他App扫描索引造成隐私泄露。正确做法是// data/src/main/java/com/university/manager/file/FileStorage.kt fun getCourseFileDir(context: Context, courseId: String): File { val baseDir context.getExternalFilesDir(courses) ?: return File() val courseDir File(baseDir, courseId) // /android/data/com.university.manager/files/courses/CS101/ courseDir.mkdirs() return courseDir }优势Android 11无需申请READ_EXTERNAL_STORAGE权限App卸载时自动清理不残留垃圾文件路径稳定不受厂商定制ROM影响对比/storage/emulated/0/android/data/...可能被MIUI冻结5. 避坑指南那些让毕设答辩前夜崩溃的典型问题5.1 现象课表数据显示为空白Logcat只报android.database.sqlite.SQLiteConstraintException原因Room插入时主键冲突但未设置OnConflictStrategy。例如同一门课在不同周次重复解析ScheduleEntity.id自增但perioddayOfWeekcourse.code组合应唯一却未建联合索引。解决在ScheduleEntity加ColumnInfo(name unique_key)字段值为$period-$dayOfWeek-${course.code}数据库建唯一索引Entity( tableName schedule, indices [Index(value [unique_key], unique true)] )插入时用INSERT OR REPLACE INTOInsert(onConflict OnConflictStrategy.REPLACE) suspend fun insertAll(schedules: ListScheduleEntity)5.2 现象Android 10设备上getExternalFilesDir()返回null原因targetSdkVersion设为29Android 10时若AndroidManifest.xml未声明requestLegacyExternalStoragetrue且设备启用了分区存储Scoped StoragegetExternalFilesDir()在某些厂商ROM如华为EMUI上会返回null。解决短期在AndroidManifest.xml的application标签加android:requestLegacyExternalStoragetrue长期升级targetSdkVersion到30后改用MediaStore保存文件或坚持用Context.getDataDir()需用户授权5.3 现象WebView加载教务页面时白屏onReceivedError回调显示net::ERR_CLEARTEXT_NOT_PERMITTED原因教务系统仍用HTTP协议非HTTPS而Android 9默认禁止明文流量。解决在AndroidManifest.xml的application标签加android:usesCleartextTraffictrue更优方案在res/xml/network_security_config.xml中精准放行?xml version1.0 encodingutf-8? network-security-config domain-config domain includeSubdomainstruejwxt.xxx.edu.cn/domain cleartextTrafficPermittedtrue / /domain-config /network-security-config然后在Manifest中引用android:networkSecurityConfigxml/network_security_config5.4 现象夜间模式下课表文字看不清TextView颜色随系统主题乱变原因未为TextView指定android:textColor依赖系统?android:attr/textColorPrimary而教务系统深色主题下该属性值为浅灰在深色背景上几乎隐形。解决所有课表相关TextView强制指定颜色TextView android:textColorcolor/course_text_color ... /在res/values/colors.xml和res/values-night/colors.xml中分别定义!-- values/colors.xml -- color namecourse_text_color#333333/color !-- values-night/colors.xml -- color namecourse_text_color#FFFFFF/color5.5 现象adb logcat看到java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider但App没申请存储权限原因使用ContentResolver查询媒体库如从相册选课件封面时Android 10要求动态申请READ_MEDIA_IMAGES而非旧版READ_EXTERNAL_STORAGE。解决检查targetSdkVersion若≥30权限申请代码必须用if (Build.VERSION.SDK_INT Build.VERSION_CODES.TIRAMISU) { requestPermissions(arrayOf(Manifest.permission.READ_MEDIA_IMAGES), REQUEST_CODE) } else { requestPermissions(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), REQUEST_CODE) }AndroidManifest.xml中对应权限声明也要分版本uses-permission android:nameandroid.permission.READ_MEDIA_IMAGES / uses-permission android:nameandroid.permission.READ_EXTERNAL_STORAGE android:maxSdkVersion29 /6. 进阶技巧用JobIntentService实现“静默同步”让教务数据真正活起来6.1 为什么不用WorkManager直面Android后台限制的硬核解法WorkManager在Android 10后台执行受Battery Optimization和Doze Mode双重压制尤其教务系统同步需在凌晨2点抓取新课表但WorkManager可能延迟到次日中午才执行。JobIntentService是Google官方推荐的替代方案——它本质是JobScheduler的兼容封装能在后台保活且不受电池优化影响。// app/src/main/java/com/university/manager/service/SyncJobService.kt class SyncJobService : JobIntentService() { companion object { private const val JOB_ID 1001 fun enqueueWork(context: Context, work: Intent) { enqueueWork(context, SyncJobService::class.java, JOB_ID, work) } } override fun onHandleWork(intent: Intent) { // 此处执行同步逻辑运行在后台线程 val result JwxtScraper().syncSchedule() // 发送通知提醒用户 if (result.success) { showSyncSuccessNotification() } } }注册方式AndroidManifest.xmlservice android:name.service.SyncJobService android:permissionandroid.permission.BIND_JOB_SERVICE /6.2 定时触发用AlarmManager设置精确唤醒点JobIntentService需外部触发。我们在Application.onCreate()中设置每日凌晨2:15唤醒// app/src/main/java/com/university/manager/MyApplication.kt override fun onCreate() { super.onCreate() setDailySyncAlarm() } private fun setDailySyncAlarm() { val alarmManager getSystemService(Context.ALARM_SERVICE) as AlarmManager val intent Intent(this, SyncJobService::class.java) val pendingIntent PendingIntent.getService( this, 0, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT ) val calendar Calendar.getInstance().apply { set(Calendar.HOUR_OF_DAY, 2) set(Calendar.MINUTE, 15) set(Calendar.SECOND, 0) if (timeInMillis System.currentTimeMillis()) add(Calendar.DAY_OF_YEAR, 1) } alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent ) }关键参数setExactAndAllowWhileIdle绕过Doze Mode限制确保准时唤醒PendingIntent.FLAG_IMMUTABLEAndroid 12强制要求否则PendingIntent创建失败6.3 同步结果可视化用Android进度条反馈真实进度学生最焦虑“同步到底卡在哪”。我们弃用ProgressDialog已废弃改用ProgressBarTextView组合并实时显示当前步骤步骤进度值UI文案登录教务系统0-20%“正在登录教务系统…”抓取课表HTML20-50%“正在获取本学期课表…”解析HTML表格50-80%“正在分析课表结构…”写入本地数据库80-100%“正在保存到手机…”// app/src/main/java/com/university/manager/ui/schedule/SyncDialog.kt class SyncDialog(context: Context) : Dialog(context) { private lateinit var progressBar: ProgressBar private lateinit var statusText: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.dialog_sync) progressBar findViewById(R.id.progress_bar) statusText findViewById(R.id.status_text) // 绑定同步过程中的LiveData viewModel.syncProgress.observe(this) { progress - progressBar.progress progress.value statusText.text progress.message } } }血泪经验进度条数值不能简单线性分配。教务系统登录常耗时最长网络抖动而解析HTML反而快——所以login阶段占20%fetchHtml占30%parseHtml占20%saveToDb占30%这才是真实体验。最后说句实在话做这个系统80%时间花在和教务系统HTML的斗智斗勇上20%才是Android开发。我带学生做毕设时反复强调——别急着画UI先用Chrome开发者工具把教务页面的HTML结构扒干净存成.html文件本地调试。没有比本地静态HTML更快的迭代方式也没有比真实教务页面更难啃的骨头。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

从「准」到「实」再到「快」:中文图像生成的三次叙事转向意味着什么

从「准」到「实」再到「快」:中文图像生成的三次叙事转向意味着什么

从「准」到「实」再到「快」:中文图像生成的三次叙事转向意味着什么 【免费下载链接】Qwen-Image-2.1-Turbo 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen-Image-2.1-Turbo 过去一年,中文图像生成赛道的公共话题经历了三次肉眼可见的…

2026/10/11 20:39:25 阅读更多 →
Java后端接入SignalR:从HTTP到HTTPS的完整落地与避坑指南

Java后端接入SignalR:从HTTP到HTTPS的完整落地与避坑指南

简介:面向Java与Android开发者的SignalR实时通信客户端库源码包,用于在非浏览器环境中接入ASP.NET SignalR服务,实现服务器向客户端实时推送。ASP.NET SignalR是一套成熟的实时Web通信库,而这份Java客户端扩展了它的使用边界&…

2026/10/11 20:38:24 阅读更多 →
Hermes自动化测试技能(1):用Jest/Pytest/Mocha搭建可复用的测试骨架

Hermes自动化测试技能(1):用Jest/Pytest/Mocha搭建可复用的测试骨架

/* 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 20:38:24 阅读更多 →

最新新闻

新浪Level2接口SDK接入实战:授权、协议解析与避坑指南

新浪Level2接口SDK接入实战:授权、协议解析与避坑指南

简介:新浪Level2接口SDK是一份面向量化开发与行情分析人员的Java工程,用于对接新浪Level2全推行情,获取股票、基金等品种的深度交易数据。相比普通免费接口,Level2数据在速度与深度上更适合机构级策略,适合有一定Java基…

2026/10/11 22:50:35 阅读更多 →
一个 Key 调用所有模型:2026 四大聚合平台价格、生态与稳定性横评

一个 Key 调用所有模型:2026 四大聚合平台价格、生态与稳定性横评

大模型 API 聚合平台的核心价值一句话就能说清:一个 Key 接入多家大模型,统一计费与访问管理,把供应商切换成本降到最低。市面上的主流玩家分三类——国际商业聚合、国内商业聚合、自托管开源方案,路线不同,取舍也不同…

2026/10/11 22:50:35 阅读更多 →
HOP上游升级SOP:pnpm upstream:update一键同步rhwp并全链路验证的完整流程

HOP上游升级SOP:pnpm upstream:update一键同步rhwp并全链路验证的完整流程

【免费下载链接】hop 项目地址: https://gitcode.com/gh_mirrors/hop22/hop 点击查看 免费下载 HOP 是一款开源的 HWP/HWPX 文档编辑器,桌面外壳由 HOP 团队维护,而文档解析与渲染引擎来自上游项目 rhwp。如何安全地跟随上游版本前进&#x…

2026/10/11 22:50:35 阅读更多 →
Android游戏逆向重构实战:从植物大战僵尸源码2到可运行工程

Android游戏逆向重构实战:从植物大战僵尸源码2到可运行工程

简介:本资源为《植物大战僵尸》Android平台开源实现的完整工程源码,面向Android游戏开发初学者与进阶者,聚焦塔防类游戏架构设计、图形渲染与状态管理等核心实践。压缩包共173个文件,含20个Java源文件(涵盖GameScene、…

2026/10/11 22:50:35 阅读更多 →
基于线性回归的PM2.5预测系统Python源码实战解析

基于线性回归的PM2.5预测系统Python源码实战解析

简介:基于线性回归的PM2.5预测系统源码,是一套面向Python学习者、机器学习入门者及大气环境数据分析场景的小型完整项目。代码以单文件Python脚本承载数据读取、特征构造、模型训练与结果预测等关键流程,配套原始训练/测试CSV表、处理后的特征…

2026/10/11 22:50:35 阅读更多 →
PgQue 监控实战:5 个必须告警的队列健康指标 + 如何揪出卡住的消费者

PgQue 监控实战:5 个必须告警的队列健康指标 + 如何揪出卡住的消费者

【免费下载链接】PgQue PgQue – Zero-bloat Postgres queue built on top of on battle-proven Skypes PgQ. One SQL file to install, pg_cron to tick https://pgque.dev 项目地址: https://gitcode.com/gh_mirrors/pg/PgQue 点击查看 免费下载 PgQue 是一个零膨…

2026/10/11 22:49:35 阅读更多 →

日新闻

流感时间序列预测实战: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 阅读更多 →