游戏商店与拍卖系统架构设计:客户端服务端分工与安全防护实战
1. 商店与拍卖系统的整体设计思路拆解1.1 为什么商店和拍卖要放在一起讲很多刚接触游戏客户端开发的朋友会觉得商店和拍卖是两个完全不同的模块——一个是你跟系统做交易一个是你跟其他玩家做交易。但如果你真正动手写过这两套系统就会发现它们在底层的数据结构、UI交互逻辑、网络同步机制上有着惊人的相似度。我在实际项目中反复验证过把这两个系统放在同一个架构层面来设计能省下至少30%的重复代码量。先说说它们到底解决什么问题。商店系统解决的是“玩家如何用游戏内货币换取固定道具”的问题它的核心特征是卖方是系统商品列表、价格、库存全部由服务端配置决定。拍卖系统解决的是“玩家之间如何用游戏内货币互相交易”的问题它的核心特征是卖方是玩家商品来源、定价、成交时机都带有不确定性。这两者的共同点在于都需要处理商品展示、货币校验、交易确认、物品转移、交易记录这五个核心环节。区别在于拍卖多了一层竞价逻辑和过期机制。所以我的做法是先抽象出一个通用的“交易框架”然后商店和拍卖各自作为这个框架的一个特化实现。1.2 客户端在交易系统中到底负责什么这里有一个新手很容易踩的坑把太多逻辑放在客户端。我见过不少Demo项目客户端自己算价格、自己判断能不能买、自己扣钱加物品结果一联机就出各种同步问题。正确的做法是客户端只负责三件事展示、输入采集、结果呈现。所有涉及数值计算、状态变更、合法性校验的逻辑全部交给服务端。具体来说当你点击商店里一个商品时客户端做的事情是把商品ID和购买数量打包成一个请求发给服务端然后等待服务端返回结果。服务端会校验你的货币够不够、背包空间足不足、商品是否还在售然后执行扣款和发货最后把新的货币数量和物品信息推送给客户端。客户端拿到结果后刷新UI。整个流程里客户端不做任何“信任自己”的判断。拍卖系统也是同样的道理。你出价的时候客户端只是把你的出价金额发给服务端服务端来判断你的出价是否高于当前最高价、你的钱够不够冻结、拍卖是否还在有效期内。这种“客户端薄、服务端厚”的设计是保证交易系统不出安全事故的基础。1.3 数据结构的前瞻性设计我在设计交易系统时习惯先把数据结构定好因为这部分一旦上线就很难改。商店和拍卖共用的核心结构大概长这样ItemInfo { itemId: int // 道具唯一标识 count: int // 数量 bindType: int // 绑定类型0不绑定 1绑定 expireTime: long // 过期时间戳0表示永不过期 } TradeRecord { recordId: long // 交易流水号 tradeType: int // 1商店购买 2商店出售 3拍卖上架 4拍卖成交 itemInfo: ItemInfo price: long // 单价 totalPrice: long // 总价 timestamp: long // 交易时间 status: int // 状态进行中/已完成/已取消 }这个结构看起来简单但有几个细节值得注意。bindType字段决定了物品能否再次交易这是防止工作室刷金的关键。expireTime在商店里用于限时商品在拍卖里用于上架时限。TradeRecord里的recordId必须全局唯一方便后续查账和客服处理纠纷。注意道具ID的设计一定要留足扩展位。我见过用16位整数结果道具种类超过65535之后被迫重构的项目那叫一个痛苦。建议直接用32位整数甚至64位。2. 商店系统的核心细节与实操要点2.1 商店分类与商品配置表设计商店在游戏里通常不是只有一个而是分门别类普通商店、公会商店、竞技场商店、限时活动商店等等。每种商店的货币类型不同刷新机制也不同。我在配置这些商店时会用一张主表和一张商品表来管理。主表定义商店的基本属性字段名类型说明shopIdint商店唯一IDshopNamestring商店名称currencyTypeint货币类型1金币 2钻石 3公会币 4竞技币refreshTypeint刷新类型0不刷新 1每日 2每周 3手动refreshCostint手动刷新消耗maxRefreshCountint每日最大手动刷新次数商品表定义每个商店里卖什么字段名类型说明shopIdint所属商店slotIndexint货架位置itemIdint道具IDpriceint单价discountfloat折扣系数stockint库存-1表示无限dailyLimitint每日限购数量minLevelint最低购买等级这套配置表的好处是策划可以直接在Excel里填导出成JSON或二进制给客户端和服务端共用。客户端用这张表来渲染商品列表服务端用同一张表来校验购买请求的合法性。2.2 购买流程的完整实现购买流程看起来简单但要做到万无一失需要把每一步都考虑清楚。我通常把购买分成以下几个阶段第一阶段客户端预校验。玩家点击购买按钮后客户端先做一轮本地检查——等级够不够、货币够不够、背包空间足不足。这一步只是为了提升用户体验避免玩家点了半天才被服务端拒绝。但记住这只是“预校验”真正的校验在服务端。第二阶段发送购买请求。请求体里包含shopId、slotIndex、itemId、count这几个关键字段。这里有一个细节一定要带上itemId不能只传slotIndex。因为商店可能在两次请求之间刷新了货架上的商品变了只传位置会导致买错东西。第三阶段服务端校验与执行。服务端收到请求后按顺序做这些检查商店是否存在、货架位置是否合法、商品是否在售、玩家等级是否达标、限购次数是否用完、货币是否足够、背包是否有空间。全部通过后在一个事务里完成扣款、扣库存、加物品、写交易记录。第四阶段结果推送。服务端把购买结果和最新的货币数量、物品信息推送给客户端。客户端收到后刷新UI播放购买成功的特效。# 服务端购买处理伪代码 def handle_buy_request(player, shop_id, slot_index, item_id, count): shop get_shop_config(shop_id) if not shop: return error(商店不存在) slot get_shop_slot(shop_id, slot_index) if not slot or slot.item_id ! item_id: return error(商品已刷新请重新选择) if player.level slot.min_level: return error(等级不足) if slot.daily_limit 0: bought get_daily_bought_count(player, shop_id, slot_index) if bought count slot.daily_limit: return error(超过每日限购) total_price int(slot.price * slot.discount) * count if player.currency[shop.currency_type] total_price: return error(货币不足) if not has_bag_space(player, item_id, count): return error(背包空间不足) # 事务开始 deduct_currency(player, shop.currency_type, total_price) deduct_stock(shop_id, slot_index, count) add_item_to_bag(player, item_id, count) add_trade_record(player, TRADE_TYPE_SHOP_BUY, item_id, count, total_price) # 事务结束 return success(player.currency, player.bag)2.3 商店刷新的处理逻辑商店刷新分两种定时刷新和手动刷新。定时刷新由服务端在特定时间点触发比如每天凌晨5点重置所有每日商店。手动刷新则是玩家主动消耗货币来重置货架。这里有一个容易忽略的细节刷新时要保留限购计数。如果玩家今天已经买了某个商品3次刷新后这个商品的限购次数不应该重置否则玩家可以通过反复刷新来绕过限购。我的做法是把限购计数存在一个独立的daily_bought表里刷新只重置货架内容不动这个表。手动刷新的另一个坑是并发问题。如果玩家快速点击刷新按钮可能会同时发出多个刷新请求。服务端需要做防重处理比如给每个玩家加一个刷新锁或者用请求序列号来去重。实操心得商店刷新后客户端要清空当前的选中状态和购买数量输入框。我踩过一次坑玩家选了5个商品刷新后货架变了但数量还是5结果买错了东西客服那边收到一堆投诉。3. 拍卖系统的核心机制与实现细节3.1 拍卖与商店的本质差异拍卖系统比商店复杂得多因为它引入了时间维度和玩家博弈。商店里商品永远在那价格固定拍卖里商品有时限价格由市场决定。这就带来了几个商店没有的问题竞价冲突、拍卖过期、成交结算、流拍处理。我在设计拍卖系统时核心围绕三个状态来展开上架中、竞价中、已结束。上架中是拍卖刚创建还没有人出价竞价中是有人出价了当前最高价被刷新已结束是拍卖到期要么成交要么流拍。3.2 拍卖数据结构设计拍卖的数据结构比商店复杂因为要记录竞价历史。我通常用两张表一张拍卖主表一张竞价记录表。拍卖主表字段名类型说明auctionIdlong拍卖唯一IDsellerIdlong卖家IDitemInfoItemInfo拍卖物品startPricelong起拍价buyoutPricelong一口价0表示不支持currentPricelong当前最高价currentBidderIdlong当前最高出价者startTimelong开始时间endTimelong结束时间statusint状态1上架中 2竞价中 3已成交 4已流拍 5已取消竞价记录表字段名类型说明bidIdlong竞价唯一IDauctionIdlong所属拍卖bidderIdlong出价者bidPricelong出价金额bidTimelong出价时间这两张表配合使用可以完整还原一个拍卖的全过程。竞价记录表在客服处理纠纷时特别有用玩家说“我明明出价了怎么没买到”一查记录就清楚了。3.3 竞价流程的完整实现竞价流程比购买流程多了一个“冻结资金”的环节。当玩家出价时服务端不是直接扣钱而是把这笔钱冻结起来。如果后来被其他人超价了冻结解除钱退回。如果最终成交冻结的钱直接扣除给卖家。# 服务端竞价处理伪代码 def handle_bid_request(player, auction_id, bid_price): auction get_auction(auction_id) if not auction: return error(拍卖不存在) if auction.status not in [STATUS_LISTED, STATUS_BIDDING]: return error(拍卖已结束) if current_time() auction.end_time: return error(拍卖已过期) if player.id auction.seller_id: return error(不能给自己的拍卖出价) # 校验出价金额 min_bid auction.current_price get_min_bid_step(auction.current_price) if bid_price min_bid: return error(f出价不能低于{min_bid}) if bid_price player.currency[CURRENCY_GOLD]: return error(金币不足) # 解冻前一个出价者的资金 if auction.current_bidder_id 0: unfreeze_currency(auction.current_bidder_id, auction.current_price) send_mail(auction.current_bidder_id, 你已被超价, auction.current_price) # 冻结当前出价者的资金 freeze_currency(player.id, bid_price) # 更新拍卖状态 auction.current_price bid_price auction.current_bidder_id player.id auction.status STATUS_BIDDING save_auction(auction) # 记录竞价 add_bid_record(auction_id, player.id, bid_price) # 广播给所有关注者 broadcast_auction_update(auction_id, auction) return success()这里有一个关键设计最小加价幅度。不能让玩家每次只加1金币否则拍卖会变成拉锯战。我的做法是根据当前价格动态计算最小加价幅度当前价格区间最小加价幅度0 - 1000101001 - 100005010001 - 100000200100001以上1000这个阶梯式加价幅度既保证了拍卖的活跃度又避免了恶意压价。3.4 一口价与竞价并存的处理很多游戏的拍卖支持一口价就是玩家可以直接用某个价格买断不用等拍卖结束。这个功能实现起来有一个坑一口价和竞价的互斥处理。如果拍卖已经有人出价了一口价还能不能用我的做法是一口价始终可用但价格要高于当前最高价。当有人用一口价买断时服务端要解冻当前最高出价者的资金把物品给买断者然后把钱给卖家。整个过程要在一个事务里完成否则容易出现“钱扣了东西没给”或者“东西给了钱没扣”的问题。注意一口价买断后要给所有参与过竞价的玩家发邮件通知告诉他们拍卖已结束。我见过一个项目忘了发通知结果玩家一直在那等以为拍卖还在进行。4. 交易系统的安全防护与常见问题排查4.1 防刷与防欺诈的核心策略交易系统是游戏里最容易被攻击的模块之一。我总结了几条必须做的防护措施第一条所有交易请求必须带序列号。客户端每次发请求带一个自增的序列号服务端记录每个玩家最后处理的序列号重复的序列号直接丢弃。这能防止重放攻击。第二条关键操作加频率限制。比如购买操作同一个玩家每秒最多处理5次竞价操作每秒最多3次。超过限制的直接拒绝并记录日志。第三条交易金额做上限校验。单次交易金额不能超过某个阈值超过的要走二次确认。这个阈值可以根据游戏经济情况调整。第四条异常交易监控。服务端要记录所有交易日志并定期分析。比如某个账号在短时间内频繁与另一个账号交易或者交易价格明显偏离市场价就要触发告警。4.2 常见问题速查表问题现象可能原因排查思路解决方案购买后物品没到账事务未提交或回滚查交易记录表和背包表补发物品修复事务逻辑竞价后金币没冻结冻结逻辑未执行查冻结记录和玩家货币补冻结加日志监控拍卖结束后未结算定时任务未触发查定时任务日志手动结算修复定时任务商店刷新后限购重置刷新逻辑误删计数查daily_bought表恢复计数修复刷新逻辑一口价买断后原出价者未退款解冻逻辑遗漏查冻结记录补退款修复买断逻辑玩家能给自己出价校验逻辑缺失查竞价请求日志加校验封禁异常账号4.3 我踩过的几个坑第一个坑是货币类型混淆。早期项目里商店支持金币和钻石两种货币结果有一次更新配置表时把某个商品的价格货币类型填错了导致玩家用金币买到了本该用钻石买的道具。后来我加了一个校验配置表导出时自动检查货币类型和商品类型的匹配关系不匹配的直接报错。第二个坑是拍卖过期时间计算错误。我们用的是服务端时间戳但有一次服务器时区配置错了导致拍卖提前几小时结束。后来统一改成UTC时间戳并且在客户端显示时做本地时区转换。第三个坑是背包满时的处理。玩家购买时背包满了服务端返回错误但客户端没有正确处理导致玩家以为购买成功了。后来我在客户端加了背包空间预检查并且在服务端返回背包满的错误码时弹窗提示玩家清理背包。实操心得交易系统的日志一定要详细。每一笔交易都要记录谁、什么时候、买了什么、花了多少钱、交易前后的货币数量。这些日志在排查问题时能救命。我习惯把交易日志单独存一张表保留至少90天。5. 客户端UI交互的优化实践5.1 商店界面的布局与交互细节商店界面的核心是商品列表。我通常用滚动列表来展示每个商品项包含图标、名称、价格、限购信息、购买按钮。这里有几个交互细节值得注意商品图标要支持点击查看详情弹窗里显示道具的完整描述和属性。价格要区分货币类型金币用金色、钻石用蓝色让玩家一眼就能分辨。限购信息要实时更新买了一次之后剩余次数要立刻变化。购买数量选择器我习惯用滑动条加输入框的组合。滑动条方便快速选择输入框方便精确输入。但要注意输入框要限制最大值不能超过玩家能买得起的数量也不能超过限购剩余数量。5.2 拍卖界面的特殊处理拍卖界面比商店多了一个竞价输入区和倒计时显示。倒计时我用的是服务端时间同步客户端每秒更新一次显示。这里有一个细节倒计时最后30秒要变红并闪烁提醒玩家拍卖即将结束。竞价输入区要显示当前最高价和最小加价幅度玩家输入的价格如果低于最小加价按钮要置灰并提示。一口价按钮要单独放并且用醒目的颜色因为一口价通常价格较高需要玩家慎重操作。拍卖列表要支持排序和筛选按价格排序、按剩余时间排序、按物品类型筛选。这些功能看起来简单但能大幅提升玩家的使用体验。5.3 交易反馈与动效设计交易成功或失败时要有明确的反馈。成功时播放音效和特效失败时弹窗提示原因。我特别注重失败提示的文案不能只说“操作失败”要说清楚为什么失败——“金币不足还差500金币”比“货币不足”友好得多。拍卖被超价时要给玩家发推送通知。这个通知要包含哪个拍卖、当前最高价、被谁超了可以匿名。玩家点击通知可以直接跳转到那个拍卖的详情页。注意所有UI操作都要加防连点。玩家快速点击购买按钮时只处理第一次点击后续的忽略。我见过因为没做防连点玩家一次买了10个道具的案例虽然最后客服给退了但体验很差。6. 交易系统的扩展性与后续迭代6.1 跨服拍卖的实现思路当游戏开服多了之后跨服拍卖就成了刚需。实现跨服拍卖的核心是全局唯一的拍卖ID和跨服通信机制。我的做法是拍卖数据存在中心服务器各服客户端通过本服服务器代理访问中心服务器。竞价时本服服务器把请求转发给中心服务器中心服务器处理完后广播给所有服。跨服拍卖的难点在于延迟。不同服的玩家网络延迟不同可能导致竞价冲突。我的解决方案是在中心服务器用队列串行处理所有竞价请求保证先到先得。同时客户端显示倒计时时要用中心服务器的时间而不是本地时间。6.2 交易系统的数据分析交易系统产生的数据非常有价值。我通常会分析几个指标每日交易总量、平均交易价格、热门交易物品、异常交易账号。这些数据可以帮助策划调整经济系统也可以帮助运营发现工作室。比如如果发现某个物品的交易价格突然暴涨可能是有人在囤货。如果发现某个账号频繁与多个账号交易可能是工作室在转移资产。这些分析结果要定期同步给运营团队。6.3 后续可以扩展的方向交易系统还有很多可以扩展的方向。比如预购功能玩家可以设置一个心理价位当拍卖价格低于这个价位时自动出价。比如交易行推荐根据玩家的职业和等级推荐可能需要的物品。比如交易税对交易收取一定比例的手续费回收游戏内货币。我个人在实际操作中的体会是交易系统的核心不在于功能多复杂而在于稳定和安全。一个偶尔丢东西的拍卖行比一个功能简单但从不丢东西的拍卖行体验差得多。所以每次迭代我都会把回归测试的重点放在交易流程上确保每一笔交易都能正确完成。

相关新闻

WPF排序真相:ICollectionView才是ObservableCollection的正确打开方式

WPF排序真相:ICollectionView才是ObservableCollection的正确打开方式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 1:29:39 阅读更多 →
Qt桌面端快捷键系统设计:命令ID解耦、冲突检测与持久化

Qt桌面端快捷键系统设计:命令ID解耦、冲突检测与持久化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 1:29:39 阅读更多 →
双串联电池组主动均衡方案:MP2642GR-Z与PIC18F86J16协同控制

双串联电池组主动均衡方案:MP2642GR-Z与PIC18F86J16协同控制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 1:29:39 阅读更多 →

最新新闻

光储充换电站分时电价双层优化模型及Matlab实现

光储充换电站分时电价双层优化模型及Matlab实现

光储充换电站和分时电价互动这两件事,放在一起研究的论文和代码我见过不少,但真正能把“用户充电负荷”这个变量建模得当、又能在Matlab里跑通寻优的,确实不算多。这个标题对应的方向,简单说就是:站在运营商的视角&…

2026/10/16 4:47:24 阅读更多 →
Kafka与ZooKeeper的关系及bootstrap.servers配置详解:从旧架构到KRaft模式

Kafka与ZooKeeper的关系及bootstrap.servers配置详解:从旧架构到KRaft模式

1. 先讲清楚Kafka和ZooKeeper到底什么关系很多刚接触Kafka的人都会被一件事搞糊涂:Kafka不是号称"去ZooKeeper化"了吗?为什么配置里还有一个KAFKA_ZOOKEEPER_CONNECT?更离谱的是,生产者和消费者的配置里写的却是bootstr…

2026/10/16 4:47:24 阅读更多 →
公众号+题库小程序:从内容池到变现闭环的实操指南

公众号+题库小程序:从内容池到变现闭环的实操指南

“公众号是内容池,题库小程序是印钞机”,这句话我第一次听到时,是在和一个做考证培训的同行聊天。当时觉得夸张,但自己真把一个公众号和一个题库小程序跑起来之后,才发现这话糙理不糙。公众号负责沉淀内容和信任&#…

2026/10/16 4:47:24 阅读更多 →
把Claude API变成工程流程:本地自动化代码助手实践

把Claude API变成工程流程:本地自动化代码助手实践

如果你的工作流还停留在把代码复制到聊天对话框、再把结果复制回编辑器,那这个标题值得你仔细看完。我第一次在代码仓库里看到free-claude-code这个名字时,以为又是一个套壳的“AI 写代码”玩具。可把它拆开跑了一遍才发现,真正值钱的不是那几…

2026/10/16 4:47:24 阅读更多 →
Deepin安装oh-my-zsh完整指南:避坑与配置详解

Deepin安装oh-my-zsh完整指南:避坑与配置详解

说实话,在Deepin上安装oh-my-zsh这件事,我前前后后折腾过三次,这次是第四次,才算是把整个流程彻底捋顺了。Deepin本身是个很省心的Linux发行版,开箱即用,但对经常在终端里干活的人来说,默认的ba…

2026/10/16 4:47:24 阅读更多 →
酉空间核心解析:内积、埃尔米特矩阵与酉对角化

酉空间核心解析:内积、埃尔米特矩阵与酉对角化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 4:46:24 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

2026/10/15 19:41:51 阅读更多 →
影刀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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →