爬虫IP频繁被封?从代理IP选型到行为优化的完整破局指南
1. 项目概述当爬虫IP频繁被封我们到底在对抗什么做爬虫开发的朋友十有八九都经历过这个令人头疼的瞬间脚本运行得好好的突然之间请求全部石沉大海返回的不是403就是429或者干脆连接超时。屏幕上跳出的“Connection refused”或“Your request has been blocked”提示就像一盆冷水浇在头上。这背后就是IP地址被目标网站识别并封禁了。这不仅仅是技术问题更像是一场攻防博弈。网站运营者为了保护服务器资源、防止数据被恶意抓取、维护商业利益部署了各式各样的反爬虫策略而IP封禁是其中最直接、最有效的手段之一。那么当你的爬虫IP经常被封究竟该如何破局这绝不仅仅是“换一个IP”那么简单。你需要理解封禁背后的逻辑从单一的IP更换升级为一套涵盖策略、技术、工具和行为的综合解决方案。无论是刚入门的新手还是被复杂反爬机制折磨的资深开发者这篇文章将为你拆解从原理到实战的完整应对思路。我们会探讨为什么IP会被封如何选择和使用代理IP如何优化你的爬虫行为以降低“存在感”以及当封禁发生时如何快速诊断和恢复。我们的目标不是教你“黑”进某个网站而是让你在合规、尊重对方服务器的前提下更高效、更稳定地完成数据采集任务。2. 核心对抗策略从“硬闯”到“智取”的思维转变面对IP封禁初级开发者最容易陷入的误区就是“暴力尝试”封了一个IP就换另一个如此循环直到所有IP池耗尽或被全面封禁。这种“硬闯”模式成本高、效率低且不可持续。真正的解决之道在于“智取”即通过一系列策略和技术手段让你的爬虫行为尽可能地模拟正常人类用户从而绕过或降低触发反爬机制的风险。2.1 理解反爬虫的“雷达”系统网站如何发现并封禁一个爬虫IP我们可以将其想象成一个多层次的雷达监测系统频率与行为指纹雷达这是最基础的检测层。如果一个IP在极短时间内例如每秒数十次发起大量请求访问路径高度规律如顺序爬取商品ID或者请求头信息缺失、异常如没有User-Agent或使用明显是爬虫库的默认UA这个IP会立刻被标记为“可疑”。验证挑战雷达对于可疑流量网站会抛出验证码如CAPTCHA、要求登录态Cookie/Session或进行JavaScript挑战。爬虫如果无法通过这些交互式验证其后续请求就会被拦截。IP信誉与关联图谱雷达高级反爬系统会维护IP信誉库。如果一个IP历史上有过恶意行为如发起攻击、频繁爬取或者同一时间段内大量不同IP但行为模式高度相似的请求指向同一个目标这可能是一个代理IP池系统可能会将这些IP关联起来进行批量封禁或限速。深度行为分析雷达通过分析鼠标移动轨迹、点击间隔、页面停留时间、滚动行为等判断访问者是否为真实浏览器。这对于仅使用requests库的简单爬虫来说是致命的。理解了这些“雷达”的工作原理我们的应对策略就有了明确的方向降低频率、模拟真人、分散风险、处理挑战。2.2 构建你的“生存法则”四大核心原则基于上述分析我们可以总结出爬虫对抗IP封禁的四大核心原则低调原则控制请求频率增加随机延迟避免在短时间内对同一目标造成过大压力。拟人原则完善HTTP请求头模拟主流浏览器的行为在有需要时使用无头浏览器如Selenium、Playwright执行JavaScript并模拟交互。分散原则使用代理IP池将请求流量分散到多个不同的出口IP上避免单点被封导致任务中断。容错原则在代码中实现完善的异常处理、重试机制和IP失效自动切换逻辑确保爬虫在遇到封禁时能优雅降级或自动恢复。3. 技术方案深度解析代理IP的选型、使用与维护使用代理IP是解决IP封禁最直接、最核心的技术手段。但“代理”二字背后门道极深。3.1 代理IP的类型与选型考量市面上代理IP主要分为以下几类各有优劣代理类型工作原理优点缺点适用场景数据中心代理IP来自云服务商如AWS、GCP、阿里云的数据中心。速度快、稳定、成本低、IP数量庞大。IP段相对集中容易被网站识别并批量封禁因为IP的WHOIS信息显示为数据中心。对速度要求高、目标网站反爬不严、需要大量IP进行分布式爬取。住宅代理IP来自真实家庭宽带用户通过SDK或合作集成。IP真实性高难以被识别为代理绕过能力强。速度相对较慢稳定性受终端用户网络影响成本非常高。爬取反爬极其严格的大型网站如社交媒体、电商平台。移动代理IP来自蜂窝移动网络3G/4G/5G。真实性最高行为最像真实手机用户绕过能力极强。速度慢、延迟高、成本极其昂贵、IP资源稀缺。针对移动端APP或对移动端有特殊校验的网站。动态代理每次请求或每隔一段时间自动更换出口IP。无需手动管理IP池封禁风险被动态分散。通常速度较慢且某些需要保持会话Session的请求可能中断。适合无需保持状态的简单页面抓取。选型心得 对于大多数爬虫项目我建议采用“数据中心代理为主住宅代理为辅”的混合策略。日常爬取使用高性价比的数据中心代理池当遇到顽固封禁时切换至少量住宅代理进行关键请求。切勿盲目追求“最好”而要根据目标网站的反爬强度、自身预算和速度要求来平衡。3.2 代理IP的使用技巧与避坑指南仅仅购买了代理服务还不够如何使用同样关键。1. 请求头Headers的精细化设置这是很多新手忽略的细节。使用代理时务必设置完善的请求头特别是User-Agent。最好能维护一个列表随机轮换使用主流的浏览器UA字符串。import requests import random # 一个简单的User-Agent池 USER_AGENTS [ Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15, Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 ] proxies { http: http://your-proxy-ip:port, https: http://your-proxy-ip:port, # 注意很多代理服务器的https协议也走http端口 } headers { User-Agent: random.choice(USER_AGENTS), Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,*/*;q0.8, Accept-Language: zh-CN,zh;q0.9,en;q0.8, Accept-Encoding: gzip, deflate, # 注意requests自动处理解码这里声明即可不要手动解码 Connection: keep-alive, } response requests.get(https://target-site.com, headersheaders, proxiesproxies, timeout10)注意Accept-Encoding字段声明即可requests库会自动处理gzip/deflate压缩的响应体。如果你手动设置了Accept-Encoding: gzip并自己解压反而可能出错。2. 会话Session保持与代理的兼容性使用requests.Session()可以自动管理Cookies提高效率。但需要注意Session对象的代理设置需要在每次请求前检查或绑定。session requests.Session() # 为整个session设置代理如果代理IP固定 # session.proxies.update(proxies) # 更常见的做法使用动态IP池为每次请求单独指定代理 def make_request_with_proxy(url, proxy_ip): proxy {http: fhttp://{proxy_ip}, https: fhttp://{proxy_ip}} try: # 使用session保持cookie但每次请求更换代理 resp session.get(url, proxiesproxy, headersheaders, timeout8) resp.raise_for_status() # 检查HTTP状态码是否为200 return resp except requests.exceptions.RequestException as e: print(f请求失败代理 {proxy_ip} 可能失效: {e}) # 标记该代理失效从池中移除 return None3. 代理IP的质量检测与维护不是所有拿到的代理IP都是可用的。必须建立一个检测机制。连通性检测快速访问一个稳定的网站如http://httpbin.org/ip检查是否能返回IP且延迟可接受。匿名度检测访问http://httpbin.org/headers查看返回的头部信息。如果其中包含Via、X-Forwarded-For等明确标识代理的字段则为透明代理或匿名代理高匿代理不应包含这些。稳定性与速度监控定期测试代理的响应时间和成功率将慢速或频繁失败的IP暂时隔离或剔除。避坑指南避免代理服务器成为瓶颈不要将所有请求都集中通过一个代理服务器网关。如果代理服务商提供了API来获取IP:Port列表最好直接使用这些终端节点。注意并发连接数即使使用IP池向同一个目标网站发起过高并发请求仍可能被从行为模式上识别。需要结合全局速率限制。小心免费代理网络上免费的代理IP绝大多数不稳定、不安全可能窃取数据、速度慢且很可能已被各大网站拉黑。仅用于测试学习生产环境务必使用付费的可靠服务。4. 爬虫行为优化降低被识别概率的实战技巧除了更换IP优化爬虫本身的行为是成本更低、效果更持久的解决方案。4.1 请求节奏控制模仿人类浏览人类不会以精确的毫秒间隔点击链接。引入随机延迟是必须的。import time import random def random_delay(base2, variance1.5): 生成一个随机的延迟时间 delay base random.uniform(-variance, variance) delay max(0.5, delay) # 确保延迟不为负或过小 time.sleep(delay) # 在关键请求之间调用 for page in range(1, 101): response make_request_with_proxy(fhttps://site.com/page/{page}, current_proxy) parse(response) random_delay(3, 2) # 平均延迟3秒上下浮动2秒更高级的做法是参考“泊松分布”来模拟真实用户的访问间隔但这对于大多数场景简单的随机延迟已经足够。4.2 请求头与指纹的深度伪装现代网站通过JavaScript收集大量浏览器指纹信息Canvas, WebGL, AudioContext, Fonts等。对于使用无头浏览器的爬虫需要额外注意使用undetected-chromedriver或selenium-stealth这些工具可以修改WebDriver的属性隐藏自动化特征。设置完整的视窗大小和语言driver.set_window_size(1920, 1080)。覆盖navigator.webdriver属性在早期版本的Selenium中这个属性会暴露自动化。现在较新版本的Chrome Driver已默认尝试隐藏但仍需注意。4.3 处理动态内容与反爬挑战当遇到JavaScript渲染的内容或验证码时requests库就力不从心了。对于JS渲染首选Selenium、Playwright或Puppeteer。它们能驱动真实浏览器执行所有JS代码。但代价是资源消耗大、速度慢。一个折中方案是先尝试用requests获取如果返回的内容是空的或包含反爬提示再降级到无头浏览器方案。对于验证码简单图形验证码可以考虑使用OCR库如pytesseract识别但成功率有限。复杂验证码如点选、滑块商业解决方案是使用打码平台如超级鹰、图鉴将图片发送到平台由人工或AI识别后返回结果。这是目前最可靠的方式需要付费。根本性规避尝试寻找网站是否有无需验证码的API接口通过浏览器开发者工具抓包分析或者通过维护有效的登录会话Cookie来避免反复触发验证。4.4 分布式架构与任务调度对于超大规模爬取单机单IP无论如何优化都有极限。此时需要考虑分布式爬虫。架构思路使用一个中心化的任务调度器如Redis的List/Set结构将待爬取的URL分发给多个爬虫节点Worker。每个Worker运行在不同的机器或容器中使用独立的代理IP池。优势将请求压力、IP资源、计算资源分散开显著提升爬取效率和抗封禁能力。即使部分节点IP被封其他节点仍可继续工作。工具Scrapy框架结合Scrapy-Redis可以很方便地搭建分布式爬虫。也可以使用Celery进行通用任务队列管理。5. 诊断、监控与应急响应体系即使做了万全准备IP被封的情况仍可能发生。建立一个快速的诊断和响应流程至关重要。5.1 封禁症状快速诊断当爬虫失败时不要急于换IP先根据响应内容判断原因HTTP状态码403 Forbidden明确拒绝访问IP或会话很可能已被封。429 Too Many Requests请求过快触发了速率限制。需要立即降低频率。5xx Server Error可能是服务器问题也可能是反爬系统返回的伪装错误。响应内容返回包含“Access Denied”、“Blocked”、“Security Check”等关键词的HTML页面。返回一个验证码页面。返回的JSON数据中包含code: 9999,message: risk control等业务风控提示。网络层面TCP连接被直接拒绝或超时。5.2 构建监控与告警系统一个健壮的爬虫系统应该有眼睛和耳朵。关键指标监控成功率请求成功HTTP 200且获取到有效数据的比例。低于阈值如95%告警。特定错误率429/403状态码出现的频率突然升高是封禁的前兆。代理IP健康度可用代理IP的数量、平均响应时间。日志记录详细记录每个请求的IP、URL、状态码、响应时间、是否使用代理、代理IP地址。这些日志是事后分析和排查的黄金资料。实时告警当成功率骤降或特定错误激增时通过邮件、钉钉、企业微信等渠道即时通知负责人。5.3 设计弹性重试与熔断机制在代码层面必须预见到失败并做好准备。import requests from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type # 使用tenacity库实现优雅重试 retry( stopstop_after_attempt(3), # 最多重试3次 waitwait_exponential(multiplier1, min2, max10), # 指数退避等待 retryretry_if_exception_type((requests.exceptions.ConnectionError, requests.exceptions.Timeout)), before_sleeplambda retry_state: print(f第{retry_state.attempt_number}次重试等待{retry_state.next_action.sleep}秒...) ) def fetch_with_retry_and_proxy_rotation(url, proxy_pool): 带重试和代理轮换的请求函数 proxy proxy_pool.get_next_proxy() # 从IP池获取下一个代理 try: response requests.get(url, proxies{http: proxy, https: proxy}, timeout10) if response.status_code 429: # 遇到速率限制等待更长时间并标记此代理短期内慎用 proxy_pool.report_busy(proxy) time.sleep(30) # 等待30秒 raise requests.exceptions.RetryError(Rate limited) # 触发重试 if response.status_code in [403, 503]: # 遇到封禁或服务不可用立即标记代理失效并触发重试使用新代理 proxy_pool.report_failure(proxy) raise requests.exceptions.RetryError(Banned or unavailable) response.raise_for_status() proxy_pool.report_success(proxy) # 报告代理成功 return response except requests.exceptions.RequestException as e: proxy_pool.report_failure(proxy) raise e # 在主循环中调用 try: html fetch_with_retry_and_proxy_rotation(target_url, my_proxy_pool).text except Exception as e: print(f最终获取失败: {e}) # 记录失败可能将URL重新放回待爬队列这个机制确保了单次请求失败不会导致整个任务崩溃并能自动切换可用的资源。6. 高级话题与合规性考量6.1 应对更高级的反爬技术一些顶尖的网站会使用更复杂的方案例如TLS/SSL指纹识别检测客户端如爬虫程序在SSL握手过程中产生的指纹与主流浏览器比对。应对方法包括使用curl_cffi等库模拟浏览器指纹或直接使用无头浏览器。WebSocket流量分析一些实时数据通过WebSocket传输并可能在其中夹杂心跳包或加密逻辑。需要使用支持WebSocket的库如websockets并完整模拟其交互协议。行为生物特征分析如前所述分析鼠标移动、触屏轨迹等。这通常需要非常精细的无头浏览器操控才能模拟。面对这些往往需要专门的逆向工程分析网站前端JavaScript代码理解其数据获取和校验的全流程然后尝试在Python中复现关键逻辑。这是一个门槛较高的领域。6.2 法律与伦理的边界这是所有爬虫开发者必须时刻铭记的底线。遵守robots.txt在爬取前检查目标网站的robots.txt文件通常位于网站根目录如https://example.com/robots.txt。它指明了网站允许和禁止爬虫访问的路径。虽然这不是法律文件但尊重它是行业惯例和基本礼仪。查看服务条款很多网站的用户协议中明确禁止未经授权的自动化数据抓取。违反条款可能导致法律风险。不要造成破坏严格控制请求速率避免对目标网站服务器造成拒绝服务DoS攻击式的压力。你的爬虫不应该影响正常用户的访问体验。尊重数据版权与隐私抓取的数据特别是个人隐私信息或明确声明版权的数据其使用和传播必须严格遵守相关法律法规如《网络安全法》、《个人信息保护法》。切勿将抓取的数据用于非法用途。我个人在实际操作中最深刻的体会是技术对抗永无止境但最稳固的“防封”策略其实是“合作”与“尊重”。在可能的情况下优先寻找官方提供的API接口如果必须爬取就像一位礼貌的访客轻手轻脚有节有度。将更多的精力花在数据清洗、分析和价值挖掘上远比在无休止的攻防战中消耗资源更有意义。当你把爬虫的请求间隔调大到像真人浏览一样当你为每个请求配上合理的身份标识你会发现很多“封禁”其实本可以避免。

相关新闻

2024显示器接口终极指南:HDMI、DP、USB-C如何选?

2024显示器接口终极指南:HDMI、DP、USB-C如何选?

1. 从一根线缆说起:为什么接口选择不是小事如果你刚组装好一台新电脑,或者准备给笔记本外接一个大屏,大概率会面临一个看似简单却容易让人纠结的问题:该用哪根线?是翻箱倒柜找出来的老VGA线,还是显示器自带…

2026/10/20 9:29:12 阅读更多 →
Gerrit合并冲突解决:从Git原理到IDEA实战指南

Gerrit合并冲突解决:从Git原理到IDEA实战指南

1. 从“Merge Conflict”的恐惧到理解:一个真实的入门场景 如果你刚接触Gerrit不久,或者对Git的理解还停留在 git add 、 git commit 、 git push 三板斧的阶段,那么“Merge Conflict”这个词很可能让你心头一紧。屏幕上那一堆带着 &l…

2026/10/20 11:50:27 阅读更多 →
本地生活系统架构拆解:统一后台、订单索引与私有化交付

本地生活系统架构拆解:统一后台、订单索引与私有化交付

县城本地服务商评估「本地生活系统」时,技术评审最容易被演示页带偏:频道菜单越长越像「能交付」。真正决定扩面成本的,是域边界是否清晰——统一后台、跨业务订单索引、营销能力是否共享、未启用模块能否拒绝调用。下文按「问题 → 无中台困…

2026/10/19 16:54:45 阅读更多 →

最新新闻

NeuDecide:面向儿童语音交互的端到端轻量决策模型

NeuDecide:面向儿童语音交互的端到端轻量决策模型

1. 项目概述:一个被严重低估的“语音直通决策”范式转变最近在几个开源模型仓库和儿童教育硬件论坛里反复看到NeuDecide这个名字,点进去发现它不是又一个微调版 Whisper 或者 Whisper,而是一个彻底绕开传统语音识别(ASR&#xff0…

2026/10/20 18:14:48 阅读更多 →
企业大模型选型方法论:场景匹配、成本、工程与安全四维评估

企业大模型选型方法论:场景匹配、成本、工程与安全四维评估

前阵子有个做企业服务的哥们儿来找我聊,说他们准备把正在用的模型服务换掉,原因是“排行榜第一名已经换人了,我们是不是也该跟着换”。我当时就劝他先把预算和业务场景摆到桌面上,别急着追榜单。做模型选型这些年,我见…

2026/10/20 18:14:48 阅读更多 →
BC106上三角矩阵判定:从解题到工程应用的深度解析

BC106上三角矩阵判定:从解题到工程应用的深度解析

1. 从一道题看矩阵判定的门道"BC106 上三角矩阵判定"这个标题,第一次看到的人可能会觉得——不就是判断一个矩阵是不是上三角吗?有什么好讲的。但真正写过这道题、并且被它卡过的人都知道,这里面藏着不少容易翻车的地方。我第一次做…

2026/10/20 18:14:48 阅读更多 →
macOS本地AI照片视频搜索:多模型协同的隐私高效方案

macOS本地AI照片视频搜索:多模型协同的隐私高效方案

1. 这不是又一个“本地AI搜索”玩具,而是 macOS 上真正能管用的照片视频管家 你有没有过这种经历:去年夏天在海边拍的几百张照片,想找其中一张戴着草帽的合影,结果在相册里翻了二十分钟,最后靠模糊记忆点开某个日期文件…

2026/10/20 18:14:48 阅读更多 →
Archify开源项目商业化路径:从8万Star到$29/月SaaS产品

Archify开源项目商业化路径:从8万Star到$29/月SaaS产品

1. 项目概述:一个开源工具如何从代码仓库走向商业化产品“我免费开源的 Archify 约 8 万 Star,别人先做出了 $19/月的在线版”——这句话不是抱怨,而是一面镜子,照出了当代开源生态里最真实、也最容易被忽视的底层逻辑&#xff1a…

2026/10/20 18:14:48 阅读更多 →
生物医学传感器信号链设计:从换能原理到工程实践

生物医学传感器信号链设计:从换能原理到工程实践

简介:山东大学《生物医学传感器与测量》国家精品课程课件共447页,压缩包内为单个PDF文件,总大小46.57MB。课程面向生物医学工程、传感器技术相关专业学生,以及智能手环、血氧仪等可穿戴设备研发和医疗仪器应用工程师。内容从绪论入…

2026/10/20 18:13:46 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →