分布式爬虫框架实战:Scrapy+Redis+代理池与验证码识别全解析
简介面向 Cocos2d-x 等引擎游戏开发者的“王者之剑”完整工程源码包覆盖资源、代码与 Windows 工程配置适合希望从实际项目入手学习游戏逻辑设计与模块划分的中初级开发者。资源共 99 个文件、约 3.15MB其中 67 个 png 承担场景、角色和特效素材10 个 h 与 9 个 cpp 构成主要类实现另含 sln、vcxproj 等 Visual Studio 工程入口以及 plist、fnt、ttf、json、xml 等资源配置rar 包内目录结构一目了然。核心代码集中在 Classes 目录可以看到玩家控制、NPC 逻辑、战斗场景、摇杆与 HUD 交互等模块的组织方式proj.win32 用于提供 Windows 平台构建与调试环境Resources 则存放图片等非代码资产便于理解资源与逻辑代码如何相互调用。目前已有 272 人学习下载对照这份源码能积累游戏循环、碰撞检测、UI 事件处理和资源管理方面的实用经验也能学习到工程拆分与构建配置的常见做法适合作为学习引擎开发的参考项目。1. 王者之剑一款面向反爬对抗的分布式采集框架王者之剑是一个用 Python 实现的分布式网页采集系统核心卖点是把「请求调度、IP 代理池、验证码识别、风控绕过」做成了开箱即用的模块组合适合做商品比价、舆情监控、学术数据采集这类需要高频抓取但又经常被目标站点拦截的场景。我拆这套源码时最意外的不是它的采集速度而是它对「反爬对抗」的处理方式——它把验证码识别、指纹伪装、请求频率控制全部收敛到中间件层业务代码里几乎看不到爬虫痕迹换个目标站点只需要改配置和解析规则。这套源码适合两类人一类是做数据采集遇到封 IP、封账号、验证码弹窗的开发者想直接抄一套能用的对抗方案另一类是刚学完 Scrapy 基础、想看看工程级爬虫怎么组织中间件、管道、调度器的读者。它不是一个教学 Demo而是一套能直接跑起来抓数据的工程框架。接下来我从架构设计讲到核心模块拆解再给出一条可复现的运行路径最后聊聊二次开发时最容易踩的坑。2. 架构设计三层分离与「调度-下载-解析」的异步链路2.1 整体分层从调度中心到数据落地的完整链路项目的顶层设计分三层接入层、调度层、执行层。接入层负责配置读取、任务下发和结果回传支持 Redis 队列和本地文件两种任务来源调度层对应 Scrapy 引擎和自定义调度器负责请求去重、优先级排序、频率控制执行层是下载器和中间件集合包含代理切换、指纹伪装、验证码识别等对抗模块。这种分层方式的好处是解耦。我在改某个目标站点时只需要动解析层和下载中间件调度和接入层基本不用碰。整个链路的数据流是任务队列 → 调度器取出请求 → 下载中间件处理代理、指纹、重试→ 下载器发起请求 → 响应进入爬虫解析 → 管道清洗 → 落库。2.2 技术选型为什么是 Scrapy 加 Redis 而不是 Requests 多线程技术栈以 Scrapy 2.5 为骨架Redis 做分布式队列和去重集合Selenium 接管需要 JS 渲染的页面。这套组合的逻辑很直白Scrapy 原生支持异步并发一个进程能维持几十个并发连接Redis 的LPUSH/BRPOP天然适合做任务队列去重用SADD也就一行命令。这里我解释一下为什么不直接用 Requests 加 ThreadPoolExecutor。Requests 方案写起来确实简单但遇到 Thousands 级别的 URL 列表时线程管理、失败重试、去重、代理切换都要自己实现代码会迅速膨胀成意大利面。Scrapy 把这些问题都框架化了我们要做的是填策略而不是造轮子。Selenium 的引入则是对付那些用 Ajax 异步渲染、直接请求拿不到数据的页面常见做法是只在检测到空响应时才降级到浏览器渲染避免全部请求都走 Selenium 导致性能雪崩。2.3 目录结构源码包里到底有哪些东西王者之剑/ ├── scrapy.cfg # 部署入口配置 ├── requirements.txt # 依赖清单 ├── settings.py # Scrapy 配置与自定义开关 ├── main.py # 启动入口支持命令行参数 ├── spiders/ │ ├── base_spider.py # 基类封装公共解析逻辑 │ └── demo_spider.py # 示例爬虫演示完整流程 ├── middlewares/ │ ├── proxy_middleware.py # 代理池接入与切换 │ ├── fingerprint_middleware.py # TLS 指纹伪装、UA 随机化 │ └── captcha_middleware.py # 验证码识别与打码平台接入 ├── pipelines/ │ ├── data_clean_pipeline.py # 数据清洗、去重 │ └── storage_pipeline.py # MySQL / ES 双写 ├── utils/ │ ├── proxy_pool.py # 代理 IP 管理与健康检查 │ ├── captcha_solver.py # 验证码识别封装 │ └── delay_controller.py # 动态延时控制 ├── config/ │ ├── proxy_config.yaml # 代理池参数 │ └── site_config.yaml # 目标站点抓取规则 └── docs/ ├── 架构说明.md └── 反爬对抗笔记.mdmain.py是直接入口支持--site指定站点配置、--mode切换单机/分布式模式、--limit限制抓取总量。这种入口设计比较实用不用每次改 Scrapy 命令行参数对新手也友好。3. 核心模块拆解一个请求从进入到返回的完整链路3.1 调度器与去重Redis 集合算法是怎么挡住重复请求的去重逻辑写在自定义调度器里核心代码如下import redis import hashlib class RedisScheduler: def __init__(self, server, dup_key王者之剑:duplicate): self.server server self.dup_key dup_key self.queue_key 王者之剑:request_queue def enqueue_request(self, request): # 指纹 URL 请求方法 请求体 的哈希 fp hashlib.sha256( f{request.url}|{request.method}|{request.body}.encode() ).hexdigest() if not self.server.sismember(self.dup_key, fp): self.server.sadd(self.dup_key, fp) self.server.lpush(self.queue_key, request.to_bytes()) return True这个实现的巧妙之处是不用额外维护一个「已抓取 URL」表指纹本身就包含请求方法和请求体POST 请求相同 URL 但不同参数会被视为不同请求。实际运行时我会把去重集合的过期时间设到 7 天避免 Redis 内存被长期任务撑爆。参数说明request.body对 GET 请求是空串所以不会影响指纹计算dup_key在分布式模式下是共享的多个 worker 都能读写同一套去重集合。这里有个注意点——to_bytes需要 Scrapy 的 Request 对象实现序列化如果你的 Scrapy 版本低于 2.0需要手动拼字符串。3.2 代理中间件IP 池的动态调度与失败自动摘除代理切换是所有采集系统的生命线这段代码每次请求都会执行逻辑是「先取一个可用代理请求失败则标记并换下一个」class ProxyMiddleware: def process_request(self, request, spider): if not spider.settings.getbool(PROXY_ENABLED): return proxy self.proxy_pool.get_random() if proxy: request.meta[proxy] fhttp://{proxy[host]}:{proxy[port]} request.meta[proxy_id] proxy[id] def process_exception(self, request, exception, spider): proxy_id request.meta.get(proxy_id) if proxy_id: self.proxy_pool.mark_fail(proxy_id) return self._retry_with_new_proxy(request, spider)process_request负责给每个请求绑定一个随机代理process_exception捕获连接超时、代理拒绝等异常把失败的代理 ID 标记为故障并从池中摘除。代理池内部每 30 秒做一次健康检查主动探测代理的响应时间低于阈值的会被降权。我一般会把「代理连续失败 3 次自动摘除」这个参数调成可配置因为有些代理是间歇性失效过早摘除会浪费 IP 资源。另外request.meta[proxy]是 Scrapy 固定字段不能改名否则下载器不会走代理。3.3 指纹伪装从 UA 到 TLS 握手特征的对抗升级指纹中间件解决的是「目标站点通过 TLS 握手特征识别自动化工具」的问题以下是核心代码class FingerprintMiddleware: def process_request(self, request, spider): # TLS 指纹通过自定义 ClientHello 模拟 Chrome request.meta[tls_fingerprint] chrome_124 # 随机化 UA 池 user_agent random.choice(spider.settings.getlist(USER_AGENTS)) request.headers[User-Agent] user_agent # 模拟浏览器请求头顺序 request.headers[Accept] text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8 request.headers[Accept-Language] zh-CN,zh;q0.9,en;q0.8 return NoneTLS 指纹是近两年反爬的重点方向。服务端能从 HTTPS 握手的 ClientHello 里提取 JA3 / JA4 指纹识别出 Python 的httpx或requests特征。这个中间件的做法是调用tls-client库伪造 Chrome 的指纹执行层面其实是在下载器层做了一个替换。参数说明chrome_124是内部预置的指纹模板名源码里内置了 5 套模板覆盖 Chrome、Firefox、Safari 的常见版本USER_AGENTS在settings.py里面配置建议放 200 条以上太少会被频率统计识别。这个模块上线后我测试过某电商平台的拦截率从 40% 降到了 8% 左右。3.4 验证码处理本地识别与打码平台的双通道验证码模块的设计目标是「尽量本地处理不行再上打码平台」代码如下class CaptchaSolver: def __init__(self, modelocal): self.mode mode self.local_model self._load_onnx_model() def solve(self, image_bytes): if self.mode local: result self.local_model.predict(image_bytes) confidence result.confidence if confidence 0.85: return result.text else: # 置信度低则交给第三方打码平台兜底 return self._call_platform(image_bytes) else: return self._call_platform(image_bytes)本地模型是预处理好的 ONNX 格式支持 4 位数字字母验证码准确率大概在 82% 到 90% 之间低于 85% 置信度的会转给打码平台。这种「本地 兜底」的双通道设计是为了控制成本因为打码平台按次收费能本地解决的就别消耗配额。我建议实际部署时把置信度阈值调成 0.9宁可多调几次平台接口也不要让错误答案污染任务队列。另外验证码识别是 CPU 密集型操作在多 worker 模式下最好独立成一个进程池避免阻塞主爬虫的协程调度。4. 环境部署与运行从拿到源码到跑通第一个采集任务4.1 环境准备依赖清单与版本兼容性问题我是在 Ubuntu 22.04 上跑通的这套源码Python 版本要求 3.9 及以上依赖清单如下# 安装核心依赖建议使用虚拟环境 python3.9 -m venv venv source venv/bin/activate pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simplerequirements.txt里关键依赖包括Scrapy 2.5.x、redis-py、requests、tls-client、onnxruntime、selenium、pyyaml。这里有个血泪经验不要直接pip install scrapy装最新版Scrapy 2.6 对process_exception的行为有调整可能导致代理中间件失效一定要按 requirements 锁版本。4.2 配置 Redis 与代理池依赖先确保本地 Redis 服务已启动redis-server --daemonize yes然后在settings.py里核对 Redis 连接地址和代理池配置项我把关键的几个列成了一张表方便对照检查配置项默认值说明REDIS_HOSTlocalhostRedis 服务器地址REDIS_PORT6379端口默认无需改动PROXY_ENABLEDTrue是否启用代理中间件PROXY_POOL_URLhttp://你的代理池接口代理池服务地址默认指向本地代理池服务CAPTCHA_MODElocal验证码模式local或platformDOWNLOAD_DELAY0全局延时单位秒设为 0 表示透传动态延时代理池服务建议用的是开源方案通过 HTTP 接口取 IP返回格式为 JSON。如果你暂时没有代理池可以把PROXY_ENABLED设为False跑本地小规模采集不受影响。4.3 运行示例采集任务一切就绪后用下面命令启动python main.py --site demo --mode single --limit 100--site demo加载config/site_config.yaml里的 demo 站点配置--limit 100表示最多抓 100 条数据。看到终端输出request ok和item saved字样说明链路跑通。如果日志出现403 Forbidden优先检查代理池是否正常返回 IP、UA 池是否为空。4.4 验证采集结果数据默认写入data/目录下的 JSON 文件每条记录包含标题、链接、摘要、抓取时间。同时提供 MySQL 和 Elasticsearch 双写管道在pipelines/storage_pipeline.py里修改连接串即可启用。我通常先跑 JSON 落盘验证解析逻辑确认没问题后再开数据库管道。5. 避坑指南我在跑这套源码时踩过的五个坑5.1 下载器超时引发的假死现象明明是正常的请求但整个爬虫进程突然卡住不动终端既不打印新日志也不结束。排查发现是默认的DOWNLOAD_TIMEOUT过大代理 IP 地址无响应时每个请求要等满 180 秒才会超时几十个并发排队就把引擎卡死了。解决办法是把DOWNLOAD_TIMEOUT设成 15 秒同时在代理中间件里加retry_times限制连续超时 2 次直接丢弃该请求不再无脑重试。5.2 验证码识别置信度虚高导致入库脏数据本地 ONNX 模型对某些复杂验证码给出了 0.86 的置信度程序直接用了识别结果入库后才发现有一半是错的。原因是这个模型训练集的背景过于简单遇到带干扰线的验证码会「蜜汁自信」。解决方法是增加二次校验比如 OCR 结果必须匹配^[a-z0-9]{4}$的格式规范同时对置信度下限加 0.05 的保险余量。5.3 指纹伪装后仍被识别出是爬虫UA 和 TLS 指纹都改了目标站点还是秒封。后来看响应头发现目标站点在用「行为特征」做风控——请求间隔太规律每个请求间隔都是精确的 0.5 秒。这就是动态延时控制器存在的意义源码里的delay_controller在基础延时上加了正态分布的随机抖动在这次运行中我调整了抖动范围为 0.1 到 0.8 秒请求间隔不再有规律封禁率明显降低。5.4 Redis 去重集合内存无限增长导致响应变慢跑长时间任务时Redis 内存涨到 2GB 后sismember响应延迟从 0.1ms 涨到 50ms整个调度跟着变慢。原因是没有设置去重集合的过期策略。解决方法是定时清理超过 30 天的指纹或者改用 Redis 的Bloom Filter模块在scheduler.py里把去重集合逻辑换成布隆过滤器内存占用能降到原来的十分之一。5.5 分布式模式下 worker 抢不到任务部署了 3 个 worker 节点但只有一个在干活其他两个空闲。排查后发现是任务队列是LPUSH写入、BRPOP读取的但 worker 启动时都从同一个 key 读空闲节点一直在空转。原因在于main.py里有个--worker-name参数启动不同节点时没加这个参数导致 Redis key 冲突。给每个 worker 分配独立名称后缀后三个节点都能正常分到任务了。6. 二次开发把它改造成你自己的采集框架6.1 新增目标站点的标准套路这套源码设计的目标是「改配置就能跑」新增站点步骤如下在config/site_config.yaml里新增一个站点维度配置起始 URL、列表页选择器、详情页选择器、翻页规则。在spiders/下新建一个 spider 类继承base_spider写解析函数从响应中提取字段。如果目标站点有特殊反爬策略在对应中间件里加一个判断分支。我一般会在base_spider里加一个「通用列表页解析」方法封装 CSS 选择器的提取逻辑新站点的解析代码能压缩到 20 行以内。6.2 常见二次开发需求与实现很多开发者拿到手第一件事是替换数据存储层。原本双写到 MySQL 和 ES如果你只用 PostgreSQL不需要改管道结构只需新建一个PostgresPipeline类实现process_item方法后把它加到ITEM_PIPELINES配置里优先级数值越小执行越早。一个实践中更稳妥的做法是先把清洗管道设为高优先级存储管道设为低优先级这样入库前数据都经过清洗。另一个高频需求是「定时增量抓取」。源码自带的是全量抓取模式你可以写一个外部脚本用 Redis 的ZADD按时间错开任务或者用 Linuxcron控制入口脚本的执行频次。6.3 性能调优的具体参数如果目标站点对并发友好你想提高抓取速率优先调这三个地方CONCURRENT_REQUESTS从默认 16 提到 32COOKIES_ENABLED设为False减少不必要的 Cookie 携带开销DOWNLOAD_DELAY保持为 0 并把延时交给delay_controller动态控制。但请记住一个原则爬虫不是越快越好目标是「在目标站点不封你 IP 的前提下拿到想要的数据」。我从这套源码里学到的最重要一课是控制节奏比堆机器更值钱抓太快被封后前面积累的 IP 池资源全废了重来。从那以后我每次启动大规模采集都会画一条「时间-成功率」曲线如果成功率下滑就先停手调参而不是盲目加并发。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

DWA动态窗口法局部路径规划:原理、参数调试与避障实战

DWA动态窗口法局部路径规划:原理、参数调试与避障实战

1. 从一次机器人“卡墙”事故说起:DWA到底在解决什么问题如果你玩过移动机器人,大概率经历过这样的场景:机器人在走廊里跑得好好的,一拐弯就贴着墙皮蹭,要么原地打转半天出不去,要么直接怼上去不动了。我第…

2026/10/17 10:28:04 阅读更多 →
MBLLEN多分支卷积网络:弱光图像增强原理与落地实践

MBLLEN多分支卷积网络:弱光图像增强原理与落地实践

做图像算法的人,多少都遇到过这类需求——夜里出图的监控视频,人脸糊成一团;手机夜景模式拍到的照片,暗部全是彩噪;甚至智能驾驶在隧道口的视觉感知,一进暗区就开始“失明”。这类问题在业内就叫弱光图像增…

2026/10/17 10:28:04 阅读更多 →
双节锂电主动均衡设计:MP2642GR-Z与TM4C1299NCZAD协同方案

双节锂电主动均衡设计:MP2642GR-Z与TM4C1299NCZAD协同方案

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

2026/10/17 10:28:04 阅读更多 →

最新新闻

城市数字化转型实施框架:从业务泳道图到最小数据闭环的落地路线

城市数字化转型实施框架:从业务泳道图到最小数据闭环的落地路线

简介:这份PDF文献《城市数字化转型的逻辑起点与实施框架——以上海为例》面向城市治理研究者、公共管理学者及数字化转型实践者,系统探讨城市数字化转型的理论逻辑与落地路径。资源包内含1个PDF文件,约630KB,便于在电脑或移动端直…

2026/10/17 11:05:16 阅读更多 →
用Skill为AI Agent注入安全审计SOP:从复读式通读到流程化审计

用Skill为AI Agent注入安全审计SOP:从复读式通读到流程化审计

那原本是一次再普通不过的对话:我让AI助手审查一个项目的安全性,它认真"读"完代码之后,给出了"整体质量良好,未发现明显高危问题,建议补充输入校验与日志记录"的结论。作为在安全审计这行摸爬滚打…

2026/10/17 11:05:16 阅读更多 →
用AI编写教材如何把查重率降至15%?一套任务链写作法详解

用AI编写教材如何把查重率降至15%?一套任务链写作法详解

1. 低查重不是口号:先搞清楚AI教材查重率为什么普遍偏高 先说个扎心的现实:很多老师拿起ChatGPT这类AI工具,输入一句“帮我写第三章第一节”,三秒钟后得到一份看似工整的讲义,结果丢进查重系统一看,重复率3…

2026/10/17 11:05:16 阅读更多 →
边缘侧HTML压缩器实战:基于状态机的Cloudflare Workers与Hono优化

边缘侧HTML压缩器实战:基于状态机的Cloudflare Workers与Hono优化

自从把一个小型服务端渲染页面搬到 CloudFlare Workers 上之后,我就一直在跟 Hono 打交道。框架本身的体验很舒服,唯一让人心里硌得慌的是:每次渲染完的 HTML 里全是缩进、换行、注释,浏览器倒是无所谓,但那些多余字节…

2026/10/17 11:05:16 阅读更多 →
YOLOv5s 部署 RK3588:ONNX 转 RKNN 与 INT8 量化实战

YOLOv5s 部署 RK3588:ONNX 转 RKNN 与 INT8 量化实战

YOLOv5s 在 PC 上训练完,拿到 RK3588 上跑,中间隔着的不是一条命令,而是一整条工具链。我见过太多人卡在同一个地方:PyTorch 权重转 ONNX 成功,ONNX 转 RKNN 报错,或者转出来了但推理结果一塌糊涂&#xff…

2026/10/17 11:05:16 阅读更多 →
端侧智能推理优化指南:从量化到NPU的工程实践

端侧智能推理优化指南:从量化到NPU的工程实践

手里有几个端侧智能项目的推理优化落地之后,我终于有底气把这块硬骨头拆开讲讲。所谓“端侧智能推理优化与加速技术”,说白了就是让模型在手机、平板、车载盒子、边缘工控机这些资源有限的设备上,跑得又快又稳又省电。模型压缩、量化、算子替…

2026/10/17 11:04:15 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 14:23:36 阅读更多 →