对抗样本攻击方法全解析:从FGSM到PGD的实战指南
1. 对抗样本攻击方法总结从原理到实操的完整拆解搞对抗样本这几年我最大的感受就是攻击方法和防御方法就像在打一场永不停歇的军备竞赛。你今天找到一个能骗过模型的扰动明天人家加个防御层就把你挡住了。但不管防御怎么进化攻击侧的底层逻辑其实就那么几大类把这几类的核心思路吃透了遇到新模型你也能快速找到切入点。这篇内容我打算把自己在对抗样本攻击方面积累的经验做一次系统梳理。从基于梯度的攻击到基于优化的攻击再到黑盒场景下的迁移攻击每一类我都会讲清楚它的核心原理、关键参数怎么调、代码怎么落地以及我在实际测试中踩过的坑。适合已经了解深度学习基础、想深入对抗样本领域的朋友也适合做模型安全评估的同行参考。读完你至少能做到拿到一个目标模型知道该选哪种攻击方法、参数怎么设、预期效果大概是什么水平。2. 对抗样本攻击的核心分类与选型逻辑2.1 白盒与黑盒攻击场景的第一道分水岭对抗样本攻击最顶层的分类就是白盒和黑盒。白盒意味着你能拿到目标模型的全部信息——网络结构、权重参数、梯度信息。黑盒则相反你只能通过输入查询来观察输出拿不到任何内部信息。这个区分为什么重要因为它直接决定了你能用哪些方法。白盒场景下基于梯度的攻击方法FGSM、PGD、CW等是最直接有效的你可以精确计算损失函数对输入的梯度沿着梯度方向添加扰动就能让模型犯错。黑盒场景就麻烦多了你没法直接算梯度只能靠查询反馈来估计或者利用迁移性——在一个替代模型上生成对抗样本然后拿去攻击目标模型。我个人的经验是如果你做安全评估优先确认攻击场景。很多论文里宣称的攻击成功率是在白盒条件下测的实际部署环境往往是黑盒成功率会打不少折扣。所以做评估报告时一定要标注清楚测试条件不然容易误导。2.2 定向与非定向攻击目标决定损失函数设计非定向攻击只需要让模型输出错误结果就行比如把猫识别成狗、把停止标志识别成限速标志具体错成什么无所谓。定向攻击则要求模型输出指定的错误类别比如必须把这张猫的图识别成“汽车”。这个区别直接影响损失函数的设计。非定向攻击通常最大化真实标签对应的损失让模型对正确类别的置信度下降。定向攻击则要最小化目标类别的损失让模型对指定错误类别的置信度上升。从难度上说定向攻击比非定向攻击难得多。我实测下来同样的扰动预算下非定向攻击的成功率通常比定向攻击高20到40个百分点。所以如果你只是想验证模型鲁棒性非定向攻击就够了如果要模拟更复杂的攻击场景才需要上定向攻击。2.3 扰动范数约束L-inf、L-2与L-0的取舍对抗样本的一个核心约束是扰动要“小到人眼察觉不到”。怎么衡量这个“小”常用的有三种范数L-inf范数限制每个像素的最大修改量。比如ε8/255意味着每个像素通道最多改变8个灰度级。这是最常用的约束因为它直接对应“肉眼不可见”的直观感受。L-2范数限制扰动的整体能量。它允许某些像素改得多、某些改得少只要总能量不超限。适合需要分散扰动的场景。L-0范数限制被修改的像素数量。它追求的是“只改最少的像素”每个像素可以改很多。适合评估模型对局部扰动的敏感性。选哪种范数取决于你的攻击目标。如果要做物理世界的攻击比如打印出来贴在路牌上L-inf更合适因为打印和拍摄过程会引入噪声每个像素的精确控制很难保证。如果做数字世界的攻击L-2和L-0都有各自的应用场景。注意不同范数下的攻击成功率不能直接比较。我见过有人拿L-inf的ε8/255和L-2的ε1.0做对比说某个方法更强这其实没有可比性因为扰动预算的度量方式完全不同。3. 基于梯度的经典攻击方法详解3.1 FGSM一步到位的快速攻击FGSMFast Gradient Sign Method是最经典的对抗攻击方法没有之一。它的核心思想极其简单计算损失函数对输入的梯度然后沿着梯度的符号方向以步长ε修改每个像素。公式就一行x_adv x ε * sign(∇_x J(x, y_true))其中x是原始输入y_true是真实标签J是损失函数ε是扰动预算。为什么用sign因为L-inf约束下每个像素能改的最大量是ε要让损失增加最多就应该让每个像素都往梯度最大的方向走满ε。sign函数正好实现了这一点。FGSM的优点是快——只需要一次前向传播和一次反向传播就能生成对抗样本。缺点是攻击成功率有限尤其是ε比较小的时候。我实测在CIFAR-10上ε8/255时FGSM的非定向攻击成功率大概在60%到70%之间比PGD低不少。但FGSM有一个不可替代的优势它是很多迭代攻击方法的基础。理解了FGSM后面的I-FGSM、PGD都是水到渠成。3.2 I-FGSM与PGD迭代攻击的威力I-FGSMIterative FGSM就是把FGSM迭代执行多次每次走一小步然后把结果裁剪回ε邻域内。公式如下x_0 x x_{t1} Clip_{x,ε}(x_t α * sign(∇_x J(x_t, y_true)))其中α是每步的步长通常取ε/10或者更小。Clip_{x,ε}表示把结果裁剪到以x为中心、ε为半径的L-inf球内。PGDProjected Gradient Descent和I-FGSM几乎一样唯一的区别是PGD在每次迭代前会加一个随机初始化。这个小小的改动让PGD成为了公认的最强一阶攻击方法之一。为什么PGD比I-FGSM强因为随机初始化让PGD可以从多个起点探索损失曲面更容易找到全局最优的对抗样本。而I-FGSM从原始样本出发容易陷入局部最优。我实测下来在CIFAR-10上ε8/255、步长α2/255、迭代20次时PGD的非定向攻击成功率能到95%以上定向攻击也能到60%到70%。这个数字在大多数模型上都很稳定。实操心得PGD的迭代次数不是越多越好。我试过迭代100次成功率比20次只高了不到1个百分点但耗时翻了5倍。一般20次迭代就够用了如果模型特别鲁棒可以加到50次。3.3 CW攻击优化视角下的精准打击CW攻击Carlini Wagner Attack是另一种思路。它不直接最大化损失函数而是把攻击问题转化成一个优化问题在满足扰动约束的前提下最小化目标类别的置信度与真实类别置信度之间的差距。CW攻击的原始形式使用L-2范数后来也扩展到了L-inf和L-0。它的核心创新在于损失函数的设计L max(0, Z(x_adv)_target - max_{i≠target} Z(x_adv)_i κ)其中Z是模型输出的logitsκ是一个置信度margin参数。这个损失函数的设计让攻击更加“精准”——不仅要让模型分类错误还要让错误类别的置信度比真实类别高出至少κ。CW攻击的优点是攻击成功率高、扰动小而且对防御方法如蒸馏、对抗训练有较强的穿透力。缺点是慢——它需要迭代求解优化问题每次迭代都要计算梯度比PGD慢一个数量级。我一般只在需要极高攻击质量或者评估防御方法时用CW。日常测试用PGD就够了。3.4 三种方法的对比与选型建议方法攻击成功率生成速度扰动质量适用场景FGSM中极快一般快速评估、大规模测试PGD高中等好标准评估、对抗训练CW极高慢极好防御评估、论文实验选型逻辑很简单如果只是快速看看模型有没有明显的鲁棒性问题FGSM就够了。如果要做正式的鲁棒性评估用PGD。如果要评估一个防御方法是否真的有效或者要发论文上CW。4. 黑盒场景下的攻击策略与实操4.1 迁移攻击用替代模型打目标模型迁移攻击是黑盒场景下最实用的方法。核心思路是既然拿不到目标模型的梯度那就自己训练一个替代模型在替代模型上生成对抗样本然后直接拿去攻击目标模型。迁移攻击能成功的关键在于“对抗样本的可迁移性”——不同模型在相似数据上训练后学到的特征表示會有重叠所以在一个模型上有效的扰动往往对另一个模型也有效。提高迁移成功率有几个技巧使用多个替代模型的集成在多个模型上同时生成对抗样本然后取平均或者投票。我实测下来用3到5个不同架构的模型做集成迁移成功率能比单模型高20到30个百分点。使用动量迭代在迭代过程中加入动量项让更新方向更稳定避免在替代模型上过拟合。这就是MI-FGSM方法的核心思想。输入多样性在每次迭代时对输入做随机变换如随机缩放、随机填充增加对抗样本的多样性。DI-FGSM方法就是这么做的。4.2 查询攻击用反馈估计梯度如果连替代模型都训练不了那就只能靠查询了。查询攻击通过反复向目标模型发送输入并观察输出来估计梯度方向或者直接搜索最优扰动。常见的查询攻击方法有NESNatural Evolution Strategies把梯度估计看作一个优化问题通过采样来估计梯度。每次迭代需要几百到几千次查询。Bandits把每个像素的梯度估计看作一个多臂老虎机问题用时间平均来估计梯度。查询效率比NES高一些。Square Attack一种基于随机搜索的方法不需要估计梯度直接在随机方向上尝试修改。查询效率很高而且对防御方法有较强的穿透力。查询攻击的优点是适用性广——只要有查询接口就能用。缺点是查询次数多容易被检测到。实际测试时要注意目标模型是否有查询频率限制或者异常检测机制。注意查询攻击的查询次数是核心指标。我见过一些方法宣称攻击成功率高但需要几十万次查询实际场景根本不可行。一般评估时要看“在1000次查询内能达到多少成功率”。4.3 迁移与查询的混合策略实际场景中纯迁移或者纯查询都不一定最优。我常用的策略是先用迁移攻击生成一个初始对抗样本然后用少量查询做微调。这样既能利用迁移攻击的高效性又能通过查询弥补迁移性的不足。具体操作是在替代模型上跑PGD生成对抗样本然后以这个样本为起点在目标模型上跑少量迭代的查询攻击。我实测下来这种混合策略比纯迁移攻击的成功率高15到25个百分点而查询次数只有纯查询攻击的十分之一。5. 对抗样本攻击的实操流程与参数调优5.1 环境搭建与基础代码框架先说一下我常用的环境配置。深度学习框架用PyTorch版本2.0以上。对抗攻击库我推荐用TorchAttacks或者Foolbox这两个库封装了大部分经典攻击方法调用很方便。但如果要做定制化攻击还是得自己写。一个基础的PGD攻击代码框架大概长这样import torch import torch.nn as nn def pgd_attack(model, x, y, epsilon8/255, alpha2/255, iters20): x_adv x.clone().detach() x_adv x_adv torch.empty_like(x_adv).uniform_(-epsilon, epsilon) x_adv torch.clamp(x_adv, 0, 1) for i in range(iters): x_adv.requires_grad True output model(x_adv) loss nn.CrossEntropyLoss()(output, y) grad torch.autograd.grad(loss, x_adv)[0] x_adv x_adv.detach() alpha * grad.sign() delta torch.clamp(x_adv - x, -epsilon, epsilon) x_adv torch.clamp(x delta, 0, 1) return x_adv.detach()这段代码有几个关键点随机初始化、梯度符号更新、裁剪回ε邻域、裁剪到有效像素范围。少任何一步都会影响攻击效果。5.2 扰动预算ε的设定逻辑ε的选择是对抗攻击中最关键的参数。设大了人眼能看出来失去了对抗样本的意义设小了攻击成功率上不去。我一般这样设定MNISTε0.3像素范围0到1这个预算下扰动几乎不可见但攻击成功率能到95%以上。CIFAR-10ε8/255这是最常用的设定扰动肉眼几乎不可见PGD攻击成功率能到95%以上。ImageNetε4/255到16/255取决于具体任务。分类任务一般用4/255检测任务可以用到16/255。如果你要做物理世界的攻击ε要设得更大因为打印和拍摄过程会损失很多细节。我做过一个路牌攻击的实验ε设到了32/255才在拍摄后还能保持攻击效果。5.3 步长α与迭代次数的配合步长α和迭代次数是配合使用的。α太大攻击容易震荡不收敛α太小需要更多迭代次数才能走到边界。我常用的配置是α ε/10迭代次数20到50次。比如ε8/255α就取0.8/255迭代20次。这个配置在大多数模型上都能收敛到不错的攻击效果。如果迭代20次后攻击成功率还不理想我会先把迭代次数加到50次而不是调大α。因为α太大容易导致攻击不稳定而增加迭代次数只是多花点时间效果更可靠。5.4 攻击效果评估指标评估攻击效果不能只看攻击成功率。我一般会看三个指标攻击成功率在扰动预算内成功让模型分类错误的样本比例。这是最核心的指标。平均扰动大小成功攻击的样本平均用了多少扰动。这个指标反映攻击的“效率”——用更小的扰动达到同样的成功率说明攻击方法更强。感知距离用LPIPS等感知度量来衡量扰动的人眼可见性。有些扰动虽然L-inf很小但集中在纹理复杂区域人眼很容易察觉。实操心得做评估报告时一定要同时报告攻击成功率和平均扰动大小。只报成功率不报扰动大小相当于说“我用了很大的扰动才攻击成功”这没有意义。6. 常见问题与排查技巧实录6.1 攻击成功率上不去怎么办这是最常见的问题。排查思路如下检查梯度计算是否正确最常见的问题是忘了把输入设为requires_gradTrue或者忘了清零梯度。我踩过好几次这个坑排查半天才发现是梯度没算对。检查裁剪逻辑裁剪回ε邻域和裁剪到有效像素范围是两步操作顺序不能反。先裁剪到ε邻域再裁剪到[0,1]范围。如果反了扰动可能超出预算。检查模型是否在训练模式有些层如Dropout、BatchNorm在训练和推理模式下行为不同。攻击时要把模型设为eval模式否则梯度计算会不稳定。尝试更大的ε或更多迭代次数如果以上都没问题可能是扰动预算太小或者迭代次数不够。先加大预算看看成功率能不能上去如果能说明是预算问题如果不能说明是方法问题。6.2 生成的对抗样本人眼可见这个问题通常有两个原因一是ε设得太大二是扰动集中在敏感区域。如果是ε太大那就减小ε但攻击成功率会下降。这时候可以换更强的攻击方法比如从FGSM换成PGD用更小的ε达到同样的成功率。如果是扰动分布问题可以尝试加入感知约束。比如在损失函数里加一项LPIPS损失惩罚人眼可见的扰动。或者用L-0约束只修改最关键的几个像素而不是全图均匀修改。6.3 迁移攻击成功率低迁移攻击成功率低是常态因为不同模型的特征表示差异可能很大。提高迁移成功率的方法我在4.1节已经说了这里补充几个实操细节替代模型的选择替代模型和目标模型的架构越相似迁移成功率越高。如果知道目标模型是ResNet替代模型也用ResNet成功率会比用VGG高不少。训练数据的匹配替代模型的训练数据要和目标模型的训练数据分布接近。如果目标模型是在ImageNet上训练的替代模型也要在ImageNet上训练不能用CIFAR-10。集成权重的调整多个替代模型集成时不是简单平均就好。我一般会给和目标模型更相似的替代模型更高的权重。6.4 查询攻击被检测到查询攻击需要大量查询容易被目标模型的异常检测机制发现。规避方法有控制查询频率不要短时间内发送大量查询加一些随机延迟。使用多样化的查询输入不要只用对抗样本查询混入一些正常样本。限制查询次数优先用迁移攻击只在关键时刻用查询微调。注意做安全评估时一定要获得授权。未经授权的攻击测试可能违反法律法规。我一般只在自有模型或者有明确授权的模型上做测试。6.5 常见问题速查表问题可能原因解决方法攻击成功率低梯度计算错误检查requires_grad和梯度清零攻击成功率低扰动预算太小增大ε或换更强的方法对抗样本可见ε太大减小ε换PGD等更强方法对抗样本可见扰动集中加感知约束或换L-0约束迁移成功率低替代模型不匹配换更相似的架构和训练数据查询被检测查询频率太高加随机延迟混入正常样本7. 对抗样本攻击的进阶方向7.1 物理世界攻击数字世界的对抗样本已经比较成熟了但物理世界的攻击还有很多挑战。打印和拍摄过程会引入噪声、光照变化、角度变化这些都会影响攻击效果。我做过一个简单的物理攻击实验把对抗样本打印出来用手机拍照再输入模型。结果发现攻击成功率从数字世界的95%掉到了30%左右。后来用了EOTExpectation Over Transformation方法在生成对抗样本时模拟多种变换旋转、缩放、光照变化成功率才回到60%以上。物理攻击的关键是鲁棒性——对抗样本要在多种变换下都有效。这需要在生成时就把变换考虑进去而不是生成后再做数据增强。7.2 针对检测模型的攻击前面说的都是针对分类模型的攻击。针对检测模型如YOLO、Faster R-CNN的攻击更复杂因为检测模型的输出是多个边界框和类别不是单一的类别概率。针对检测模型的攻击通常要同时欺骗两个部分让模型漏检真实目标或者让模型误检不存在的目标。我常用的方法是把检测损失分类损失回归损失作为攻击目标用PGD同时优化这两部分。实测下来针对检测模型的攻击比分类模型难不少。同样的扰动预算下分类模型的攻击成功率能到95%检测模型可能只有60%到70%。这是因为检测模型对局部扰动的敏感性更低而且有多个输出需要同时欺骗。7.3 对抗样本的防御与攻击的博弈最后简单说一下防御侧。常见的防御方法有对抗训练、输入预处理、梯度掩码等。对抗训练是最有效的但计算成本很高。输入预处理如JPEG压缩、位深缩减能挡住一些弱攻击但对PGD这种强攻击效果有限。梯度掩码容易被BPDABackward Pass Differentiable Approximation方法绕过。我个人的看法是没有哪种防御是绝对安全的。攻击和防御的博弈会一直持续下去。做安全评估时要用多种攻击方法交叉验证不能只测一种就下结论。这个方向后续还可以往自动化攻击搜索、多模态对抗样本、大模型对抗攻击等方向扩展。尤其是大模型时代对抗样本的攻击面和防御面都在快速变化值得持续关注。

相关新闻

桌面端AI工具实战:本地会话管理与API密钥安全存储指南

桌面端AI工具实战:本地会话管理与API密钥安全存储指南

1. 桌面端AI工具的核心价值与设计思路1.1 为什么桌面端是更务实的选择聊到AI工具的使用形态,很多人第一反应是打开浏览器、登录网页、输入问题、等待回答。这套流程在偶尔用用的时候没什么问题,但一旦你把它当成日常生产力工具,每天要调用几十…

2026/10/15 6:12:42 阅读更多 →
高德地图JS API自定义Marker图标与InfoWindow窗口完全指南

高德地图JS API自定义Marker图标与InfoWindow窗口完全指南

做地图类前端时间久了会发现,高德地图 JS API 自带的那根红色大头针和白色气泡,几乎是我见过“被替换率”最高的默认组件。刚接触时觉得挺省事,new 一个 Marker 就完事;等真正做门店地图、运营点位、活动大屏时,默认图…

2026/10/15 6:12:42 阅读更多 →
前端工程师如何转型Agent开发:从状态管理到工具调用

前端工程师如何转型Agent开发:从状态管理到工具调用

1. 从一个前端视角重新理解 Agent 开发1.1 为什么前端工程师会对 Agent 开发产生误解我做了六年多前端,从 jQuery 时代一路写到现在的组件化框架,去年开始接触 Agent 相关的项目。最开始那两个月,我踩了一个非常大的坑:我以为做 A…

2026/10/15 6:12:42 阅读更多 →

最新新闻

SpringBoot+Vue轻量级博客系统设计与实现

SpringBoot+Vue轻量级博客系统设计与实现

1. 项目概述:SpringBootVue轻量级博客系统设计去年帮学弟评审毕业设计时,发现市面上很多博客系统要么功能冗余,要么扩展性差。于是我们决定用SpringBootVue搭建一个轻量级但五脏俱全的在线创作社区。这个系统最核心的特点是采用前后端分离架构…

2026/10/15 6:55:51 阅读更多 →
正念与心流:10分钟呼吸练习,让专注成为生命底色

正念与心流:10分钟呼吸练习,让专注成为生命底色

1. 先说清楚:我们到底在谈什么你有没有过这样的时刻:明明手头有一件重要的事要做,却忍不住五分钟刷一次手机;开会时脑子飘到晚上吃什么;想读几页书,眼睛盯着一行字,心里却已经把明天的待办事项过…

2026/10/15 6:55:51 阅读更多 →
Oracle 数据实时入仓 Doris 和 StarRocks 怎么做?CDC、全量迁移与 5 种方案对比

Oracle 数据实时入仓 Doris 和 StarRocks 怎么做?CDC、全量迁移与 5 种方案对比

在很多企业系统中,Oracle 负责在线事务处理,Doris 或 StarRocks 负责报表、数据分析和实时数据服务。当订单、用户、支付和日志数据持续增长时,直接在 Oracle 上运行复杂统计 SQL,可能影响线上业务。因此,很多团队会建…

2026/10/15 6:55:51 阅读更多 →
SpringBoot+Vue+MyBatis构建企业级电商平台实战

SpringBoot+Vue+MyBatis构建企业级电商平台实战

1. 项目概述"企业级网购平台管理系统"是一个基于SpringBootVueMyBatis技术栈的完整电商解决方案。这套源码包含了电商平台的核心功能模块,采用前后端分离架构设计,数据库使用MySQL,适合快速构建中小型B2C或B2B电商平台。我在实际电…

2026/10/15 6:55:51 阅读更多 →
聚簇索引vs非聚簇索引:从底层原理到实战避坑全解析

聚簇索引vs非聚簇索引:从底层原理到实战避坑全解析

做后端开发这几年,索引相关的坑我踩过不少。面试被问过无数次“聚簇索引和非聚簇索引区别”,带新人的时候也发现,大部分同学对这两个词的理解停留在“一个有序一个无序”或者“聚簇索引就是主键”这种模糊层面。一旦落到实际业务,…

2026/10/15 6:55:51 阅读更多 →
盲盒商城软件开发案例:连接概率说明、微信支付、在线开赏与积分兑换

盲盒商城软件开发案例:连接概率说明、微信支付、在线开赏与积分兑换

盲盒商城的购买过程与普通商品商城有所不同。用户在付款前,需要了解盲盒价格、可抽取内容和相关规则;完成支付后,再进入开赏环节。商品展示、概率说明、支付结果和积分记录之间,需要形成清晰的操作顺序。 某公司的这套盲盒商城软件…

2026/10/15 6:54:51 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →